改进的折线Lisp???
我想知道有没有人能帮上忙?我需要一条多段线(保留弧/半径函数),它有3个元素(左侧、中心、右侧),都有颜色和宽度定义。例如
左侧元素。颜色–黄色,宽度–0.1
中心元素。颜色–白色,宽度–0.2
右侧元素。颜色–黄色,宽度–0.1
因此,总宽度为0.4。
见附件。
我尝试过多行,但这不起作用,多段线更灵活。目前,我正在通过复制和抵消来实现这一点,如果你只做了几次,这是可以的。用于路面标线**打呵欠**
任何帮助都将不胜感激。
干杯
H
不是我最好的,但应该做的工作:眨眼:
(defun c:rdMark (/ pObj off1 off2)
(vl-load-com)
(command "_pline")
(while (> (getvar "CMDACTIVE") 0)
(command pause))
(setq pObj (vlax-ename->vla-object
(entlast)))
(vla-put-color pObj acWhite)
(vla-put-ConstantWidth pObj 0.2)
(setq off1 (vlax-safearray->list
(vlax-variant-value
(vla-offset pObj 0.15)))
off2 (vlax-safearray->list
(vlax-variant-value
(vla-offset pObj -0.15))))
(mapcar
(function
(lambda (x)
(vla-put-color x acYellow)
(vla-put-ConstantWidth x 0.1)))
(append Off1 Off2))
(princ))
李,
这真管用!印象深刻,天才我受到启发学习了这些东西,但现在我认为我有足够的能力修改它以适应不同的标记
非常感谢伴侣。
哈里斯
印度
很乐意帮忙
如果你对我发布的代码有任何问题,尽管问。
李 作为另一种选择,另一种表达LISP的方式是:
但是,就速度而言,mapcar很慢:
此外,如果要转换已绘制的多段线:
(defun c:rdMark3 (/ ss off1 off2)
(vl-load-com)
(if (setq ss (ssget '((0 . "LWPOLYLINE"))))
(foreach pObj (mapcar 'vlax-ename->vla-object
(vl-remove-if 'listp
(mapcar 'cadr (ssnamex ss))))
(vla-put-color pObj acWhite)
(vla-put-ConstantWidth pObj 0.2)
(setq off1 (vlax-safearray->list
(vlax-variant-value
(vla-offset pObj 0.15)))
off2 (vlax-safearray->list
(vlax-variant-value
(vla-offset pObj -0.15))))
(mapcar
(function
(lambda (x)
(vla-put-color x acYellow)
(vla-put-ConstantWidth x 0.1)))
(append Off1 Off2))))
(princ))
希望这有帮助
李 谢谢李,
转换lisp(rdmark3)确实非常有用。我是一个非常初学者,当谈到写Lisp程序,我有几本电子书和参考指南,但仍然非常非常基本的水平自己。
“需要更多练习”
我会检查你的编码,并尝试拼凑出方法学。。。(乍一看有点超前)
如果我能通过这个论坛给你发几品脱,我会的
为你的帮助干杯。
哈里斯
李,如果我想用黄色在一边,另一种颜色在中间白色的另一边来构造这条线,我需要使用mapcar两次,然后用颜色语句分别附加off1和off2吗?(或者给我一个线索?)
史蒂夫
也许这会有所帮助,因为地图车容易混淆:
3 这可能是我处理代码的方式。还要注意,当您处理少量数据时
使用今天的计算机,速度通常不是问题。
没错,我只是出于兴趣才把它包括进去的
页:
[1]
2