明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 346|回复: 15

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

[复制链接]
发表于 2024-6-16 10:57 | 显示全部楼层 |阅读模式
13明经币
本帖最后由 999999 于 2024-6-17 08:21 编辑

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

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


谢谢各位大神啦

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

最佳答案

查看完整内容

(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) pts ...
发表于 2024-6-16 10:57 | 显示全部楼层
饼仲郎 发表于 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 | 显示全部楼层
生成多边形顶点列表,判断每一个点到下一个点的距离,查找到矩形宽度或者指定宽度后,以此为界,可以将顶点列表分为两个列表a,b,将其中一个列表反转,分别再求两个列表中对应点的中点,最后画pl线,这个思路肯定能够生成你要的结果。

点评

这是个好主意  发表于 2024-6-17 18:13
回复

使用道具 举报

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

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

使用道具 举报

发表于 2024-6-17 09:19 | 显示全部楼层
先根据平行关系分组,去除墙厚阈值以内的平行线,再求各组平行线的中心线,中心线再求交点并根据交点更新中心线端点。
回复

使用道具 举报

发表于 2024-6-17 09:35 | 显示全部楼层
去除墙厚阈值以内的平行线,连成两多段线,其中一条线偏移原去除平行线的一半。
回复

使用道具 举报

发表于 2024-6-17 15:26 | 显示全部楼层
999999 发表于 2024-6-17 08:20
大神您好,我现在缺乏实现思路的本领

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

使用道具 举报

发表于 2024-6-17 17:54 来自手机 | 显示全部楼层
饼仲郎 发表于 2024-6-16 18:03
生成多边形顶点列表,判断每一个点到下一个点的距离,查找到矩形宽度或者指定宽度后,以此为界,可以将顶点 ...

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

使用道具 举报

 楼主| 发表于 2024-6-17 19:42 | 显示全部楼层
xtjd 发表于 2024-6-17 17:29
(defun c:test(/ ss st getpt xmk)
  (defun xmk(lst)
    (entmakex(append(list '(0 . "LWPOLYLINE") ...

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

使用道具 举报

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

哈哈,我是不知道怎么实现看您们说思路,我只能干蹬眼
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-6-26 15:40 , Processed in 0.155554 second(s), 25 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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