找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 830|回复: 11

[LISP程序]:用lisp语言怎么实现polyline线的反向

[复制链接]
发表于 2003-9-10 23:33:46 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
*-*b 请教各位高手,用lisp语言怎么实现polyline线的反向,CAD的附赠程序里有没有现成的命令?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
发表于 2003-9-11 06:57:17 | 显示全部楼层
Reference:


  1. ;; From: "Sergei M. Komarov"
  2. ;; REVPOLY.LSP
  3. ;; Reverts order of vertices of a selected (not closed) polyline.
  4. (defun C:REVPOLY (/ pl pln cass i ent vlist blist swl ewl)
  5.   (defun CASS (cod ent)
  6.     (cdr(assoc cod (entget ent)))
  7.   )
  8.   (setq pl (entsel "Select polyline:"))
  9.   (if pl
  10.     (progn
  11.       (setq pl (car pl))
  12.       (if (and (equal "POLYLINE" (cass 0 pl))
  13.                (/= 1 (cass 70 pl)))
  14.         (progn
  15.           (setq pln pl i 0)
  16.           (while (not (= "SEQEND" (cass 0 (setq pln (entnext pln)))))
  17.             (setq blist (cons (cass 42 pln) blist)
  18.                   vlist (cons (entget pln) vlist)
  19.                     swl (cons (cass 40 pln) swl)  
  20.                     ewl (cons (cass 41 pln) ewl)
  21.                      i  (1+ i)
  22.              )
  23.            )
  24.            (setq blist (append (cdr blist)(list (car blist)))
  25.                  blist (mapcar '(lambda (x) (- 0 x)) blist)
  26.                    swl (append (cdr swl)(list (last swl)))
  27.                    ewl (append (cdr ewl)(list (last swl)))
  28.                      i 0
  29.                    pln pl
  30.            )
  31.            (setq ent (cdr (entget pln))
  32.                  ent (subst (cons 40 (car ewl))(assoc 40 ent) ent)
  33.                  ent (subst (cons 41 (last swl))(assoc 41 ent) ent)
  34.            )
  35.            (entmake ent) ; polyline
  36.            (while (not (= "SEQEND" (cass 0 (setq pln (entnext pln)))))
  37.              (progn
  38.                (setq ent (nth i vlist)
  39.                      ent (subst (cons 40 (nth i ewl))(assoc 40 ent) ent)
  40.                      ent (subst (cons 41 (nth i swl))(assoc 41 ent) ent)
  41.                      ent (subst (cons 42 (nth i blist))(assoc 42 ent) ent)
  42.                        i (1+ i)
  43.                )
  44.                (entmake ent)
  45.             )
  46.           )
  47.           (entmake (cdr (entget pln))); seqend
  48.           (entdel pl)
  49.           (redraw(entlast))
  50.           (princ "\nDone!")
  51.         )
  52.         (prompt "\nNot a polyline or closed polyline")
  53.       )
  54.     )
  55.     (prompt "\nNothing selected!")
  56.   )
  57.   (princ)
  58. )
  59. (prompt "\nProgram loaded. Call by REVPOLY")
  60. (princ)
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2003-9-11 11:14:47 | 显示全部楼层
什么是PLINE的反向?你的目的是什么?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2003-9-13 22:22:15 | 显示全部楼层

感谢lsjjm

非常感谢lsjjm的源代码!
Pline线的反向是指把一条pline线的方向反过来,即把起点变成终点,终点变为起点。
请问,在CAD的附赠程序里有没有这样的程序。
请问lsjjm:用AutoLISP语言,有没有更为简单的方法实现这一功能?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2003-9-13 22:39:19 | 显示全部楼层
zhuan楼主:你的目的是不是因为使用了加字的线,反向时字是反的?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2003-9-13 22:45:29 | 显示全部楼层

致nuance

我不是使用了带字的线,而是因为使用了带方向的线型,所以想用一段程序来快速地实现线的反向。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2003-9-13 22:51:02 | 显示全部楼层
什么是带方向的线型?具体举个例子。
PLINE是单段还是多段?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2003-9-13 22:57:06 | 显示全部楼层

致nuance

比如说,在线的左边有一伸出的小短线,而右边却没有。我不明白单段多段是指什么。是一条多顶点的多义线。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2003-9-14 22:52:47 | 显示全部楼层
(if (and (equal "POLYLINE" (cass 0 pl))
:(,应该也支持一下lwpolyline
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2003-10-28 15:07:36 | 显示全部楼层
这个好象不行,在2002下pl不行
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2003-10-28 15:58:39 | 显示全部楼层
这是因为pl和lwpl的组码不太一样。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2003-10-28 21:30:04 | 显示全部楼层
只能是老的pline,能否改一下
也可Lwpline和Line?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2025-9-26 17:47 , Processed in 0.199816 second(s), 54 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表