明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 2439|回复: 8

[提问] 请教如何entmake polyline?

  [复制链接]
发表于 2021-3-18 11:53:00 | 显示全部楼层 |阅读模式
本帖最后由 etoxp 于 2021-3-18 12:01 编辑

请教如何entmake polyline?  是要polyline,不是lwpolyline。而且要能控制是否闭合。
"觉得好,就打赏"
还没有人打赏,支持一下
发表于 2021-3-18 14:24:47 | 显示全部楼层
POLYLINE 是被淘汰的多段线格式,LWPOLYLINE 不香吗?

(defun Add-Polyline (PTS)
  (entmake  '((0 . "POLYLINE") (70 . 1)));;70组码包含1闭合,不包含1或70组码不存在则不闭合
  (foreach P PTS
    (entmake (list '(0 . "VERTEX") (cons 10 P)))
  )
  (entmakex '((0 . "SEQEND")))
)


(defun C:TT (/ P LST)
  (while (setq P (getpoint "\n指定点:"))
    (setq LST (cons P LST))
  )
  (if (> (length LST) 2)
    (Add-Polyline LST)
  )
)
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2021-3-18 16:00:15 | 显示全部楼层
caoyin 发表于 2021-3-18 14:24
POLYLINE 是被淘汰的多段线格式,LWPOLYLINE 不香吗?

(defun Add-Polyline (PTS)

谢谢!
再请教一下,lwpolyline是不是只是平面的,z坐标不起作用。我也因此才想用polyline。
发表于 2021-3-18 19:40:32 | 显示全部楼层


  1. (defun entity:make-pline (plist convexity elevation closed)
  2.   "生成二维多段线.POLYLINE
  3. 参数:
  4.   plist:端点坐标点表,如:((x1 y1 z1) (x2 y2 z2) (x2 y2 z2))或((x1 y1) (x2 y2) (x2 y2))
  5.   convexity:各点与下一点的凸度(个数同坐标点表),可为nil
  6.   elevation:标高
  7.   closed:是否闭合,1:闭合,0:不闭合"
  8.   "返回值:  生成多段线的图元名"
  9.   "示例:  (entity:make-pline '((0 0 0) (5000 0 0) (5000 5000 0) (0 5000 0)) '(-1.0 -0.5 0 -0.3) 100 1)"
  10.   (if (= closed 1)
  11.       (entmake
  12.        (list '(0 . "POLYLINE") '(66 . 1) '(70 . 1) (cons 38 elevation)))
  13.       (entmake (list '(0 . "POLYLINE") '(66 . 1) (cons 38 elevation))))
  14.   (if convexity
  15.       (mapcar
  16.        '(lambda (x y)
  17.          (entmake (list        (cons 0 "VERTEX")
  18.                    (cons 10 x)
  19.                    (cons 42 y)
  20.                    )))
  21.        plist
  22.        convexity
  23.        )
  24.       (mapcar
  25.        '(lambda (x)
  26.          (entmake (list        (cons 0 "VERTEX")
  27.                    (cons 10 x)
  28.                    )))
  29.        plist
  30.        ))
  31.   (entmake '((0 . "SEQEND")))
  32.   (entlast)
  33.   )
 楼主| 发表于 2021-3-18 22:41:36 | 显示全部楼层

此程序好像将所有顶点的标高都设成了相同值,而不是每个顶点的标高都能不同。
发表于 2021-3-18 22:48:59 | 显示全部楼层
etoxp 发表于 2021-3-18 22:41
此程序好像将所有顶点的标高都设成了相同值,而不是每个顶点的标高都能不同。

也是啊,想办法改改
发表于 2021-3-18 23:15:26 | 显示全部楼层
三维多段线才有有效z值,
 楼主| 发表于 2021-3-18 23:47:45 | 显示全部楼层
本帖最后由 etoxp 于 2021-3-18 23:54 编辑

感谢各位,虽然还没有通过entmake生成满意的polyline,但已找到了其它办法实现了。

;;XP-MakePolyline 根据点表生成polyline
;ntLst = (list (list 1 2 3) (list 10 20 30) (list 100 200 300))
;;example:
;;(XP-MakePolyline PntLst "closed")
(defun XP-MakePolyline (PntLst     closed?    /     ACADOBJ
      DOC     MODELSPACE PNTLST2   POINTS
      POLYOBJ
           )
  (setq PntLst2 '())
  (if PntLst
    (progn
      (foreach e PntLst
  (setq PntLst2 (append PntLst2 e))
      )
      (setq acadObj (vlax-get-acad-object))
      (setq doc (vla-get-ActiveDocument acadObj))
      ;; Create the array of points  
      (setq points (vlax-make-safearray
         vlax-vbDouble
         (cons 0 (- (length PntLst2) 1))
       )
      )
      (vlax-safearray-fill
  points
  PntLst2
      )
      ;; Create a 3D polyline in model space  
      (setq modelSpace (vla-get-ModelSpace doc))
      (setq polyObj (vla-Add3DPoly modelSpace points))
      (if (= closed? "closed")
  (vla-put-Closed (e2o (entlast)) :vlax-true)
      )
    )
  )
  (entlast)
);;e2o eName转objectName
(defun e2o (ename)
        (vlax-ename->vla-object ename)
)
;;o2e objectName转eName
(defun o2e (vlaobj)
        (vlax-vla-object->ename vlaobj)
)

发表于 2021-3-19 00:38:59 | 显示全部楼层

  1. (defun entity:make-pline (plist closed / ent)
  2.   "生成三维多段线.POLYLINE
  3. 参数:
  4.   plist:端点坐标点表,如:((x1 y1 z1) (x2 y2 z2) (x2 y2 z2))或((x1 y1) (x2 y2) (x2 y2))
  5.   closed:是否闭合,1:闭合,0:不闭合"
  6.   "返回值:  生成多段线的图元名"
  7.   "示例:  (entity:make-pline '((0 0 0) (5000 0 0) (5000 5000 0) (0 5000 0)) 1)"
  8.   (if (= closed 1)
  9.       (entmake (list '(0 . "POLYLINE")   '(66 . 1) '(10 0.0 0.0 0.0) '(70 . 9) ))
  10.       (entmake (list '(0 . "POLYLINE") '(66 . 1) '(70 . 8) )))
  11.   (if plist      
  12.       (mapcar
  13.        '(lambda (x)
  14.          (entmake (list (cons 0 "VERTEX")
  15.                    (cons 10 x)
  16.                     (cons 70 32)
  17.                    )))
  18.        plist
  19.        ))
  20.   (entmake '((0 . "SEQEND")))
  21.   (entlast)
  22.   )
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2025-10-2 05:05 , Processed in 0.161680 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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