Allora, da dove posso cominiciare…
Devo necessariamente creare una struttura annidiata o una classe annidiata.
Per la struttura annidiata ho provato cos
Structure s_polyline
livello as string * 200
chiuso as integer
vertici() as s_vertici
End Structure
Structure s_vertici
x1 as double
y1 as double
livello as string * 200
bulge as double
chiuso as integer
End Structure
Dovrei utilizzarla in questo modo …
dim f_polyline as s_polyline
f_polyline.livello = "123"
f_polyline.chiuso = 1
for contatore = 1 to numerovertici
dim f_vertici as s_vertici
f_vertici.x1 = 100
f_vertici.y1 = 120
f_vertici.livello = "123"
f_vertici.bulge = 0.45
f_vertici.chiuso = 0
f_polyline.vertici.append f_vertici
next
Siccome non funziona ( mentre in vb funziona )
vorrei capire come invece funzionano le classi e se posso annidiarle…
Qualcuno mi mostra un’esempio ?
Sgrassie Mille.
Forse non ho compreso esattamente la tua domanda.
Vista la scarsa fruibilita’ delle strutture, in pratica utili solo per chiamate a funzioni in dll, procedi con le classi.
Definisci una classe di tipo “c_vertici” e una di tipo “c_polyline”.
Nella classe di tipo “c_polyline” avrai una proprieta’ “vertici” che e’ un array di classi “c_vertici”.
E’ questo che intendi?
Saluti.
Esattamente,
Polyline
+--- Polilyne1
- Numero vertici
- Chiusa
- Vertici
+----Vertice1
x1 = 100
y1 = 120
bulge
+----Vertice2
x1 = 100
y1 = 120
bulge
+--- Polilyne2
- Numero vertici
- Chiusa
- Vertici
+----Vertice1
x1 = 100
y1 = 120
bulge
+----Vertice2
x1 = 100
y1 = 120
bulge
Per alcuni file dxf sono anche più di 1000 polilinee
Per i vertici puoi usare una struttura
Per la polyline utilizza una classe
Curiosit:
Perch hai livello sul vertice, una polilinea pu avere vertici che appartengono a livelli diversi?
che cosa vuol dire chiuso su vertice?
A quanto pare una polilinea pu avere vertici che appartengono ad un livello diverso. Poi magari un errore che hanno lasciato li dalle calende greche…
il chiuso sul vertice indica come devo trattare la polilinea
1 su chiuso indica che la polilinea viene chiusa del tipo :
dim x1, x2, y1, y2 as Double
dim xx1, yy1 as Double
dim chiuso as integer
dim bulge as Double
dim flag as Boolean = true
dim contatore as integer
if e_vertici(inizio).chiuso <> 0 then
xx1 = e_vertici(inizio).x1
yy1 = e_vertici(inizio).y1
chiuso = e_vertici(inizio).chiuso
end if
contatore = inizio
while contatore <> fine
X1 = e_vertici(contatore).x1
Y1 = e_vertici(contatore).y1
bulge = e_vertici(contatore).bulde
contatore = contatore + 1
X2 = e_vertici(contatore).x1
Y2 = e_vertici(contatore).y2
Y1 = invertix(Y1)
Y2 = invertix(Y2)
'Dray the line
if bulge <> 0 then
Gotbulge x1,y1,x2,y2,bulge,colore
else
DrawDXFLine x1,y1,x2,y2,colore
end if
'rsitem.MoveNext
wend
if chiuso <> 0 then
X2 = xx1
Y2 = yy1
Y1 = invertix(Y1)
Y2 = invertix(Y2)
if bulge <> 0 then
Gotbulge x1,y1,x2,y2,bulge,colore
else
DrawDXFLine x1,y1,x2,y2,colore
end if
end if
in pratica indica che il primo vertice e l’ultimo coincidono.
Quindi polilinea chiusa…
Se poi andiamo a vedere :
'70 Polyline flag (bit-coded); default is 0:
'- 1 = This is a closed polyline (or a polygon mesh closed in the M direction).
'- 2 = Curve-fit vertices have been added.
'- 4 = Spline-fit vertices have been added.
'- 8 = This is a 3D polyline.
'- 16 = This is a 3D polygon mesh.
'- 32 = The polygon mesh is closed in the N direction.
'- 64 = The polyline is a polyface mesh.
'- 128 = The linetype pattern is generated continuously around the vertices of this polyline.