Disegnare una linea da un punto perpendicolarmente ad un linea

Angelo2449

Utente Junior
Professione: Pensionato
Software: Autocad
Regione: Lombardia
#1
Salve a tutti,
sto cercando di tracciare un linea da un punto precedentemente definito (getpoint) ad una linea precedentemente tracciata.
I dati sono questi :
Punto di partenza : PuntoEmanazione
Linea alla quale tracciare la perpendicolare : PrimoPuntoGrondaUno , SecondoPuntoGrondaUno oppure L1 (come entità)
Ho provato con :
Codice:
(command "_line" PuntoEmanazione "_per" PrimoPuntoGrondaUno SecondoPuntoGrondaUno "")
ma niente succede.
Grazie mille.
 

Cristallo

Utente Standard
Professione: Leggo e confronto
Software: Lettura critica
Regione: Fuori dalla cerchia
#2
gli osnap in lisp non funzionano.
devi calcolarti tu il punto di perpendicolare mediante l'angolo assoluto della linea a cui deve essere perpendicolare
(setq angolo1 (angle PrimoPuntoGrondaUno SecondoPuntoGrondaUno))
a cui aggiungi 90°
(setq angolo2 (+ angolo1 (/ pi 2)))
Ora hai l'angolo perpendicolare. Se il punto si trova a sinistra della linea l'angolo è giusto, se il punto si trova a destra devi aggiungere ancora 180° (pi)
Questo vale per unità con rotazione destrorsa positiva.
Ti crei un punto d'appoggio P3
(setq P3 (polar PuntoEmanazione angolo2 1.00))
e ti fai cercare il punto di intersezione tra la linea iniziale e quella d'appoggio
(setq P_perp (inters PrimoPuntoGrondaUno SecondoPuntoGrondaUno PuntoEmanazione P3 nil))

il nil finale nella funzione inters ti permette di avere l'intersezione anche se le 2 linee materialmente non si intersecano (considera le due linee come se fossero delle xline)

Solo al quel punto puoi creare la tua linea perpendicolare mediante i punti che hai ricavato dai calcoli
(command "_line" PuntoEmanazione P_perp """)
 

Angelo2449

Utente Junior
Professione: Pensionato
Software: Autocad
Regione: Lombardia
#3
Grazie Cristallo,
ottima soluzione! Non capisco perché non funzioni con l'osnap dato che il comando diretto funziona!
Boh!
 

rpor66

Utente Standard
Professione: Programmatore
Software: AutoCad, GstarCAD, CadWorx, Excel, Lisp, VBA
Regione: Sicilia
#4
Altra soluzione al problema, suggeritomi da Confutatis un pò di tempo fa:

(setq NomeObj (vlax-ename->vla-object nProiez))
(setq ptp (vlax-curve-getClosestPointTo NomeObj Pt1))

dove nProiez è il nome della linea e Pt1 il punto da dove deve partire la linea perpendicolare a nProiez.
vlax-curve-getClosestPointTo calcola la minima distanza tra oggetto e punto.