找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 1744|回复: 10

[每日一码] MPolygon转换成LWPOLYLINE的代码

[复制链接]

已领礼包: 40个

财富等级: 招财进宝

发表于 2017-2-6 00:26:37 | 显示全部楼层 |阅读模式

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

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

×
(defun c:mp2pL (/ L LL LST P V)
  ;; by ElpanovEvgeniy
  ;; convert MPolygon to Lwpolyline
  ;; version 0.2
  ;; 2012.07.11
  ;; mailto: [email]elpanov@gmail.com[/email]
  ;; web: elpanov.com
  (if (setq v (ssget "_x" '((0 . "MPOLYGON"))))
    (foreach e (mapcar (function cadr) (ssnamex v))
      ;;(setq e(car(entsel)))
      (setq e        (entget e)
            v        (cons
                  0
                  (mapcar (function -) (cdr (assoc 11 e)) (cdr (assoc 10 e)))
                )
            l        (vl-remove nil
                           (list '(0 . "LWPOLYLINE")
                                 '(100 . "AcDbEntity")
                                 (assoc 67 e)
                                 (assoc 410 e)
                                 (assoc 8 e)
                                 (if (assoc 63 e)
                                   (cons 62 (cdr (assoc 63 e)))
                                 )
                                 (if (assoc 421 e)
                                   (cons 420 (cdr (assoc 421 e)))
                                 )
                                 '(100 . "AcDbPolyline")
                           )
                )
            lst        e
            ll        nil
      )
      (defun f (l i)
        (if (> i 0)
          (cons (mapcar (function +) (car l) v) (f (cdr l) (1- i)))
        )
      )
      (while (setq lst (member (assoc 93 (cdr lst)) (cdr lst)))
        (setq p         (f (cdr lst) (cdar lst))
              ll (append ll
                         (list '(92 . 7) '(72 . 0) '(73 . 1) (car lst))
                         p
                         '((97 . 0))
                 )
        )
        (entmakex
          (vl-remove nil
                     (append l
                             (list (cons 90 (cdar lst)) '(70 . 1))
                             p
                             (list (assoc 210 e))
                     )
          )
        )
      )
      (entmakex        (vl-remove nil
                           (append (list '(0 . "HATCH")
                                         '(100 . "AcDbEntity")
                                         (assoc 410 l)
                                         (assoc 8 l)
                                         (assoc 62 l)
                                         (assoc 420 l)
                                         '(100 . "AcDbHatch")
                                         (assoc 10 e)
                                         (assoc 210 e)
                                         '(2 . "SOLID")
                                         (assoc 70 e)
                                         (assoc 71 e)
                                         (assoc 91 e)
                                   )
                                   ll
                                   (list '(75 . 0) '(76 . 1) '(47 . 1.)
                                         '(98 . 2) '(10 0. 0. 0.0) '(10 0. 0. 0.0)
                                         '(450 . 0) '(451 . 0) '(460 . 0.0)
                                         '(461 . 0.0) '(452 . 0) '(462 . 0.0)
                                         '(453 . 2) '(463 . 0.0) '(63 . 256)
                                         '(463 . 1.0) '(63 . 256) '(470 . "LINEAR"))
                           )
                )
      )
    )
  )
  (princ)
)

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

已领礼包: 6542个

财富等级: 富甲天下

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

使用道具 举报

已领礼包: 40个

财富等级: 招财进宝

 楼主| 发表于 2017-2-6 00:41:27 | 显示全部楼层
下面是用XDRX API写的

(defun c:XDTB_MP2PL ( / bulges e el i loop numloops pl ss verts x)
  (defun _makeloop (el / i)
    (setq verts (car el)
          bulges (last el)
    )
    (setq pl (xdrx_polyline_make verts t))
    (setq i -1)
    (mapcar
      '(lambda (x)
         (xdrx_setpropertyvalue pl "BulgeAt" (list (setq i (1+ i))
                                                   x
                                             )
         )
       )
      bulges
    )
    pl
  )
  (defun _convert (e)
    (setq numloops (xdrx_getpropertyvalue e "NumMPolygonLoops"))
    (setq i 0)
    (repeat numloops
      (setq loop (xdrx_getpropertyvalue e "MPolygonLoopAt" i)
            i (1+ i)
      )
      (_makeloop loop)
      (xdrx_entity_matchprop e (entlast))
    )
    (xdrx_entity_delete e)
  )
  (xdrx_initssget "\n选取要转化的MPolygon实体<全选>:")
  (if (or
        (setq ss (xdrx_ssget '((0 . "MPOLYGON"))))
        (setq ss (ssget "x" '((0 . "MPOLYGON"))))
      )
    (progn
      (xdrx_begin)
      (mapcar
        '(lambda (x)
           (_convert x)
         )
        (xdrx_pickset->ents ss)
      )
      (xdrx_prompt "\n成功转换了" (sslength ss)
                   "个MPolygon实体到Lwpolyline."
      )
      (xdrx_end)
    )
  )
  (princ)
)

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

使用道具 举报

已领礼包: 17个

财富等级: 恭喜发财

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

使用道具 举报

已领礼包: 6468个

财富等级: 富甲天下

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

使用道具 举报

发表于 2017-2-6 09:07:34 | 显示全部楼层
基本上没有用过三维图,MPOLYGON是什么命令生成的呀?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 40个

财富等级: 招财进宝

 楼主| 发表于 2017-2-6 09:16:30 | 显示全部楼层

MPOLYGON不是三维实体,是AUTOCAD MAP里面的对象,构建形状拓扑的。

看看下面几个帖子的介绍

http://bbs.xdcad.net/thread-707028-1-1.html

http://bbs.xdcad.net/thread-707034-1-1.html

在AUTOCAD里面没有命令能生成MPOLYGON实体。你可以用API生成MPOLYGON后,ENTGET下实体信息,试试看能用ENTMAKE创建不。


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

使用道具 举报

已领礼包: 264个

财富等级: 日进斗金

发表于 2017-2-6 09:20:37 | 显示全部楼层
本帖最后由 iLisp 于 2017-2-6 09:23 编辑

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

使用道具 举报

已领礼包: 264个

财富等级: 日进斗金

发表于 2017-2-6 09:36:30 | 显示全部楼层
Polygon 多边形,是一种面的描述,Google 地图、Gis 软件上常用, M 可能代表 Autodesk Map 中的 Map 吧
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 17个

财富等级: 恭喜发财

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-9-24 06:25 , Processed in 0.193966 second(s), 50 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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