[ 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
 determinazione coordinate

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
Max Inserito il - 18/05/2008 : 22:35:15
Ciao Lucio e ciao a tutti
Da un po di tempo non scrivevo niente ed ora che riprovo mi trovo un bel pò arrugginito (cioè più di prima)
Ho un problema di approccio. Devo aprire, da VB, delle tavole in dwg che possono contenere, oltre a segmenti, testo e quanto altro, anche riferimenti esterni (immagini e/o dwg): devo determinare le coordinate dell'angolo in basso a sx della finestra minima che contiene il tutto. Naturalmente si tratta di tavole in due dimensioni.
Che faccio? Scorro tutti gli oggetti, determino le coordinate di ognuno, memorizzo ogni volta quella più in basso e quella più a sx o posso contare su qualche scorciatoia? o un modo più elegante?
Grazie sin da ora
Max
7   U L T I M E    R I S P O S T E    (in alto le più recenti)
Max Inserito il - 02/12/2008 : 09:01:42
Ciao Lucio
Per la verità ho già fatto qualche correzione: un conto è far lavorare il codice su due o tre oggetti di prova, un altro lavorare con tavole pesanti ed entità di disegno qualsiasi: ad esempio quando interseco con testo o blocchi ( devo vedere quali e perchè ) la routine da errore, che al momento ho risolto senza problemi con un resume next. Ancora una correzione anche perchè la routine risulta lenta quindi ho ottimizzato (si fa per dire) il posizionamento iniziale delle rette di scansione.
Fra qualche giorno penso di girare una versione con poche correzioni ma più efficiente.
Tra l'altro con i righi iniziali non riesco ad avviare autocad: devo prima avviarlo a mano!
Saluti
Massimo
admin Inserito il - 01/12/2008 : 20:07:00
Ciao Max,
spero tu abbia qualche giorno di pazienza,
devo rileggermi quello che ci avevamo detto e capire il codice che mi hai passato.
Max Inserito il - 29/11/2008 : 03:20:50
Ciao
Qualcosa mi sono inventato, non è molto elegante ma efficace.
La casistica è varia ed ho avuto un problema con IntersectWith() che non funziona bene quando gli elementi
del disegno sono paralleli agli assi.
Genero un segmento quasi verticale e trovo l'incrocio con l'elemento più a sx e trovo la x.
Genero un segmento quasi orizzontale e trovo la y.
Poi muovo tutto per lasciare spazio al cartiglio.
Sicuramente si può fare di meglio ma al momento....sembra funzionare a modo.
Rimango in attesa di suggerimenti
Un caro saluto

Sub muovetutto()
Dim x As Long, y As Long, newSSet As AcadSelectionSet
Dim P1(0 To 2) As Double, P2(0 To 2) As Double, i As Integer
x = Max_intersezione("x")
y = Max_intersezione("y")
Set newSSet = ThisDrawing.SelectionSets.Add("newSelSet")
newSSet.Select acSelectionSetAll
P1(0) = x: P1(1) = y: P1(2) = 0
P2(0) = 210: P2(1) = 0: P2(2) = 0
For i = 0 To newSSet.count - 1
newSSet.Item(i).Move P1, P2
Next i
ThisDrawing.SelectionSets.Item("newSelSet").Delete
End Sub

Public Function Max_intersezione(retta As String)
Dim lineObj As AcadLine, startPt(0 To 2) As Double, x As Double, salto As Integer
Dim endPt(0 To 2) As Double, intPoints As Variant, pass As Integer, mododiestensione As Integer
Dim newSSet As AcadSelectionSet, incrociato As Boolean, ssobj As AcadEntity
Dim i As Integer, j As Integer, assex As Boolean, incremento As Double
Dim count As Integer, index As Integer, coordx As Long
assex = False: test = True: x = 0: pass = 0
Set newSSet = ThisDrawing.SelectionSets.Add("newSelSet")
newSSet.Select acSelectionSetAll
incremento = 1: salto = 0
While test
incrociato = False: pass = pass + 1
If pass > 32000 Then
x = -10000
pass = 1
End If
Select Case retta
Case "x"
startPt(0) = x: startPt(1) = 0: startPt(2) = 0
endPt(0) = x - 1: endPt(1) = 1000: endPt(2) = 0
mododiestensione = 1
Case "y"
startPt(0) = 0: startPt(1) = x: startPt(2) = 0
endPt(0) = 1000: endPt(1) = x - 1: endPt(2) = 0
mododiestensione = 1
End Select
Set lineObj = ThisDrawing.ModelSpace.AddLine(startPt, endPt)
For Each ssobj In newSSet
intPoints = lineObj.IntersectWith(ssobj, mododiestensione)
For i = LBound(intPoints) To UBound(intPoints)
If pass > 1 Then
assex = True
If retta = "x" Then Max_intersezione = Int(intPoints(j)) - 1
If retta = "y" Then Max_intersezione = Int(intPoints(j + 1)) - 1
incrociato = True
Exit For
Else
salto = salto + 100
x = x - salto
incrociato = True
pass = 0
Exit For
End If
Next
If incrociato Then
Exit For
End If
Next 'ho scorso tutti gli oggetti
lineObj.Delete ' Cancello la riga di test
If assex Then
test = False
End If
x = x + incremento
Wend
ThisDrawing.SelectionSets.Item("newSelSet").Delete
End Function
Max Inserito il - 20/05/2008 : 14:14:43
Ciao
non so dove possono essere posizionati gli oggettiù: quindi (sicuramente) in tutti i quadranti.
L'idea del crossing mi piace.
Pensavo anche di scorrere ( o cercare intersezioni ) con due rette,
ad esempio x=0 e y=0
poi incrementare, o ridurre, nel caso non si trovino, o non si trovino, intersezioni.
Ora inizio a vedere cosa viene fuori, e se sono capace di far venir fuori qualcosa.
Un saluto
A presto.
Massimo
admin Inserito il - 20/05/2008 : 13:34:55
Ciao,
se per caso hai tutti gli oggetti al di sopra dello 0,0, pensavo che si potrebbe eseguire una selezione con il crossing ed incrementarla di 1mm alla volta finchè trovo uno o più oggetti, trovati i primi oggetti vado a verificare quale ha il punto più in basso.
Altrimenti credo proprio sia da scorrere tutti gli oggetti e verificarne il punto di inserimento.
Questa è la mia risposta al momento, comunque provo a cercare se c'è qualcosa che mi dia già questo famoso "punto".
Se nel frattempo riesci te a trovare qualcosa sarò ben lieto di saperne di più.
Ciao!
Max Inserito il - 19/05/2008 : 21:32:00
Praticamente hai centrato il problema.
Devo aprire tavole che possono contenere qualsiaso oggetto autocad, compresi immagini (lavoriamo con raster design) spostare il tutto, qualunque cosa sia, ed inserire il cartiglio a regola (norma) d'arte.
Il cartiglio potrebbe eseere compreso nell'immagine collegata, non esserci o esere a destra in basso a sx.
Ho concluso che non mi importa se c'è e dov'è!
Al peggio ce ne saranno due ma quello che metto io deve essere in basso a sx con tutte le informazioni del caso.
L'idea era: trovo il punto in basso a sx, lo sposto in (210,0) e in (0,) ci metto un bel blocco con tutti gli attributi del caso, con gli argomenti letti da una tabella.
Mi chiedevo se qualche funzione che non conosco, poteva aiutarmi.
Se vado a cercare ogni oggetto ho paura di perdere la strada!
Grazie e saluti Massimo


admin Inserito il - 19/05/2008 : 09:06:34
Ciao,
so che non si risponde con una domanda, ma per caso non è che hai dei cartigli così basta cercarli e trovare i punti di 2 oggetti solo??? Troppo facile sarebbe, vero??

© 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