Comando che esegue l'offset doppio di una linea

Angelo2449

Utente Junior
Professione: Pensionato
Software: Autocad
Regione: Lombardia
#1
Salve a tutti,
sto tentando di scrivere un programma che esegua l'offset doppio di una linea, ho scopiazzato un po' ma il risultato non funziona.
Qualcuno mi aiuta?
Codice:
(defun C:WPOINT (/ os pt1 pt ptt ptxy ptv ptvett ptd ptdir Distanza)

        (setvar "blipmode" 1)

        (setq os (getvar "osmode"))
        (setvar "osmode" 8)
        (setq pt1 (getpoint "\nSelezionare il WPUNTO: "))
        (setq pt (car pt1))
        (setq ptt (cadr pt1))
        (setq ptxy (strcat (rtos pt 2 4) "," (rtos ptt 2 4)))

        (command "_circle" pt1 1.00 "")

        (princ "\nVettore <")
        (princ ptvett)
        (princ "> : ")
        (setq ptv (getpoint))
        (if ptvett (setq point ptv))
        (command "_line" pt1 ptv "")
        (setq Linea1 (entlast))
        
        (princ "\nDirezione <")
        (princ ptdir)
        (princ "> : ")
        (setq ptd (getpoint))
        (if ptdir (setq point ptd))

        (setq Distanza 30.00)

        (vla-offset Linea1 Distanza)
        (vla-offset Linea1 (- Distanza))

   );;defun fine comandi WPOINT
Grazieeeeeee!
 

rpor66

Utente Standard
Professione: Programmatore
Software: AutoCad, GstarCAD, CadWorx, Excel, Lisp, VBA
Regione: Sicilia
#2
Codice:
(defun c:OffsetDoppio(/ sel n pt Distanza p1 p2)
    (setq sel (nentsel "\nSeleziona entità: "))
    (setq Distanza 10)
    (setq n (car sel))
    (setq pt (cadr sel))
    (command "_ucs" "_ent" Pt)
    (SetOsnapOnOff "OFF")
    (setq p1 (trans (list 0 -100) 0 1))
    (setq p2 (trans (list 0 100) 0 1))   
    (command "_ucs" "_w")
    (command "_offset" Distanza n p1 "")
    (command "_offset" Distanza n p2 "")
    (SetOsnapOnOff "ON")
)

; accende o spegne gli osnap, equivalente al tasto F3
(defun SetOsnapOnOFF(mode / osmode)       
    (setq osmode (getvar "osmode"))
    (if (= mode "ON")
        (if (> osmode 16384)
            (setvar "osmode" (- osmode 16384))
        )
        (if (< osmode 16384)
            (setvar "osmode" (+ osmode 16384))
        )       
    )
)
Selezioni entità, linea o polilinea, la distanza la imposti nella variabile Distanza.
Con nentsel ottengo il nome dell'entità selezionata e la coordinata del punto selezionato.
Tramite il punto imposto l'ucs object che si allinea secondo l'asse x, calcolo 2 punti lungo l'asse Y e tramite trans li converto in punti wcs.
A questo punto passo al comando offset il nome dell'entità e il primo punto calcolato, ripeto con il secondo punto.