• This site uses cookies. By continuing to use this site, you are agreeing to our use of cookies. Leggi altro.

Lista vertici polilinee

IvanB

Utente poco attivo
Professione: disegnatore
Software: Autocad
Regione: Trentino
#1
Ciao a tutti,

non ho mai utilizzato VBA e probabilmente la domanda è banale:
Ho un disegno con circa 700/800 polilinee (e nientaltro) e avrei bisogno di ottenere una lista delle coordinate di ogni vertice (raggruppate per polilinea). In un'altra discussione ho trovato un lisp che ricava la lista delle coordinate ma non le divide per polilinea. Qualcuno ha un'idea su come potrei fare?

(per spiegarmi meglio. Quello che vorrei ottenere è un file di testo del tipo:
1
123.2155;125.548
524.256;2541.23658
ecc.
2
58413.54136;315431.65416
652.65841;564713.315461
ecc.
3
351.5143;3254.37413
ecc. ecc.)

grazie
 

IvanB

Utente poco attivo
Professione: disegnatore
Software: Autocad
Regione: Trentino
#3
Grazie, è esattamente quello di cui avevo bisogno. Mi sarebbe piaciuto vedere il codice (tanto per imparare qualcosa di nuovo) ma anche così va benissimo. Grazie
 

Shape

Utente Senior
Professione: Disegnatore Carpenteria
Software: Autocad, VBA-AutoLisp, Tecnometal4D, GIMP
Regione: Friuli
#4
Grazie, è esattamente quello di cui avevo bisogno. Mi sarebbe piaciuto vedere il codice (tanto per imparare qualcosa di nuovo) ma anche così va benissimo. Grazie
Chiedi e ti sarà dato... :4441:

E' un adattamento di qlc che avevo già fatto, quindi sistatticamente un po' "scorretto". Cmq funziona


Public Sub Numera_Vertici()

On Error Resume Next

Dim ENTOBJ As AcadLWPolyline
Dim element As AcadEntity
Dim sset As AcadSelectionSet

Dim coord As Variant
Dim ncoord As Integer
Dim point As Variant

On Error Resume Next
' Delete the Selection Set if it Exists
If Not IsNull(ThisDrawing.SelectionSets.Item("element")) Then
Set sset = ThisDrawing.SelectionSets.Item("element")
sset.Delete
End If

Set sset = ThisDrawing.SelectionSets.Add("element")

Dim Filtertype(0) As Integer
Dim Filterdata(0) As Variant

Filtertype(0) = 100
Filterdata(0) = "AcDbPolyline"

sset.SelectOnScreen Filtertype, Filterdata


Dim x, u As Integer
Dim punto As Integer
Dim i As Integer
Dim Excel As Object
Dim excelSheet As Object

On Error Resume Next

Set Excel = GetObject(, "Excel.Application")

If Err <> 0 Then
Err.Clear
Set Excel = CreateObject("Excel.Application")

If Err <> 0 Then
MsgBox "Could not load Excel.", vbExclamation
End
End If
End If
On Error GoTo 0

Excel.Visible = True
Excel.Workbooks.Add
Excel.Sheets("Foglio1").Select
Set excelSheet = Excel.ActiveWorkbook.Sheets("Foglio1")

Dim y As Integer
x = 1
u = 1

For Each element In sset
element.Highlight True
Dim nome As String
nome = element.Layer

coord = element.Coordinates

ncoord = UBound(coord) - LBound(coord) + 1

ReDim point(0 To ncoord) As Double

excelSheet.Cells(u, 1).Value = x
u = u + 1
For i = 0 To ncoord - 1 Step 2
point(0) = coord(i): point(1) = coord(i + 1)
excelSheet.Cells(u, 1).Value = point(0) & ";" & point(1)
u = u + 1
Next i

x = x + 1
Next element

End Sub
 

Shape

Utente Senior
Professione: Disegnatore Carpenteria
Software: Autocad, VBA-AutoLisp, Tecnometal4D, GIMP
Regione: Friuli
#6
E come si utilizza.... scusate l'ignoranza......
Scarichi il file, lo salvi sul pc

Avvia autocad Strumenti->macro->Carica Progetto e selezioni il file che hai scaricato

Poi da strumenti macro->macro->selezioni la riga della macro e dai esegui

Selezioni la polilinea e se non oricordo male dovrebbe avviare excel e salvare i dati che esporta.

Era una cosa fatta ad hoc per l'utente secondo sue indicazioni.

Su può modificare se ne hai necessità.
 

santolf

Utente poco attivo
Professione: Ingegnere
Software: AutoCAD Map 3D
Regione: Torino
#7
Ciao a tutti,

Intanto vi ringrazio per il programma...molto utile!

Soltanto una domanda, sarebbe possibile ottenere anche la "z"?

Allo stadio attuale ho una serie di polilinee classiche le quali, oltre ai valori x e y dei singoli vertici, sono caratterizzate da un valore di quota riportato nel campo "elevazione".

Utilizzando il comando "lista", l'informazione viene trasferita automaticamente ai singoli vertici e, in sostanza, si riesce ad ottenere una lista di punti caratterizzati dalle 3 coordinate cartesiane "x,y,z" (che è il mio obiettivo primario).

Sarebbe chiaramente molto utile se tale possibilità si potesse ottenere anche dalla macro di cui sopra...

Grazie mille!
 

Shape

Utente Senior
Professione: Disegnatore Carpenteria
Software: Autocad, VBA-AutoLisp, Tecnometal4D, GIMP
Regione: Friuli
#8
Ciao a tutti,

Intanto vi ringrazio per il programma...molto utile!

Soltanto una domanda, sarebbe possibile ottenere anche la "z"?

Allo stadio attuale ho una serie di polilinee classiche le quali, oltre ai valori x e y dei singoli vertici, sono caratterizzate da un valore di quota riportato nel campo "elevazione".

Utilizzando il comando "lista", l'informazione viene trasferita automaticamente ai singoli vertici e, in sostanza, si riesce ad ottenere una lista di punti caratterizzati dalle 3 coordinate cartesiane "x,y,z" (che è il mio obiettivo primario).

Sarebbe chiaramente molto utile se tale possibilità si potesse ottenere anche dalla macro di cui sopra...

Grazie mille!

Ecco fatto, attenzione non polilinee3d ma polilinee con elevazione.

Se l'elevazione è diversa da 0 viene elaborata, altrimenit si comporta come la precedente.
 

Allegati

sammi75

Utente poco attivo
Professione: ingegnere
Software: autocad
Regione: sicilia
#10
Ciao a tutti, io ho una polilinea realizzata a mano in Autocad2002 e vorrei ottenere i un listato dei vertici, cioè una lista contenente le coordinate di tutti i vertici che la compongono. Se non sbaglio esiste un comando in Autocad che mi consente di fare ciò. Io l'ho visto usare, ma ora non mi ricordo più quale fosse. ho provato con il comando "lista", ma questo mi da le proprietà dei vertici punto per punto.
Grazie in anticipo

sammi75
 

Shape

Utente Senior
Professione: Disegnatore Carpenteria
Software: Autocad, VBA-AutoLisp, Tecnometal4D, GIMP
Regione: Friuli
#11
Ciao a tutti, io ho una polilinea realizzata a mano in Autocad2002 e vorrei ottenere i un listato dei vertici, cioè una lista contenente le coordinate di tutti i vertici che la compongono. Se non sbaglio esiste un comando in Autocad che mi consente di fare ciò. Io l'ho visto usare, ma ora non mi ricordo più quale fosse. ho provato con il comando "lista", ma questo mi da le proprietà dei vertici punto per punto.
Grazie in anticipo

sammi75
Consa intendi "ho provato con il comando "lista", ma questo mi da le proprietà dei vertici punto per punto"

Il comando lista restituisce questa sintassi:

Comando: li LISTA
Selezionare oggetti: Specificare angolo opposto: trovato(i) 1

Selezionare oggetti:

LWPOLYLINE Layer: "0"
Spazio: Spazio modello
Gestore = 1b07
Aperta
larghezza costante 0.0
area 24832.0
lunghezza 448.6

al punto X= 484.7 Y= 291.1 Z= 0.0
al punto X= 560.5 Y= 434.0 Z= 0.0
al punto X= 674.9 Y= 348.3 Z= 0.0
al punto X= 666.4 Y= 204.7 Z= 0.0

dove ci sono le coordinate dei vertici che la compongono... non è qullo che vuoi ?
 

Davide_Marino

Utente poco attivo
Professione: Geometra
Software: CAD
Regione: Sicilia
#12
Salve a tutti,
ho scaricato la macro gentilmente offerta da "shape" (Numera_Vertici_Elevazione.dvb)
ma non funziona con Autocad 2016, che posso fare?

Grazie
Davide
 

dieva

Utente Standard
Professione: CAD Manager - AutoCAD sw developer
Software: AutoCAD | BricsCAD | 3DSMax | Revit
Regione: puglia
#13
Salve a tutti,
ho scaricato la macro gentilmente offerta da "shape" (Numera_Vertici_Elevazione.dvb)
ma non funziona con Autocad 2016, che posso fare?

Grazie
Davide
Dovresti dirci quale è il messaggio di errore, altrimenti...

Un'altra alternativa potrebbe essere questo mio programma Freeware che si chiama COORDINATE.
http://www.domenicoieva.com/coordinate.html
Ha molti parametri e forse potrebbe fare al caso tuo.
Ciao