找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 1251|回复: 3

[求助] polyline和lwpolyline的相互转换过程中如何保留原来的线型?

[复制链接]

已领礼包: 4个

财富等级: 恭喜发财

发表于 2019-5-14 17:07:55 | 显示全部楼层 |阅读模式

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

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

×
本帖最后由 施工_G54j6 于 2019-5-14 19:08 编辑

;用lisp实现polyline和lwpolyline的相互转换,可是转换后线型全变成直线了,
需要保留原有线型不变,请大神帮忙,不胜感谢!
(setq &kw (ssget '((0 . "*POLYLINE"))))
;函数如下
(defun polyline_lwpolyline (kw / &kw1 &k1 a10 a42 a70 a8 a90 ent ss1 ss2 ss5 x)
(vl-load-com)
  (if (setq &kw1 kw)      
  (progn;;1
   (setq ss1 '())
   (while (setq &k1 (ssname &kw1 0))
    (setq &kw1 (ssdel &k1 &kw1) ss1 (cons &k1 ss1))
   );while

   (if (setq ss2 (vl-remove-if-not '(lambda (x) (= (cdr (assoc 0 (entget x))) "POLYLINE")) ss1))
    (progn;;2
     (setq ss1 (vl-remove-if '(lambda (x) (member x ss2)) ss1))
     (while (setq ent (car ss2))
      (setq ss2 (cdr ss2) ss5 (s1712081 ent))
      (if (vlax-curve-isClosed ent) (setq a70 '(70 . 1)) (setq a70 '(70 . 0)))
      (setq a90 (cons 90 (length ss5))
            ss5 (apply 'append ss5)
            a8 (assoc 8 ss5)
            a10 (vl-remove-if-not '(lambda (x) (member (car x) '(10 42))) ss5)
            ss5 (append (list '(0 . "LWPOLYLINE") '(100 . "AcDbEntity") a8 '(100 . "AcDbPolyline") a90 a70 '(38 . 0)) a10)
      )
      (entmake ss5)
      (entdel ent)
     );while
    );progn;2
   );if;2
   (if (car ss1)
    (progn
     (while (setq ent (car ss1))
      (setq ss1 (cdr ss1) ss5 (entget ent))
      (setq a70 (assoc 70 ss5)
            a8 (assoc 8 ss5)
            a10 (vl-remove-if-not '(lambda (x) (= (car x) 10)) ss5)
            a42 (vl-remove-if-not '(lambda (x) (= (car x) 42)) ss5)
            ss5 (mapcar '(lambda (x) (append (list '(0 . "VERTEX") '(100 . "AcDbEntity") '(67 . 0) a8 '(100 . "AcDbVertex") '(100 . "AcDb2dVertex")) x))
            (mapcar 'cons a10 (mapcar '(lambda (x) (list x a70)) a42)))
      )
      (s1712082 ss5 a70 a8)
      (entdel ent)
     );while
    )
   );if;3
  );progn;1
);if;1
(princ)
)


;entmake生成二维多段线
(defun s1712082 (ss5 a70 a8 / a70 a8 ed ss5)
(entmake (list  '(0 . "POLYLINE") '(100 . "AcDbEntity") a8 '(100 . "AcDb2dPolyline") a70))
(while (setq ed (car ss5))
  (setq ss5 (cdr ss5))
  (entmake ed)
)
(entmake '((0 . "SEQEND")))
)


;提取二维多段线数据
(defun s1712081 (e / e ed pts)
  (if (eq (cdr (assoc 0 (entget e))) "POLYLINE")
    (progn
      (while (and (setq e (entnext e))
               (/= (cdr (assoc 0 (setq ed (entget e)))) "SEQEND")
             )
        (setq pts (cons ed pts))
      )
    )
  )
  (reverse pts)
)

论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

已领礼包: 19个

财富等级: 恭喜发财

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

使用道具 举报

已领礼包: 4个

财富等级: 恭喜发财

 楼主| 发表于 2019-5-14 22:17:29 | 显示全部楼层
Lisphk 发表于 2019-5-14 20:56
转换前保存线型
转换后,设置线型

刚入门,看了半天不知道如何在哪加,能否有劳大神帮个忙修改下!!!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 6468个

财富等级: 富甲天下

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-9-23 12:22 , Processed in 0.176254 second(s), 35 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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