999999 发表于 2024-6-16 10:57:41

(求助)如何把正方形长方形里面的内容,变成另一个多边形

本帖最后由 999999 于 2024-6-17 08:21 编辑

求助各位路过的有空的知道如何解决的大神,可以帮小弟实现以下功能

1.输入命令
2.选择矩形及多段线转角矩形(多选)
3.确定(确定后,生成多段线转角矩形的中线)


谢谢各位大神啦

xtjd 发表于 2024-6-16 10:57:42

饼仲郎 发表于 2024-6-16 18:03
生成多边形顶点列表,判断每一个点到下一个点的距离,查找到矩形宽度或者指定宽度后,以此为界,可以将顶点 ...

(defun c:test(/ ss st getpt xmk)
(defun xmk(lst)
    (entmakex(append(list '(0 . "LWPOLYLINE")'(100 . "AcDbEntity")'(100 . "AcDbPolyline")(cons 90 (length lst)))(mapcar '(lambda(pt)(cons 10 pt))lst)))
)
(defun getpt(e / di dis ptn pts pts2 pts3 pts4 ptss st)
    (setq
      pts(mapcar 'cdr(vl-remove-if-not '(lambda(x)(=(car x)10))(entget e)))
      ptn(/(length pts)2)
      pts2(reverse(cons(car pts)(reverse(cdr pts))))
      dis(mapcar '(lambda(a b)(distance a b))pts pts2)
      di(apply 'min dis)
      st(1+(vl-position di dis))
      ptss(append pts pts)
    )
    (repeat ptn(setq pts3(cons(nth st ptss)pts3))(setq st(1+ st)))
    (repeat ptn(setq pts4(cons(nth st ptss)pts4))(setq st(1+ st)))
    (mapcar '(lambda(x y)(mapcar '(lambda(a b)(/(+ a b)2.0))x y))pts3(reverse pts4))
)
(setvar "cmdecho" 0)
(if(setq ss(ssget '((0 . "*POLYLINE"))))
    (progn
      (setq st 0)
      (repeat(sslength ss)
      (xmk(getpt(ssname ss st)))
      (setq st(1+ st))
      )
    )
)
(prin1)
)

饼仲郎 发表于 2024-6-16 18:03:30

生成多边形顶点列表,判断每一个点到下一个点的距离,查找到矩形宽度或者指定宽度后,以此为界,可以将顶点列表分为两个列表a,b,将其中一个列表反转,分别再求两个列表中对应点的中点,最后画pl线,这个思路肯定能够生成你要的结果。

999999 发表于 2024-6-17 08:20:29

饼仲郎 发表于 2024-6-16 18:03
生成多边形顶点列表,判断每一个点到下一个点的距离,查找到矩形宽度或者指定宽度后,以此为界,可以将顶点 ...

大神您好,我现在缺乏实现思路的本领

kozmosovia 发表于 2024-6-17 09:19:06

先根据平行关系分组,去除墙厚阈值以内的平行线,再求各组平行线的中心线,中心线再求交点并根据交点更新中心线端点。

gzcsun 发表于 2024-6-17 09:35:05

去除墙厚阈值以内的平行线,连成两多段线,其中一条线偏移原去除平行线的一半。

饼仲郎 发表于 2024-6-17 15:26:19

999999 发表于 2024-6-17 08:20
大神您好,我现在缺乏实现思路的本领

我不是大神,我也才学了皮毛,看你好像也会搓代码,感觉这个思路还行,虽然笨点,我自己搓的话可能慢一些。

Bao_lai 发表于 2024-6-17 17:54:31

饼仲郎 发表于 2024-6-16 18:03
生成多边形顶点列表,判断每一个点到下一个点的距离,查找到矩形宽度或者指定宽度后,以此为界,可以将顶点 ...

觉得这个思路可行,而且不用太多判断。

999999 发表于 2024-6-17 19:42:17

xtjd 发表于 2024-6-17 17:29
(defun c:test(/ ss st getpt xmk)
(defun xmk(lst)
    (entmakex(append(list '(0 . "LWPOLYLINE") ...

大神您好,感谢您的出手,小弟我试用了一下,效果真的是杠杠的,谢谢大神

999999 发表于 2024-6-17 19:43:44

饼仲郎 发表于 2024-6-16 18:03
生成多边形顶点列表,判断每一个点到下一个点的距离,查找到矩形宽度或者指定宽度后,以此为界,可以将顶点 ...

哈哈,我是不知道怎么实现看您们说思路,我只能干蹬眼
页: [1] 2
查看完整版本: (求助)如何把正方形长方形里面的内容,变成另一个多边形