明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 640|回复: 11

[提问] 怎么获得二维多段线的顶点坐标

[复制链接]
发表于 2024-5-3 23:01 | 显示全部楼层 |阅读模式



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

本帖子中包含更多资源

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

x
发表于 2024-5-29 22:14 | 显示全部楼层

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)
        (SETQ  plineZ38A (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)
)
发表于 2024-5-5 17:48 | 显示全部楼层
  1. (defun plxyz(e fun / pt p n);多段线节点坐标(适用于所有类型的多段线,返回结果为三维坐标点表),连续重合点只取一个,根据fuz阀值过滤接近点
  2.   (or(=(type e)'vla-object)(setq e(vlax-ename->vla-object e)))
  3.   (cond((=(setq n(vlax-get-property e'objectname))"AcDbLine")
  4.         (list(vlax-curve-getstartpoint e)(vlax-curve-getendpoint e)))
  5.        ((WCMATCH n"*Polyline")
  6.         (repeat(setq n(fix(+(vlax-curve-getendparam e)(if(=(vlax-get-property e'Closed):vlax-true)0 1))))
  7.           (or(equal(setq n(1- n)p(vlax-curve-getpointatparam e n))(car pt)fun)
  8.              (setq pt(cons p pt))))
  9.         (if(equal(car pt)(last pt)fun)
  10.           (reverse(cdr(reverse pt)))pt))))
发表于 2024-5-4 08:46 | 显示全部楼层
(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)
)

评分

参与人数 1明经币 +1 收起 理由
ssyfeng + 1 很给力!

查看全部评分

发表于 2024-5-4 07:11 | 显示全部楼层
(vlax-safearray->list(vlax-variant-value(vla-get-coordinates(vlax-ename->vla-object en))))
 楼主| 发表于 2024-5-4 21:42 | 显示全部楼层
dcl1214 发表于 2024-5-4 08:46
(defun $读取二维多段线顶点$ (e / ed pts)
  (if (AND E
           (= (TYPE E) 'ENAME)

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

你用的哪个数据库?  mysql   sqlite  sqlserver?
 楼主| 发表于 2024-5-5 00:39 | 显示全部楼层
dcl1214 发表于 2024-5-5 00:25
你用的哪个数据库?  mysql   sqlite  sqlserver?

我是想问它在cad中是怎么保存的  我用entget 和entnext 发现它的顶点有单独的图元名  也是有了新发现
发表于 2024-5-7 17:17 | 显示全部楼层

大侠真乃神人也。
发表于 2024-5-29 22:15 | 显示全部楼层
寒潮大冬瓜 发表于 2024-5-29 22:14
llsheng_73大侠好!我的想法看看能不能实现?
;DD3D利用foreach函数取得多段线顶点plpoint加上获取其标 ...

这个时候就是添加标高值多段线顶点表为Z值→但是不能实现。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-6-29 10:13 , Processed in 0.202210 second(s), 37 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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