tzframpton 发表于 2022-7-6 12:10:40

正在查找PLINE的LISP

我想我以前见过它,但基本上它是一个LISP,为柱脚线上的单线平面视图创建斜接90°和45°(嗯,任何角度都可以)管道符号。图中附有一个示例,当您绘制PLINE时,它会在每个角度梯段(以黄色突出显示)沿梯段放置相应的符号。有人知道我在哪里能找到它吗?再次感谢任何能伸出援助之手的人。

fixo 发表于 2022-7-6 12:14:41

 
这是一个快速而肮脏的简单lisp
希望它能让你开始
来吧,我可不想偷懒
 

(defun C:demo(/ ang1 ang2 points elist endang tick p1 p1r p1u p2 p2r p2u
      p3 p4 pline pmid pt1 pt2 startang)

(setvar 'osmode 0)

(setvar 'cecolor "blue")

(setvar 'plinewid 0)

(command "._pline")

(while (= 1 (logand 1 (getvar 'cmdactive)))
(command pause))

(setq pline(entlast)
   points (vl-remove-if
       (function not)
       (mapcar
       (function (lambda (x)
                     (if (= 10 (car x))
                     (cdr x))))
       (setq elist (entget pline))
       )
       )
   tick   25.4 ;<-- ticks length
   )

(setq startang (angle (car points) (cadr points))
   endang   (angle (nth (- (length points) 2) points) (last points))
   )

(setq p1   (polar (car points) (+ startang (/ pi 2)) (/ tick 2))
   pmid (mapcar (function (lambda (a b) (/ (+ a b) 2)))
           (car points)
           p1)
   p2   (polar pmid (+ startang pi) (/ tick )
   p4   (polar (car points) (- startang (/ pi 2)) (/ tick 2))
   pmid (mapcar (function (lambda (a b) (/ (+ a b) 2)))
           (car points)
           p4)
   p3   (polar pmid startang (/ tick )
   )

(setvar 'cecolor "cyan")

(command "_spline" p1 p2 p3 p4 "" p1 p4 "")

(setq p1   (polar (last points) (+ endang (/ pi 2)) (/ tick 2))
   pmid (mapcar (function (lambda (a b) (/ (+ a b) 2)))
           (last points)
           p1)
   p2   (polar pmid (+ endang pi) (/ tick )
   p4   (polar (last points) (- endang (/ pi 2)) (/ tick 2))
   pmid (mapcar (function (lambda (a b) (/ (+ a b) 2)))
           (last points)
           p4)
   p3   (polar pmid endang (/ tick )
   )

(command "_spline" p1 p2 p3 p4 "" p1 p4 "")

(setvar 'cecolor "yellow")

(while (> (length points) 2)
(setq        ang1 (+ (angle (car points) (cadr points)) pi)
ang2 (angle (cadr points) (caddr points))
pt1(polar (cadr points) ang1 tick)
p1u(polar pt1 (+ ang1 (/ pi 2)) (/ tick 2))
p1r(polar pt1 (- ang1 (/ pi 2)) (/ tick 2))
pt2(polar (cadr points) ang2 tick)
p2u(polar pt2 (+ ang2 (/ pi 2)) (/ tick 2))
p2r(polar pt2 (- ang2 (/ pi 2)) (/ tick 2))
)
(setvar 'plinewid (/ tick )
(command "._pline" "_non" p1u "_non" p1r "")

(command "._pline" "_non" p2u "_non" p2r "")

(setq points (cdr points))
)
(princ)
)

 
~'J'~

tzframpton 发表于 2022-7-6 12:21:26

嗯,这也许行得通。我下载了它,并已经做了一些调整,它的工作正是我需要的。。。我只需要存储OSMODE并在命令结束时恢复它,然后在其中获取一个错误处理程序。我要到星期一回去工作才碰剩下的。
 
实际上,让我来做这个,完成后我会发布我完成的代码修订。这对我来说是一个很好的学习机会。。。。谢谢你的帮助。我想我可以接受这个并完成它。这对我来说也是很棒的学习。我星期一回来

fixo 发表于 2022-7-6 12:25:40

 
我很高兴看到你们的最终产品
 
干杯
 
~'J'~

tzframpton 发表于 2022-7-6 12:29:00

嗯,我可以做一些“代码伪装”,但我绝对不是程序员。我做过的最好的Lisp程序程序是大约6行,哈哈。无论如何,我要出城度周末,我相信当我周一回来的时候,我会有一些问题。。。。再次感谢。

fixo 发表于 2022-7-6 12:30:21

 
好的,让我知道你需要改变什么-
我会完全做到的
 
~'J'~

stevesfr 发表于 2022-7-6 12:34:35

 
 
抱歉报告,这是我得到的。。。。
 
命令:演示
._普林线
指定起点:
当前线宽为0.0000
指定下一点或[弧/半宽/长度/撤消/宽度]:
指定下一点或[弧/闭合/半宽/长度/撤消/宽度]:
指定下一点或[弧/闭合/半宽/长度/撤消/宽度]:
命令:;错误:错误的参数类型:2D/3D点:nil
 
蓝线,没别的
 

fixo 发表于 2022-7-6 12:39:14

 
谢谢你的测试
对不起,我现在不能换
以后再做
 
~'J'~

fixo 发表于 2022-7-6 12:41:09

 
尝试编辑的版本
 
~'J'~
管LSP

stevesfr 发表于 2022-7-6 12:46:36

 
对不起,还是有点不对劲。。。又是蓝线了
 
命令:管道
._普林线
指定起点:
当前线宽为0.0000
指定下一点或[弧/半宽/长度/撤消/宽度]:
指定下一点或[弧/闭合/半宽/长度/撤消/宽度]:
指定下一点或[弧/闭合/半宽/长度/撤消/宽度]:
指定下一点或[弧/闭合/半宽/长度/撤消/宽度]:
命令:错误的参数类型:2D/3D点:nil_撤消当前设置:自动=打开,
控制=全部,联合收割机=是
输入要撤消的操作数或[自动/控制/开始/结束/标记/返回]
:_E
命令:
页: [1] 2
查看完整版本: 正在查找PLINE的LISP