BenaCZ
09.10.2006, 13:19
Napsal jsem lisp na tvorbu křivky, která změní své koncové body o nějakou vzdálenost a nastaví se určitá šířka křivky. Všechno funguje supr, jen mám problém s nastavením správných úchopových bodů:
Když mám puštené všechny úchopové body, tak se to chytá správně. Pokud ale chci vybrat jen určitý úchopový bod (např přes nabídku pravého tlačítka nebo přes klávesovou zkratku), tak se to chytá špatně. vůbec nevím čím to je...
Nevíte někdo? Díky Bena
Zde je lisp:
;;; Vykreslí křivku o tloušťce určené globálním měřítkem mezi 2 body a odsune ji o 1 mm na výkrese
(defun C:schema_auto (/ myline startpt endpt
new_startpt new_endpt tloustka
odpal uhel delta_x delta_y
width
)
(terpri)
;;; Definuje úsečku
(setq odpal (+ (/ (getvar "ltscale") 2) (getvar "ltscale")))
(terpri)
(setq startpt (getpoint "Z bodu: "))
(terpri)
(terpri)
(setq endpt (getpoint "Do bodu: "))
(command "_line" startpt endpt "")
;;; definice úhlu úsečky
(setq myline (entget (entlast)))
(setq startpt (assoc 10 myline))
(setq endpt (assoc 11 myline))
(setq delta_x (- (nth 1 endpt) (nth 1 startpt)))
(setq delta_y (- (nth 2 endpt) (nth 2 startpt)))
(setq uhel (atan delta_y delta_x))
;;; posun počátečního bodu o "odpal" ve směru úsečky
(setq new_startpt
(list 10
(+ (nth 1 startpt) (* odpal (cos uhel)))
(+ (nth 2 startpt) (* odpal (sin uhel)))
(nth 3 startpt)
)
)
(setq myline (subst new_startpt startpt myline))
;;; posun koncového bodu o "odpal" ve směru úsečky
(setq new_endpt (list 11
(- (nth 1 endpt) (* odpal (cos uhel)))
(- (nth 2 endpt) (* odpal (sin uhel)))
(nth 3 endpt)
)
)
(setq myline (subst new_endpt endpt myline))
;;; aktualizuje databázi Autocadu
(entmod myline)
;;; Převede úsečku na křivku o zadané tloušťce
(setq width (* (getvar "ltscale") 1))
(if (= (getvar "peditaccept") 0)
(command "_pedit" "_last" "A" "")
) ;převede na křivku pokud musím potvrdit otázku zda to chci převést na křivku
(if (= (getvar "peditaccept") 1)
(command "_pedit" "_last")
) ;převede na křivku bez otázky na převod na křivku
(setq mojekrivka (entget (entlast)))
(setq mojekrivka
(subst (cons 43 width) (assoc 43 mojekrivka) mojekrivka)
) ; tzv tečkový pár tvoří to cons
;;; aktualizuje databázi Autocadu
(entmod mojekrivka)
;;; tichý odchod
(princ)
)
Když mám puštené všechny úchopové body, tak se to chytá správně. Pokud ale chci vybrat jen určitý úchopový bod (např přes nabídku pravého tlačítka nebo přes klávesovou zkratku), tak se to chytá špatně. vůbec nevím čím to je...
Nevíte někdo? Díky Bena
Zde je lisp:
;;; Vykreslí křivku o tloušťce určené globálním měřítkem mezi 2 body a odsune ji o 1 mm na výkrese
(defun C:schema_auto (/ myline startpt endpt
new_startpt new_endpt tloustka
odpal uhel delta_x delta_y
width
)
(terpri)
;;; Definuje úsečku
(setq odpal (+ (/ (getvar "ltscale") 2) (getvar "ltscale")))
(terpri)
(setq startpt (getpoint "Z bodu: "))
(terpri)
(terpri)
(setq endpt (getpoint "Do bodu: "))
(command "_line" startpt endpt "")
;;; definice úhlu úsečky
(setq myline (entget (entlast)))
(setq startpt (assoc 10 myline))
(setq endpt (assoc 11 myline))
(setq delta_x (- (nth 1 endpt) (nth 1 startpt)))
(setq delta_y (- (nth 2 endpt) (nth 2 startpt)))
(setq uhel (atan delta_y delta_x))
;;; posun počátečního bodu o "odpal" ve směru úsečky
(setq new_startpt
(list 10
(+ (nth 1 startpt) (* odpal (cos uhel)))
(+ (nth 2 startpt) (* odpal (sin uhel)))
(nth 3 startpt)
)
)
(setq myline (subst new_startpt startpt myline))
;;; posun koncového bodu o "odpal" ve směru úsečky
(setq new_endpt (list 11
(- (nth 1 endpt) (* odpal (cos uhel)))
(- (nth 2 endpt) (* odpal (sin uhel)))
(nth 3 endpt)
)
)
(setq myline (subst new_endpt endpt myline))
;;; aktualizuje databázi Autocadu
(entmod myline)
;;; Převede úsečku na křivku o zadané tloušťce
(setq width (* (getvar "ltscale") 1))
(if (= (getvar "peditaccept") 0)
(command "_pedit" "_last" "A" "")
) ;převede na křivku pokud musím potvrdit otázku zda to chci převést na křivku
(if (= (getvar "peditaccept") 1)
(command "_pedit" "_last")
) ;převede na křivku bez otázky na převod na křivku
(setq mojekrivka (entget (entlast)))
(setq mojekrivka
(subst (cons 43 width) (assoc 43 mojekrivka) mojekrivka)
) ; tzv tečkový pár tvoří to cons
;;; aktualizuje databázi Autocadu
(entmod mojekrivka)
;;; tichý odchod
(princ)
)