乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
查看: 10|回复: 10

[编程交流] pline-继续绘制

[复制链接]

96

主题

351

帖子

62

银币

中流砥柱

Rank: 25

铜币
692
发表于 2022-7-5 22:26:52 | 显示全部楼层 |阅读模式
大家好。
这个Lisp程序可以继续绘制“pline”,但只能在末尾绘制。可以选择在“端点”或“起点”重新绘制吗??
 
  1. (defun c:test (/ oce1 oce2 oce3 oce4 oce5 vxs ss en ent en1 lst pt lw)
  2. (command "undo" "be")
  3. (setq oce1 (getvar "cmdecho")
  4. oce2 (getvar "PLINEWID")
  5. oce3 (getvar "OSMODE")
  6. oce4 (getvar "CECOLOR")
  7. oce5 (getvar "LWDEFAULT")
  8. )
  9. (setvar "cmdecho" 0)
  10. (setvar "OSMODE" 39)
  11. (setvar "PLINETYPE" 2)
  12. (defun vxs (e / i v lst)
  13.    (setq i -1)
  14.    (while (setq v (vlax-curve-getpointatparam e (setq i (1+ i))))
  15.      (setq lst (cons v lst))
  16.    )
  17.    (reverse lst)
  18. )
  19. (setq SS (entsel "\nPlease choose one pline:"))
  20. (setq en (car SS))
  21. (setq ent (entget en))
  22. (if (or
  23. (= (cdr (assoc 0 ent)) "POLYLINE")
  24. (= (cdr (assoc 0 ent)) "LWPOLYLINE")
  25.      )
  26.    (progn
  27.      (setq lst (vxs en))
  28.      (if (= (cdr (assoc 0 ent)) "POLYLINE")
  29. (progn
  30.   (if (/= (assoc 62 ent) nil)
  31.     (setvar "CECOLOR" (rtos (cdr (assoc 62 ent)) 2 0))
  32.     (setvar "CECOLOR" "BYLAYER")
  33.   )
  34.   (if (/= (assoc 370 ent) nil)
  35.     (setvar "LWDEFAULT" (cdr (assoc 370 ent)))
  36.   )
  37.   (command "3dpoly")
  38.   (foreach pt lst
  39.     (command pt)
  40.   )
  41.   (while (/= (getvar "cmdactive") 0)
  42.     (command pause)
  43.   )
  44.   (setq en1 (entlast))
  45.   (command "_matchprop" en en1 "")
  46.   (command "_erase" en "")
  47. )
  48. (progn
  49.   (setq lw (cdr (assoc 43 ent)))
  50.   (if (= lw nil)
  51.     (setq lw (cdr (assoc 40 ent)))
  52.   )
  53.   ?
  54.   (setq pt (last lst))
  55.   (command "pline" pt "w" lw lw)
  56.   (while (/= (getvar "cmdactive") 0)
  57.     (cond
  58.       ((or
  59.   (equal (grread t  '(2 67))
  60.   (equal (grread t  '(2 99))
  61.        )
  62. (command (car lst) "")
  63.       )
  64.       ((= (car (grread t ) 11)
  65. (command "")
  66.       )
  67.       (t
  68. (command pause)
  69.       )
  70.     )
  71.   )
  72.   (setq en1 (entlast))
  73.   (command "_matchprop" en en1 "")
  74.   (command "_join" en1 en "")
  75. )
  76.      )
  77.    )
  78.    (alert "Your choose is not a pline")
  79. )
  80. (setvar "cmdecho" oce1)
  81. (setvar "PLINEWID" oce2)
  82. (setvar "OSMODE" oce3)
  83. (setvar "CECOLOR" oce4)
  84. (setvar "LWDEFAULT" oce5)
  85. (command "undo" "e")
  86. (princ)
  87. )
回复

使用道具 举报

7o7

0

主题

93

帖子

93

银币

初来乍到

Rank: 1

铜币
0
发表于 2022-7-5 22:34:50 | 显示全部楼层
试试这个。
  1. (defun c:test (/ oce1 oce2 oce3 oce4 oce5 vxs ss en ent en1 lst pt lw)
  2. (command "undo" "be")
  3. (setq oce1 (getvar "cmdecho")
  4. oce2 (getvar "PLINEWID")
  5. oce3 (getvar "OSMODE")
  6. oce4 (getvar "CECOLOR")
  7. oce5 (getvar "LWDEFAULT")
  8. )
  9. (setvar "cmdecho" 0)
  10. (setvar "OSMODE" 39)
  11. (setvar "PLINETYPE" 2)
  12. (defun vxs (e / i v lst)
  13.    (setq i -1)
  14.    (while (setq v (vlax-curve-getpointatparam e (setq i (1+ i))))
  15.      (setq lst (cons v lst))
  16.    )
  17.    (reverse lst)
  18. )
  19. (setq SS (entsel "\nPlease choose one pline:"))
  20. (setq en (car SS))
  21. (setq enl (last SS))
  22. (setq ent (entget en))
  23. (if (or (= (cdr (assoc 0 ent)) "POLYLINE")
  24.   (= (cdr (assoc 0 ent)) "LWPOLYLINE")
  25.      )
  26.    (progn
  27.      (setq lst (vxs en))
  28.      (setq lst (if (< (distance enl (car lst)) (distance enl (last lst)))
  29.              (reverse lst) lst))
  30.      (if (= (cdr (assoc 0 ent)) "POLYLINE")
  31. (progn
  32.   (if (/= (assoc 62 ent) nil)
  33.      (setvar "CECOLOR" (rtos (cdr (assoc 62 ent)) 2 0))
  34.      (setvar "CECOLOR" "BYLAYER"))
  35.   (if (/= (assoc 370 ent) nil)
  36.      (setvar "LWDEFAULT" (cdr (assoc 370 ent)))
  37.    )
  38.   (command "3dpoly")
  39.   (foreach pt lst (command pt))
  40.   (while (/= (getvar "cmdactive") 0)
  41.     (command pause)
  42.   )
  43.   (setq en1 (entlast))
  44.   (command "_matchprop" en en1 "")
  45.   (command "_erase" en "")
  46. )
  47. (progn
  48.   (setq lw (cdr (assoc 43 ent)))
  49.   (if (= lw nil)
  50.     (setq lw (cdr (assoc 40 ent)))
  51.    )
  52.   (setq pt (if (< (distance enl (car lst)) (distance enl (last lst)))
  53.              (car lst) (last lst)))
  54.   (command "pline" pt "w" lw lw)
  55.   (while (/= (getvar "cmdactive") 0)
  56.     (cond  ((or (equal (grread t  '(2 67))
  57.                 (equal (grread t  '(2 99))
  58.             )
  59.             (command (car lst) ""))
  60.            ((= (car (grread t ) 11)
  61.             (command "")
  62.             )
  63.            (t (command pause))
  64.             )
  65.          )
  66.          (setq en1 (entlast))
  67.          (command "_matchprop" en en1 "")
  68.          (command "_join" en1 en "")
  69.        )
  70.      )
  71.    )
  72.    (alert "Your choose is not a pline")
  73. )
  74. (setvar "cmdecho" oce1)
  75. (setvar "PLINEWID" oce2)
  76. (setvar "OSMODE" oce3)
  77. (setvar "CECOLOR" oce4)
  78. (setvar "LWDEFAULT" oce5)
  79. (command "undo" "e")
  80. (princ)
  81. )
回复

使用道具 举报

96

主题

351

帖子

62

银币

中流砥柱

Rank: 25

铜币
692
发表于 2022-7-5 22:44:17 | 显示全部楼层
 
嗨,兄弟。
非常感谢!美好的
输入关键字“C”关闭,有问题。
回复

使用道具 举报

7o7

0

主题

93

帖子

93

银币

初来乍到

Rank: 1

铜币
0
发表于 2022-7-5 22:50:20 | 显示全部楼层
您必须更改输入法,而不是(命令“暂停”)。
回复

使用道具 举报

96

主题

351

帖子

62

银币

中流砥柱

Rank: 25

铜币
692
发表于 2022-7-5 22:53:55 | 显示全部楼层
谢谢你,兄弟
“关闭”也有问题。
  1. (defun c:test ( / en ent en1 pt lw)
  2.          (command "undo" "be")
  3.        (setq en  (entsel "\nPlease choose one pline:"))        
  4.       (setq pt (osnap (cadr en) "end"))
  5.          (setq ent (entget (car en)))
  6.        (if (= (cdr (assoc 0 ent)) "LWPOLYLINE")                    
  7.        (progn
  8.                (setq lw (cdr (assoc 43 ent)))
  9.                (if (= lw nil) (setq lw (cdr (assoc 40 ent))))
  10.                (command ".pline"  pt "w" lw lw)
  11.        (while(/=(getvar"cmdactive")0)(command pause))
  12.                (setq en1 (entlast))
  13.                (command "_matchprop"  en en1 "")
  14.                (command "_join"  en1 en "")
  15.                            )
  16.       
  17.        (alert "Your choose is not a pline")
  18. )        
  19.    (command "undo" "e")
  20.    (princ)
  21. )
回复

使用道具 举报

96

主题

351

帖子

62

银币

中流砥柱

Rank: 25

铜币
692
发表于 2022-7-5 22:57:45 | 显示全部楼层
嗨,伙计们,我需要帮助。
回复

使用道具 举报

7o7

0

主题

93

帖子

93

银币

初来乍到

Rank: 1

铜币
0
发表于 2022-7-5 23:04:27 | 显示全部楼层
您必须这样更改输入法:
  1. (defun c:test ( / en ent en1 pt lw)
  2.       (command "undo" "be")
  3.       (setq en  (entsel "\nPlease choose one pline:")
  4.      closep nil)        
  5.       (setq pt (osnap (cadr en) "end"))
  6.       (setq ent (entget (car en)))
  7.        (if (= (cdr (assoc 0 ent)) "LWPOLYLINE")                    
  8.        (progn
  9.                (setq lw (cdr (assoc 43 ent)))
  10.                (if (= lw nil) (setq lw (cdr (assoc 40 ent))))
  11.                (command ".pline"  pt "w" lw lw)
  12.        (while (and (/= (getvar"cmdactive") 0) (not closep))
  13.   (setq pnt (grread t))
  14.   (cond ((and (= 2 (car pnt)) (or (= (last pnt) 99) (= (last pnt) 67)))
  15.                      (setq closep t) (command ""))
  16.                   ((and (= 2 (car pnt)) (or (= (last pnt) 32) (= (last pnt) 13)))
  17.                     (command ""))
  18.            ((= 3 (car pnt)) (command (last pnt))))
  19. )
  20.        (setq en1 (entlast))
  21.        (command "_matchprop"  en en1 "")
  22.        (command "_join"  en1 en "")
  23. (if closep (command "pedit" (entlast) "C" ""))
  24.      )        
  25.      (alert "Your choose is not a pline")
  26. )
  27. (command "undo" "e")
  28. (princ)
  29. )
回复

使用道具 举报

96

主题

351

帖子

62

银币

中流砥柱

Rank: 25

铜币
692
发表于 2022-7-5 23:10:44 | 显示全部楼层
 
谢谢你,兄弟。太酷了!
但只输入关键字“C”,所以只画直线,怎么画圆弧?
回复

使用道具 举报

7o7

0

主题

93

帖子

93

银币

初来乍到

Rank: 1

铜币
0
发表于 2022-7-5 23:19:46 | 显示全部楼层
与“c”相同,ascii代码表示“a”。
回复

使用道具 举报

96

主题

351

帖子

62

银币

中流砥柱

Rank: 25

铜币
692
发表于 2022-7-5 23:23:57 | 显示全部楼层
 
好啊我知道。非常感谢!兄弟
回复

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

QQ|关于我们|小黑屋|乐筑天下 繁体中文

GMT+8, 2025-3-11 06:40 , Processed in 0.424566 second(s), 72 queries .

© 2020-2025 乐筑天下

联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表