samifox 发表于 2022-7-6 06:26:27

隔离顶点

你好
 
我想编写代码,根据多段线上的两个相反(矩形)顶点执行操作。如果你看到附加图像,我想分离顶点1和10,这两个顶点有什么共同的定义?
 
谢谢
谢伊

pBe 发表于 2022-7-6 06:50:30

1和10位于多段线顶点上,而100和101位于多段线线段上
 
出于好奇,也因为你的要求。
 

(defun c:showme (/ pl pts@vertex pts plpts i ip)
   (setq pl (car (entsel "\nSelect Polyline:")))
   (princ "\nSelect point entities")
   (setq pts@vertex (ssadd)
         pts      (ssget '((0 . "POINT"))))
   (setq plpts (mapcar 'cdr
                         (vl-remove-if-not
                               '(lambda (o)
                                    (= (Car o) 10))
                               (entget pl))))
   (repeat (setq i (sslength pts))
         (setq ip (cdr (assoc 10
                              (entget (setq e    (ssname pts
                                                         (Setq i (1- i)))))))
               ip (list (car ip) (cadr ip)))
         (if (vl-some
                     '(lambda (p)
                            (if (and (equal (Car p)
                                          (car ip))
                                     (equal (Cadr p)
                                          (cadr ip)))
                                  p))
                     plpts)
               (ssadd e pts@vertex)))
   (sssetfirst nil pts@vertex)
   (princ)
   )

samifox 发表于 2022-7-6 06:57:38

你好
 
我想我误导了你。我的意思是,我想选择一个多边形,并自动定义这些隐藏顶点。这一切都是为了创造re。有没有办法不选择点就确定这些顶点?
 
 
很抱歉
 
 
谢伊

LibertyOne 发表于 2022-7-6 07:16:43

对于钢筋图形,创建图形需要执行许多步骤。在这里,就像在你的另一篇文章中一样,你从一个墙部分开始。我个人会从混凝土形状的所有几何形状开始。对于墙,需要每个墙段的标高。通过立面可以显示钢筋的位置和间距。一个部分仅显示表单。

samifox 发表于 2022-7-6 07:28:27

我非常高兴地宣布,这次代码完全是我写的,多亏了这里所有伟大的程序员。
 
代码查找我所说的“平方根对”,它意味着在结构中查找列,作为进一步放置结构元素的基础。
 
代码扫描所有选定多段线的顶点并将其附加到一个长列表中,然后将每个顶点与其余顶点进行比较,以找到一对(换句话说,隔离它们)。这一对能够建造一个正方形
 
可配对顶点是:
1、坐标不一致
2、距离远但不超过58个单位(对角线距离40cm×40cm)
3.形成非正交度的点
 
我设法根据这些条件找到配对,但还有很长的路要走。
我知道我写了很长一段时间,很多问题都没有解决。
我很乐意了解如何使其更短、更高效和更安全。
 
(献给您pBe)
 
 
(defun C:DEMO(/pl pts sspl tpts i ptlist)(setvar“pdmode 34)(setvar”cmdecho 0)(if(setq sspl(ssget’((0。“LWPOLYLINE”)))(progn(setq i 0)(while(<i(sslength sspl))(setq pts(mapcar‘cdr(vl remove if not’(lambda(e)(=(Car e)10))(entget(ssname sspl i))))(setq i(1+i))(setq tpts(cons pts tpts)))(setq tpts(apply'append tpts))(setq ln(findPairs tpts 58 3));;;(命令行)(第n 0 ln)(第n 1 ln))(princ))(defun findPairs(lst dis ang/ma fe pair)(setq fe 0 ma 0)(while(<ma(length lst))(while(<fe(length lst))(if(not(equal(nth ma lst)(nth fe lst))(if(<(fix(distance(nth ma lst)(nth fe lst)))dis)(if(or(and(>(angle(anth ma lst)(nth fe lst))0.2)(<(angle(nth ma lst)(nth fe lst))。1.4))(和(>(角度)(第N ma lst)(第N fe lst))1.7)(<(角度(第N ma lst)(第N fe lst))3.0)(和(>(角度(第N ma lst)(第N fe lst))3.3)(<(角度(第N ma lst)(第N fe lst))4.5)(和(>(角度(第N ma lst)(第N fe lst))4.9)(<(角度(第N ma lst)(第N fe lst))6.1))(progn(setq对(列表(第N ma lst)(第N fe lst)).)(命令“\u点”“\u非”(第n ma lst)(第n fe lst)))(princ“\n忽略不计”)(princ“\n忽略不计”)(princ“\n忽略不计”)(setq fe(1+fe))_而(
页: [1]
查看完整版本: 隔离顶点