用lisp怎样实现polyline和lwpolyline的相互转换

 我来答
朱06CAD
2017-12-08 · 知道合伙人软件行家
朱06CAD
知道合伙人软件行家
采纳数:4172 获赞数:18070
高中,熟悉AutoCAD。会autolisp及VBA程序。

向TA提问 私信TA
展开全部
  1. 多段线与二维多段线互相转换

  2. autolisp代码如下:

  3. ;二维多段线与多段线互相转换
    (defun c:tes ( / &k1 &kw1 a10 a42 a70 a8 a90 ent ss1 ss2 ss5 x)
     (vl-load-com)
     (princ "\n请选择对象")
     (if (setq &kw1 (ssget '((0 . "*POLYLINE"))))
      (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)
    )
uxogici
2019-06-18
知道答主
回答量:2
采纳率:0%
帮助的人:1588
展开全部
指令: CONVERTPoLY可以实现转换
输入聚合线转换选项 [重(H)/轻(L)] <轻>:
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
myzwsc
2019-05-04
知道答主
回答量:5
采纳率:0%
帮助的人:2.5万
展开全部
polyline和lwpolyline的相互转换过程如何保留原来的线型?转换后线型没了。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2017-08-29
展开全部
打开路径面板~下面有几个小圆圈~~就在那里~~
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友7f10a28
2017-08-29 · TA获得超过106个赞
知道小有建树答主
回答量:210
采纳率:33%
帮助的人:48.4万
展开全部
打开路径面板~下面有几个小圆圈~~就在那里~~
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 2条折叠回答
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式