(求助)如何把正方形长方形里面的内容,变成另一个多边形
本帖最后由 999999 于 2024-6-17 08:21 编辑求助各位路过的有空的知道如何解决的大神,可以帮小弟实现以下功能
1.输入命令
2.选择矩形及多段线转角矩形(多选)
3.确定(确定后,生成多段线转角矩形的中线)
谢谢各位大神啦
饼仲郎 发表于 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)
) 生成多边形顶点列表,判断每一个点到下一个点的距离,查找到矩形宽度或者指定宽度后,以此为界,可以将顶点列表分为两个列表a,b,将其中一个列表反转,分别再求两个列表中对应点的中点,最后画pl线,这个思路肯定能够生成你要的结果。 饼仲郎 发表于 2024-6-16 18:03
生成多边形顶点列表,判断每一个点到下一个点的距离,查找到矩形宽度或者指定宽度后,以此为界,可以将顶点 ...
大神您好,我现在缺乏实现思路的本领 先根据平行关系分组,去除墙厚阈值以内的平行线,再求各组平行线的中心线,中心线再求交点并根据交点更新中心线端点。 去除墙厚阈值以内的平行线,连成两多段线,其中一条线偏移原去除平行线的一半。
999999 发表于 2024-6-17 08:20
大神您好,我现在缺乏实现思路的本领
我不是大神,我也才学了皮毛,看你好像也会搓代码,感觉这个思路还行,虽然笨点,我自己搓的话可能慢一些。 饼仲郎 发表于 2024-6-16 18:03
生成多边形顶点列表,判断每一个点到下一个点的距离,查找到矩形宽度或者指定宽度后,以此为界,可以将顶点 ...
觉得这个思路可行,而且不用太多判断。 xtjd 发表于 2024-6-17 17:29
(defun c:test(/ ss st getpt xmk)
(defun xmk(lst)
(entmakex(append(list '(0 . "LWPOLYLINE") ...
大神您好,感谢您的出手,小弟我试用了一下,效果真的是杠杠的,谢谢大神 饼仲郎 发表于 2024-6-16 18:03
生成多边形顶点列表,判断每一个点到下一个点的距离,查找到矩形宽度或者指定宽度后,以此为界,可以将顶点 ...
哈哈,我是不知道怎么实现看您们说思路,我只能干蹬眼
页:
[1]
2