简单的LISP(我猜)
我发现自己再次需要像你这样的专家的帮助。我认为我想要的Lisp程序很简单,如果可以的话。我有一张画,画了几行,每行写一个值。本文显示了管道的直径(绘制的线是管道)。文本是简单的文本,而不是属性。
正如你可能已经猜到的,有数百个不同直径的管子。我需要的LISP如下:我单击文本-它读取的内容总是一个数字-将值除以2-单击行-将最后一个值偏移到每一侧,然后删除中间的行-结束命令。用这个Lisp程序的词,我会像疯子一样到处点击,直到我的所有线条都显示出管子的直径。
提前感谢,
罗德里戈 这会做你想做的,但它不允许你选择文本。您必须手动输入直径。在有人修改代码之前,它应该能让你暂时达到你想要的目的。。。
(defun c:DOF (/ a b b1 p1 d pckbox)
(setq d 20 p1 nil pee (/ pi 2)e 3 pckbox (getvar "pickbox")line "
")
(princ "\nEnter Pipe Diameter <")
(setq answer(getreal ">: "))
(setq answer2(/ answer 2))
(princ line)
(setvar "pickbox" pckbox)
(setq ent(entsel "\nPick the line: "))
(setvar "pickbox" 2)
(setq point(cadr ent))
(princ line)
(setq side(getpoint "\nPick an offset side: "))
(setq dist(distance side point))(setq ang(angle side point))
(if(or(or(< ang 0.78)(> ang 5.5))(and(> ang 2.35)(< ang 3.92)))
(setq ang(- 0 ang))(setq ang(- pi ang))
);end if
(setq other(polar point ang dist))
(command "offset" answer2 ent side ent other "")
(entdel(car ent))
(setvar "pickbox" pckbox)
(prin1)
)
感谢您的快速回复!我现在就试试这个! 如果你在lisp部分发布你的问题,你会得到更多的回复。
我已经为你把这条线移到那里了。 我喜欢人们说一个常规的写作很简单,但我无法想象自己能学会由谁来写。 我认为我应该更倾向于使用entmake,因为通过OFFSET命令拾取点可能会导致错误
(defun c:offtxt (/ tx tv ss en ed p10 p11 p20 p21 p30 p31 fd sd)
(while (or (not tx)
(/= (sslength tx) 1)
(<= (setq tv (atof (cdr (assoc 1 (entget (ssname tx 0)))))) 0.))
(princ "\nSelect Numeric Text To Read...")
(setq tx (ssget '((0 . "*TEXT")))))
(while (or (not ss)
(/= (sslength ss) 1))
(princ "\nSelect Line To Offset...")
(setq ss (ssget '((0 . "LINE")))))
(setq en (ssname ss 0)
ed (entget en)
p10 (cdr (assoc 10 ed))
p11 (cdr (assoc 11 ed))
p20 (polar p10 (+ (angle p10 p11) (* pi 0.5)) (* tv 0.5))
p30 (polar p10 (- (angle p10 p11) (* pi 0.5)) (* tv 0.5))
p21 (polar p11 (+ (angle p10 p11) (* pi 0.5)) (* tv 0.5))
p31 (polar p11 (- (angle p10 p11) (* pi 0.5)) (* tv 0.5))
fd (subst (cons 10 p20) (assoc 10 ed) ed)
fd (subst (cons 11 p21) (assoc 11 ed) fd)
sd (subst (cons 10 p30) (assoc 10 ed) ed)
sd (subst (cons 11 p31) (assoc 11 ed) sd))
(entmake fd)
(entmake sd)
(entdel en)
(redraw)
(prin1))
对于我们这些以英尺为单位绘制图形的人,我们可以在程序中将拾取的“文本”除以12,以便程序将拾取的文本识别为英寸。
谢谢
史蒂夫 David Bethels(*tv 0.5)这是偏移量
Lt Dans腿部(*0.5 di)相同(/(*0.5 di)12.0))
Thx AL,我试图找出如何将pick文本除以12。
你必须小心(distof),如果文本是以建筑为单位的,并且单位是十进制的“date=”,则返回值可以为零
[/代码']
(设置增值税“单位”2)
(距离“1’-0”)
还有颜色(62)厚度(39)线型(6)UCS(210)等会发生什么变化
-大卫
页:
[1]
2