mariarfd 发表于 2022-7-5 15:11:37

每个pol的坐标提取

您好,我最近发现了使用lisps的acad的潜力,首先我要感谢所有分享他们知识的人(特别感谢Tharwat和GC gile)!我完全不知道这里的编程是什么样子的,但我非常愿意尝试和学习(allready自己成功地在lisp中更改了一个参数!)
事实是:我有很多闭合的二维多段线(或LWpolyline,其实并不重要,因为我已经学会了如何将多边形转换为LWpoly)。我必须提取它们的面积、图层和坐标,这样可以在生成的文件中识别每个多段线的数据。
我开始研究一种自动命名多段线的方法,运气不太好,所以我决定在每个多段线的超链接字段中手动输入数字。
我还发现了一个lisp,可以一次提取多个多边形的超链接、层和区域,这是一个很好的第一步(作为一个新手,我不确定是否可以在这里发布链接)。
现在剩下的是提取每个多边形的坐标及其超链接。你认为发明一个例程并同时为多段线实现这一点可行吗?
或者,我必须列出并复制粘贴每个多段线的坐标分别。。。对于400条多段线。。。然后在另一个类似的图纸中。。。等
对不起,我的线程太大了,我希望我能正确解释-很抱歉,如果答案已经存在,我尽力找到了,但没有找到(我确实找到了一些LISP来导出坐标,每个多段线没有分隔,也没有超链接。也许有经验的人可以更改这些,以包括额外的数据,但这不是我的情况……)
首先,非常感谢在座的所有有帮助有见识的人,
玛丽亚

hanhphuc 发表于 2022-7-5 15:17:23

 
嗨,我真的不确定“命名折线”是什么意思?
 
我更喜欢独特的六角形手柄,
所以你不需要手动放置超链接?
 
检索顶点的一些示例
LW多段线
 
对于多回路重复,while,foreach,mapcar函数
在本例中,使用repeat,然后打印出每个多段线信息。
 
这是vlisp方法,它的“获取属性”方法语法更容易理解

(vl-load-com) ; initialization

(defun c:test (/ lst s i en obj)
(and (setq   s        (ssget        "X" ; selection mode : X = extended database
                '((0 . "LWPOLYLINE") ; object Name
                         (-4 . "&=") ; bit coded
                  (70 . 1) ; polyline is closed
                  (90 . 4) ; accept only 4 corners
                  (8 . "*") ; Filter Layer name , to be modified example "Layer1"
                         (410 . "model") ; model space
                  )
                )
   )
      (repeat (setq i (sslength s)); loop counter selection set
(setq en(ssname s (setq i (1- i))) ; ename by decremental selection set
       obj (vlax-ename->vla-object en) ; converts entity to vla-object
       lst (mapcar ''((x) (vlax-get obj x)) ; get properties method
                       '(Handle        ; handle unique ID       
                           Area                ; area
                                  Layer      ; layer
                           Coordinates        ; vertex array X Y X Y X Y ...
                           ))
       )
(terpri) ; prints new line
(princ lst) ; output
)
      )
(textpage) ; activate full text page
(princ) ; suppress exit quietly
) ;_ end of defun

mariarfd 发表于 2022-7-5 15:19:15

Hanhphuc非常感谢您的时间和分享您的知识!我会尽量深入研究你提供的信息,希望你能回来,并给予更多的帮助,如果我不明白一些具体的。。。!
再次感谢你的回答,
玛丽亚

hanhphuc 发表于 2022-7-5 15:22:48

不用担心,如果我不在的话,只要你总是积极且愿意学习,其他志愿者就会加入帮助
仅举几个活跃的大师李Mac,塔瓦,比加尔等。。
 
我在上一篇文章中更新了引用链接,这是其他成员提供的几个autolisp示例(用于获取顶点坐标)。
 
 
p/s:添加(vl load com)

Tharwat 发表于 2022-7-5 15:24:55

 
你好
 
我只是想知道,既然可以使用DXF代码更顺利地完成工作,为什么您通常会选择Vlisp函数?

hanhphuc 发表于 2022-7-5 15:28:41

 
您好,Tharwat谢谢您的建议,我确实提供了autoliso dxf的链接
OP愿意学习,欢迎您发布dxf代码!
 
也许我认为vlisp语法对新手来说更容易学习?
 
vla比dxf获得层
(cdr(assoc 8 (entget en)))?
 
他/她喜欢什么?
我的0.02美元
 
vlisp
(vlax-get object 'coordinates)
 
autolisp dxf


(defun getpoly (en / l enx dxf)
(defun dxf (i en) (cdr (assoc i (entget en))))
(cond        ((= (dxf 0 en) "POLYLINE") ;3D polyline
(while (/= "SEQEND" (dxf 0 (setq en (entnext en)))) (setq l (cons (dxf 10 en) l)))
)
((= (dxf 0 en) "LWPOLYLINE") ;2D polyline
(setq enx (entget en))
(while        (setq enx (member (assoc 10 enx) enx))
   (setq l   (cons (cdar enx) l)
       enx (cdr enx)
       )
   )
)
(t (setq l (list (dxf 10 en) ))) ; optional return coordinates other than polyline
)
(reverse l)
)

 
测验
(setq en (car(entsel "\nPick polyline.." )))
(getpoly en )

mariarfd 发表于 2022-7-5 15:32:32

谢谢Hanhphuc,看起来当你发布vl load com的更新时,我同时在线研究了错误“无函数定义:vlax ename->vla object”,并提出了相同的更新-工作得很好!你的代码也是如此!
太好了。。。这正是我所需要的,并将节省我大量的垃圾工作,无论是现在还是将来!!
 
我会尝试做一些小的改变,也许会回来寻求更多的帮助。。。!
 
ps:真是难以置信,能发出这么多的能量,你让我今天很开心!我希望我能报答你的恩惠,但既然我做不到,我会尽量多帮助一个完全陌生的人,就像你为我做的那样!

mariarfd 发表于 2022-7-5 15:36:13

嗯,我无意中在网上发现了一些Lisp(在excel中搜索操作大型DWG数据的选项),发现它们非常有用(就像一个新世界),并且有点喜欢它们的思维方式。。。那是一年前的事了。从那以后,我读了一些基本的规则,但还不能自己写一些新的东西(我有很多工作,加上一个2岁的孩子!)不过,我开始尝试对ready代码进行一些修改,我非常喜欢!我不认为我已经看到了dxf代码到目前为止,我会尝试和研究,现在你提到它了。我并没有宣布自己是autocad的硕士,我在大学里学到了一些非常基本的东西(r14,那是很久以前的事了),从那以后我可以说我通过工作变得足够了,但仍然有很多可能性我还没有掌握。

hanhphuc 发表于 2022-7-5 15:38:40

不客气,我和你一样喜欢塔瓦,他总是我的朋友。
 
我帮助了70%,但剩下的30%是解决如何填充坐标(由vlisp输出)的任务,因为二维和三维坐标都在单个数组列表中
你需要区分它们的正确格式,否则你会搞砸的
'(X Y X Y X Y X Y)- >'((X Y)(X Y)(X Y)(X Y)) ; 2D
'(X Y Z X Y Z X Y Z)- > '((X Y Z)(X Y Z)(X Y Z)) ;3D
 
祝你好运

mariarfd 发表于 2022-7-5 15:42:47

你甚至更愿意花时间在每一个步骤旁解释一下,它在英语中的含义。现在我有了:0,70,90,8和410的英语意思。你能告诉我在哪里可以找到所有其他数字代表的完整列表吗?还是不是这样?我试图在你的代码中更改/添加一些参数,如果有这样一个列表,那将是非常棒的。。。也许这是一个愚蠢的问题,这个问题存在于autocad的vlsp编辑器或其他地方,但我甚至在网上都找不到,也许我没有找到正确的方法。
再次感谢大家,
玛丽亚
页: [1] 2
查看完整版本: 每个pol的坐标提取