找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 610|回复: 3

[求助] [求助]:怎样用entmake创建lwpolyline?

[复制链接]
发表于 2004-6-1 09:49:58 | 显示全部楼层 |阅读模式

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

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

×
必须保留的群码是哪些?
最好给一个验证通过的程序,两段的lwpolyline即可。
谢谢。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
发表于 2004-6-1 10:37:44 | 显示全部楼层
请参考
(defun c:test ()
  (vl-load-com)
  (setq elem (entlast))
  (command "_.DIVIDE" (setq selem(car (entsel)))(getint "\nAnzahl der Segmente:"))
  (setq selem (vlax-ename->vla-object selem)
pts (list (vlax-curve-getStartPoint selem))
)
  (while (setq elem(entnext elem))
    (setq pts(cons (cdr(assoc 10 (entget elem))) pts))
    (entdel elem)
    )
  (entmake(append(list
  '(0 . "LWPOLYLINE")
  '(100 . "AcDbEntity")
  '(67 . 0)
  '(410 . "Model")
  (cons 8 (vlax-get-property selem "LAYER"))
  '(100 . "AcDbPolyline")
  (cons 90 (length pts))
  '(70 . 0)
  '(43 . 0.0)
  '(38 . 0.0)
  '(39 . 0.0))
(apply 'append (mapcar  '(lambda (x)
    (list (cons 10 x) '(40 . 0.0) '(41 . 0.0) '(42 . 0.0))
    )
pts
))
(list '(210 0.0 0.0 1.0))
)
  )
  )
(princ"\nCADlon - Lisp over night!")
(princ"\nhttp://www.CADlon.de")
(princ"\nAufteilung von Kreisen/B鰃en in LWPolyliniensegmente...Start mit: kbla")
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2004-6-1 13:12:14 | 显示全部楼层
我在autodesk上找到的文章:

问题:

如何使用LISP(entmake)通过给定的线宽创建一个闭合的优化多段线?同时还希望多段线位于给定的图层中并且使用给定的颜色。


解决方法:

此代码适用于:
版本:R14.01,2000
以下是一些在多段线数据中用来定义多段线属性的组代码:

8定义层
62定义颜色
70定义多段线打开还是关闭
需要设置40和41来定义每个多段线顶点,设置起点、终点和线宽。

下面是一些可以用来创建LWPOLYLINE的LISP代码:

(defun c:entmakelwpoly(/ vlist elist lay col wdt pt)
                     ;顶点列表
                     (Setq vlist '( (50 50) (150 50) (150 150) (50 150) ))
                     (setq elist '())
                     (setq lay "0")
                     (setq col 2)
                     (setq wdt 2.0)

                     ;建立header
                     (setq elist (append elist
                                                               (list
                                                                                    (cons 0 "LWPOLYLINE")
                                                                                    (cons 100 "AcDbEntity")
                                                                                    (cons 67 0)
                                                                                    (cons 62 col)
                                                                                    (cons 410 "Model")
                                                                                    (cons 8 lay)
                                                                                    (cons 100 "AcDbPolyline")
                                                                                    (cons 90 (length vlist))
                                                                                    (cons 70 1)
                                                                                    (cons 43 wdt)
                                                                                    (cons 38 0.0)
                                                                                    (cons 39 0.0)
                                                               )
                                          )
                     );setq
                     ;建立顶点
                     (foreach pt vlist
                                          (setq elist (append elist
                                                               (list
                                                                                    (cons 10 pt)
                                                                                    (cons 40 2.0)
                                                                                    (cons 41 2.0)
                                                                                    (cons 42 0.0)
                                                               )
                                          )
                     );setq
                     );foreach

                     (setq elist (append elist (list (list 210 0.0 0.0 1.0)))) ;法线矢量
                     ;创建lwpolyline
                     (entmake elist)

                     (princ)
)



我刚才试了一下,必须的群码项:
(defun c:mpl()
   (entmake(list'(0 . "LWPOLYLINE")
                '(100 . "AcDbEntity")
                '(100 . "AcDbPolyline")
                '(90 . 3)
                '(70 . 0)
                '(10 1001.72 1290.5) '(40 . 30.0) '(41 . 30.0) '(42 . 0.0)
                '(10 1731.09 1290.5) '(40 . 30.0) '(41 . 30.0) '(42 . 0.0)
                '(10 2191.96 893.951) '(40 . 30.0) '(41 . 30.0) '(42 . 0.0)
           )
   )
)
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2004-6-1 21:25:29 | 显示全部楼层
(#m_pl d70 pl_list lay_pl color)
;;;制造 LWPOLYLINE  input: d70=0开口,1闭合; plist'((p d40 d41 d42)....);
(#m_pl2 d70 plw pla pl_list lay_pl color)
;;;制造 LWPOLYLINE  input: d70=0开口,1闭合 plw线宽 pla线统一角 pl_list点表


  1. ;;;制造 LWPOLYLINE  input: d70=0开口,1闭合; plist'((p d40 d41 d42)....);
  2. (defun #m_pl (d70 pl_list lay_pl color /)
  3.   (setq        d90 (length pl_list)
  4.         pb  '()
  5.   )
  6.   (foreach x pl_list
  7.     (progn
  8.       (setq pb(append pb
  9.         (list (cons 10 (nth 0 x))
  10.               (cons 40 (nth 1 x))
  11.               (cons 41 (nth 2 x))
  12.               (cons 42 (nth 3 x))
  13.         ) )
  14.     ) )
  15.   )
  16.   (setq        en000 (append (list
  17.         (cons 0 "LWPOLYLINE")
  18.         (cons 100 "AcDbEntity")
  19.         (cons 8 lay_pl)
  20.         (cons 100 "AcDbPolyline")
  21.         (cons 90 d90)
  22.         (cons 70 d70))
  23.         pb) )
  24.   (if (/= -1 color) (setq en000 (append en000 (list (cons 62 color)))))
  25.   (if (= nil (entmake en000)) (princ "\n制造 LWPL 制造失败.")  )
  26. )

  27. (defun #m_pl2 (d70 plw pla pl_list lay_pl color / pb)
  28.   (setq        d90 (length pl_list)
  29.         pb  '()
  30.   )
  31.   (foreach x pl_list
  32.     (progn
  33.       (setq pb
  34.              (append pb
  35.                      (list (cons 10 x)
  36.                            (cons 40 plw)
  37.                            (cons 41 plw)
  38.                            (cons 42 pla)
  39.                      )
  40.              )
  41.       )
  42.     )
  43.   )
  44.   (setq        en000 (append (list
  45.                         (cons 0 "LWPOLYLINE")
  46.                         (cons 100 "AcDbEntity")
  47.                         (cons 8 lay_pl)
  48.                         (cons 100 "AcDbPolyline")
  49.                         (cons 90 d90)
  50.                         (cons 70 d70)
  51.                       )
  52.                       pb
  53.               )
  54.   )
  55.   (if (/= -1 color) (setq en000 (append en000 (list (cons 62 color)))))
  56.   (if (= nil (entmake en000)) (princ "\n制造 LWPL 制造失败.")  )
  57. )


entmake方式制造实体,网上已讨论过多次,也有很多dx贴上了
他们的源码。你查找一下看看。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-9-27 05:30 , Processed in 0.165734 second(s), 38 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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