[ Home | Discussioni Attive | Discussioni Recenti | Segnalibro | Msg privati | Sondaggi Attivi | Utenti | Download | Cerca | FAQ ]
Nome Utente:
Password:
Salva Password
Password Dimenticata?

 Tutti i Forum
 Autocad
 VBA - Visual Basic per Autocad
 numerare i punti AcadPoint

Nota: Devi essere registrato per poter inserire un messaggio.

Larghezza finestra:
Nome Utente:
Password:
Icona Messaggio:              
             
Messaggio:

  * Il codice HTML è ON
* Il Codice Forum è OFF


   Allega file
  Clicca qui per sottoscrivere questa Discussione.
 
    

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.


© Torna all'inizio della Pagina
Tradotto Da: Vincenzo Daniele & Luciano Boccellino- www.targatona.it | Distribuito Da: Massimo Farieri - www.superdeejay.net | Powered By: - Snitz Forums 2000 Version 3.4.03

Antidoto.org | Brutto.it | Estela.org | Equiweb.it