_chaogang 发表于 2024-5-3 23:01:10

怎么获得二维多段线的顶点坐标




请教各位我怎么不能像查多段线那样查询到二维多段线的坐标

寒潮大冬瓜 发表于 2024-5-29 22:14:17

llsheng_73 发表于 2024-5-5 17:48


llsheng_73大侠好!我的想法看看能不能实现?
;DD3D利用foreach函数取得多段线顶点plpoint加上获取其标高值并绘制三维多段线
(defun c:DD3D ()
        (setq i12 0)
        (setq pline (car (entsel)))
        (setq ent (entget pline))
        (setq pts nil)
       
        ;(print pts)(print "pts/顶点数=")(print i12)
        (SETQplineZ38A (cdr (assoc 38 (entget pline)))) ;获取所选图元的标高值=高线高程Z值
        (setq plineZ388A(rtos plineZ38A 2 16));标高值=等高线高程Z值
        (princ plineZ388A)
        (terpri);回行显示下一项屏
       
        (progn
               
                (foreach lst ent
                        (if (= (car lst) 10);筛选提取'定义数据'中第一个点对为'10'的项
                                (setq pts (append pts (list (cdr lst))));再次提取'10'的后面具体数据→并组成一个表
                        )
                        ;(setq pts#lsList pts)
                        (append pts '(plineZ388A)) ;;执行结果会得到一个新的列表,追加的数据一定是列表否则会报错。
                        (setq i12 (1+ i12))
                )
                (command "3dpoly" )
                (foreach x pts (command "non" x))
                (command "")                       
        )       
        (princ)
)

llsheng_73 发表于 2024-5-5 17:48:41

(defun plxyz(e fun / pt p n);多段线节点坐标(适用于所有类型的多段线,返回结果为三维坐标点表),连续重合点只取一个,根据fuz阀值过滤接近点
(or(=(type e)'vla-object)(setq e(vlax-ename->vla-object e)))
(cond((=(setq n(vlax-get-property e'objectname))"AcDbLine")
        (list(vlax-curve-getstartpoint e)(vlax-curve-getendpoint e)))
       ((WCMATCH n"*Polyline")
        (repeat(setq n(fix(+(vlax-curve-getendparam e)(if(=(vlax-get-property e'Closed):vlax-true)0 1))))
          (or(equal(setq n(1- n)p(vlax-curve-getpointatparam e n))(car pt)fun)
             (setq pt(cons p pt))))
        (if(equal(car pt)(last pt)fun)
          (reverse(cdr(reverse pt)))pt))))

dcl1214 发表于 2024-5-4 08:46:23

(defun $读取二维多段线顶点$ (e / ed pts)
(if (AND E
           (= (TYPE E) 'ENAME)
           (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 (cdr (assoc 10 ed)) pts))
      )
    )
)
(reverse pts)
)

guosheyang 发表于 2024-5-4 07:11:38

(vlax-safearray->list(vlax-variant-value(vla-get-coordinates(vlax-ename->vla-object en))))

_chaogang 发表于 2024-5-4 21:42:14

dcl1214 发表于 2024-5-4 08:46
(defun $读取二维多段线顶点$ (e / ed pts)
(if (AND E
           (= (TYPE E) 'ENAME)


请问二维多段线的基本属性和顶点在数据库中是单独存放的吗?

dcl1214 发表于 2024-5-5 00:25:11

_chaogang 发表于 2024-5-4 21:42
请问二维多段线的基本属性和顶点在数据库中是单独存放的吗?

你用的哪个数据库?mysql   sqlitesqlserver?

_chaogang 发表于 2024-5-5 00:39:03

dcl1214 发表于 2024-5-5 00:25
你用的哪个数据库?mysql   sqlitesqlserver?

我是想问它在cad中是怎么保存的我用entget 和entnext 发现它的顶点有单独的图元名也是有了新发现:lol:lol:lol

cchessbd 发表于 2024-5-7 17:17:02

llsheng_73 发表于 2024-5-5 17:48


大侠真乃神人也。:lol

寒潮大冬瓜 发表于 2024-5-29 22:15:30

寒潮大冬瓜 发表于 2024-5-29 22:14
llsheng_73大侠好!我的想法看看能不能实现?
;DD3D利用foreach函数取得多段线顶点plpoint加上获取其标 ...

这个时候就是添加标高值多段线顶点表为Z值→但是不能实现。
页: [1] 2
查看完整版本: 怎么获得二维多段线的顶点坐标