V I S U A L I Z Z A D I S C U S S I O N E |
Vincenzo |
Inserito il - 21/12/2007 : 22:01:53 Salve a tutti
Vorrei un aiuto da chi certamente è più competente di me. Sto provando, da profano, a scrivere una routine per una macro che, dati dei punti disegnati in autocad, mi scriva accanto ai punti una numerazione che cresce con il crescere delle coordinate, x, y,z. Quindi P1 avrebbe la X più piccola, P2 quella subito più grande, e via dicendo.... Dunque scopiazzando in rete ho scritto con qlke midifica la seguente: Option Explicit Dim COORD(500, 3) As Double
Dim tempx, tempy, tempz, textHgt As Double Dim ent As AcadPoint Dim entit As AcadEntity Dim TextObj As AcadText Dim point(2), inspoint(2) As Double Dim TextStr As String
Private Sub CommandButton1_Click() Dim a, b, c, d, i, k, count As Integer
For Each entit In ThisDrawing.ModelSpace If TypeOf entit Is AcadText Then entit.Delete End If Next
For Each ent In ThisDrawing.ModelSpace
point(0) = ent.Coordinates(0) point(1) = ent.Coordinates(1) point(2) = ent.Coordinates(2)
count = count + 1
COORD(count, 1) = point(0) COORD(count, 2) = point(1) COORD(count, 3) = point(2) Next
For i = 1 To count - 1 For k = i + 1 To count
If COORD(k, 1) < COORD(i, 1) Then tempx = COORD(i, 1) tempy = COORD(i, 2) tempz = COORD(i, 3) COORD(i, 1) = COORD(k, 1) COORD(i, 2) = COORD(k, 2) COORD(i, 3) = COORD(k, 3)
COORD(k, 1) = tempx COORD(k, 2) = tempy COORD(k, 3) = tempz End If
If COORD(k, 1) = COORD(i, 1) Then If COORD(k, 2) < COORD(i, 2) Then tempx = COORD(i, 1) tempy = COORD(i, 2) tempz = COORD(i, 3)
COORD(i, 1) = COORD(k, 1) COORD(i, 2) = COORD(k, 2) COORD(i, 3) = COORD(k, 3)
COORD(k, 1) = tempx COORD(k, 2) = tempy COORD(k, 3) = tempz End If End If
If COORD(k, 1) = COORD(i, 1) Then If COORD(k, 2) = COORD(i, 2) Then If COORD(k, 3) < COORD(i, 3) Then tempx = COORD(i, 1) tempy = COORD(i, 2) tempz = COORD(i, 3)
COORD(i, 1) = COORD(k, 1) COORD(i, 2) = COORD(k, 2) COORD(i, 3) = COORD(k, 3)
COORD(k, 1) = tempx COORD(k, 2) = tempy COORD(k, 3) = tempz End If End If End If Next k Next i
For i = 1 To count TextStr = i textHgt = 20 inspoint(0) = COORD(i, 1) inspoint(1) = COORD(i, 2) inspoint(2) = COORD(i, 3) Set TextObj = ThisDrawing.ModelSpace.AddText(TextStr, inspoint, textHgt) TextObj.Update Next
End Sub
Così com'è funziona, ma non appena disegno una linea un altro oggetto mi genere un errore che, DAVVERO non capisco... Dove sbaglio?
Grazie in anticipo |
6 U L T I M E R I S P O S T E (in alto le più recenti) |
admin |
Inserito il - 31/12/2007 : 09:27:34 Ciao, volevo farti usare dei filtri dove il risultato degli oggetti dovrebbe essere per esempio solo quelli del layer 0 o altro che decidi te, ma dovrei guardare sull'help di Autocad. Purtroppo credo che da qualche ultimo aggiornamento di Windows non apre + l'help dedicato per VBA e questo mi succede anche al lavoro su tutti i PC. Al momento il suggerimento che ti do è fare un IF dove verifichi se il punto esaminato è nel layer per esempio "0". Provo a vedere se in internet trovo qualcosa. Ciao e ti auguroi un buon anno 2008 se non ci sentiamo entro la fine. |
Vincenzo |
Inserito il - 28/12/2007 : 11:40:28 Ciao
se volessi adesso numerare i punti (come prima) ma soltanto per quelli di un layer per esempio il layer "0" quello di default di autocad? Scrivo così...?
Dim ent as acadentity
For each ent in ThisDrawing.layers(0)
ho già provato ma non funziona perchè forse sbaglio a dichiarare qlcosa riguardo al layer, cioè, come si dichiara un layer già esistente? Scusa l'ignoranza....[:I] |
admin |
Inserito il - 27/12/2007 : 16:50:53 Bene, son contento di esserti stato di aiuto[:D]
Ciao! |
Vincenzo |
Inserito il - 27/12/2007 : 13:04:51 Grazie ho seguito il tuo consiglio e tutto adesso è ok
Bye |
Vincenzo |
Inserito il - 27/12/2007 : 10:46:10 Ciao e grazie della celere risposta
Avevo già provato a dichiarare
ent As AcadEntity
e poi
For each ent in ThisDrawing.modelspace If TypeOf ent Is AcadPoint then etc...etc...
Ma non funziona ....anzi meno che meno.....
Potresti postarmi un esempio o un pezzetto di codice che faccia una cosa del genere. Ovviamente se hai del tempo.
Grazie in anticipo Auguri |
admin |
Inserito il - 24/12/2007 : 14:12:25 Ciao, scusa il ritardo ma ho avuto problemi col PC. Se mi andava ,male dovevo praticamente cambiarlo tutto, ma forse me la cavo solo con l'HD secondario. Comunque... dovrebbe essere perchè nel secondo For Each che fai e cioè questo "For Each ent In ThisDrawing.ModelSpace" trova le linee che non sono dei punti e visto che "ent" l'hai dichiarato "punto" praticamente, lui "s'intrippa". Io farei sta prova... prova a fare un each di tutto e ci metti un IF che verifica se l'oggetto è un punto, quindi se la condizione è verificata entra nel resto del codice. Però quello che mi giunge strano che appunto dichiarando "ENT" punto, nel for dovrebbe testare solo i punti. Io farei sta prova di questo IF che ti ho detto di aggiungere e mettere "ENT" tutti gli oggetti. Ciao e se ti serve ancora fatti sentire.
|
|
|