CAD programy 4M
Sčítání vzdáleností ve 2D
Tento skript pro měření a sčítání délek usnadní práci v případě, že je třeba změřit celkovou délku několika segmentů. Tato verze nebere v potaz souřadnici Z, takže se vždy jedná o vzdálenost v základní rovině. To je výhodné pro 2D výkresy, protože není nutné kontrolovat, zda měřené entity neleží v prostoru. Měřené segmenty nemusí být spojité (navazovat na sebe). Celková změřená délka je při každém kroku vypisována v příkazovém řádku.Měření lze u každého segmentu omezit na vzdálenost ve směru osy X nebo Y.
Příkaz je volán zadáním "2dd" do příkazového řádku programu.
(DEFUN C:2DD(/ p1 p2 dalsi p1x p2x p1y p2y dx dy td td0)
(setq td 0.0)
(while (setq p1 (getpoint "\nZadejte prvni bod segmentu: "))
(initget 128)
(setq p2 (getpoint p1 "\nZadejte dalsi bod nebo omezte smer mereni klavesou X ci Y: "))
(if (listp p2)
(progn
(setq td0 (distancexy p1 p2))
(princ (strcat "\nDelka segmentu v rovine XY: " (rtos td0)))
)
(progn
(setq osa p2)
(if (or (= osa "x") (= osa "X"))
(progn
(setq p2 (getpoint p1 "\nZadejte dalsi bod: "))
(setq td0 (distancex p1 p2))
(princ (strcat "\nDelka segmentu v rovine XY: " (rtos td0)))
)
)
(if (or (= osa "y") (= osa "Y"))
(progn
(setq p2 (getpoint p1 "\nZadejte dalsi bod: "))
(setq td0 (distancey p1 p2))
(princ (strcat "\nDelka segmentu v rovine XY: " (rtos td0)))
)
)
)
)
(setq p1 p2)
(initget 128)
(while (setq p2 (getpoint p1 "\nZadejte dalsi bod nebo omezte smer mereni na X ci Y: "))
(if (listp p2)
(progn
(setq td0 (+ td0 (distancexy p1 p2)))
)
(progn
(setq osa p2)
(if (or (= osa "x") (= osa "X"))
(progn
(setq p2 (getpoint p1 "\nZadejte dalsi bod: "))
(setq td0 (+ td0 (distancex p1 p2)))
)
)
(if (or (= osa "y") (= osa "Y"))
(progn
(setq p2 (getpoint p1 "\nZadejte dalsi bod: "))
(setq td0 (+ td0 (distancey p1 p2)))
)
)
)
)
(setq p1 p2)
(princ (strcat "\nCelkova delka segmentu v rovine XY: " (rtos td0)))
(initget 128)
)
(setq td (+ td0 td))
(princ "\n")
(princ (strcat "Celkova delka v rovine XY dosud: " (rtos td)))
)
(princ (strcat "Celkova delka v rovine XY: " (rtos td)))
(princ)
)
(defun distancexy (point1 point2 / p1x p2x p1y p2y dx dy dxy)
(setq p1x (car point1))
(setq p2x (car point2))
(setq p1y (cadr point1))
(setq p2y (cadr point2))
(setq dx (- p1x p2x))
(setq dy (- p1y p2y))
(setq dxy (sqrt (+ (expt dx 2) (expt dy 2))))
)
(defun distancex(point1 point2 / p1x p2x dx)
(setq p1x (car point1))
(setq p2x (car point2))
(setq dx (abs (- p1x p2x)))
)
(defun distancey(point1 point2 / p1y p2y dy)
(setq p1y (cadr point1))
(setq p2y (cadr point2))
(setq dy (abs (- p1y p2y)))
)
(princ)
Soubor ke stažení