mrharris78 发表于 2022-7-6 14:23:56

改进的折线Lisp???

我想知道有没有人能帮上忙?
 
我需要一条多段线(保留弧/半径函数),它有3个元素(左侧、中心、右侧),都有颜色和宽度定义。例如
 
左侧元素。颜色–黄色,宽度–0.1
中心元素。颜色–白色,宽度–0.2
右侧元素。颜色–黄色,宽度–0.1
 
因此,总宽度为0.4。
见附件。
 
我尝试过多行,但这不起作用,多段线更灵活。目前,我正在通过复制和抵消来实现这一点,如果你只做了几次,这是可以的。用于路面标线**打呵欠**
 
任何帮助都将不胜感激。
 
干杯
 
H

Lee Mac 发表于 2022-7-6 14:30:19

不是我最好的,但应该做的工作:眨眼:
 

(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))

mrharris78 发表于 2022-7-6 14:33:28

李,
 
这真管用!印象深刻,天才我受到启发学习了这些东西,但现在我认为我有足够的能力修改它以适应不同的标记
 
非常感谢伴侣。
 
哈里斯
印度

Lee Mac 发表于 2022-7-6 14:37:54

 
很乐意帮忙
 
如果你对我发布的代码有任何问题,尽管问。
 

Lee Mac 发表于 2022-7-6 14:44:50

作为另一种选择,另一种表达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))

希望这有帮助
 

mrharris78 发表于 2022-7-6 14:49:54

谢谢李,
 
转换lisp(rdmark3)确实非常有用。我是一个非常初学者,当谈到写Lisp程序,我有几本电子书和参考指南,但仍然非常非常基本的水平自己。
“需要更多练习”
 
我会检查你的编码,并尝试拼凑出方法学。。。(乍一看有点超前)
 
如果我能通过这个论坛给你发几品脱,我会的
 
为你的帮助干杯。
 
哈里斯

stevesfr 发表于 2022-7-6 14:52:30

 
李,如果我想用黄色在一边,另一种颜色在中间白色的另一边来构造这条线,我需要使用mapcar两次,然后用颜色语句分别附加off1和off2吗?(或者给我一个线索?)
史蒂夫

ronjonp 发表于 2022-7-6 15:00:13

 
也许这会有所帮助,因为地图车容易混淆:
 
3

CAB 发表于 2022-7-6 15:03:30

这可能是我处理代码的方式。还要注意,当您处理少量数据时
使用今天的计算机,速度通常不是问题。

Lee Mac 发表于 2022-7-6 15:09:51

 
没错,我只是出于兴趣才把它包括进去的
页: [1] 2
查看完整版本: 改进的折线Lisp???