明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 2282|回复: 15

[提问] (求助)请教一下各位大神,多边矩形两端延长缩短如何实现?

[复制链接]
发表于 2022-7-6 11:59:13 | 显示全部楼层 |阅读模式
18明经币
请教一下各位大神,论坛里搜索中貌似没有相似的功能(多边矩形两端延长缩短)所以想求助一下各位大神,这种的看有没有大神可以帮忙实现呢?

颜色随原图层
输入的数值带记忆功能

谢谢各位大神

附件: 您需要 登录 才可以下载或查看,没有账号?注册
发表于 2022-7-6 19:20:36 | 显示全部楼层
拉伸........
回复

使用道具 举报

 楼主| 发表于 2022-7-7 09:04:37 | 显示全部楼层

大神早上好,拉伸就是一个个拉伸,我是想能不能实现批量的两端拉伸呢
回复

使用道具 举报

发表于 2022-7-7 09:10:09 | 显示全部楼层
炸开  延长两端较长的那两根线  然后移动短的封口线 不就可以了    应该没多大难度
回复

使用道具 举报

发表于 2022-7-7 16:12:23 | 显示全部楼层
试试,子函数不一定拷贝全了,undo、记忆、错误处理都是基操,自己解决

  1. ;;;适用于autocad2011以上版本,改了系统变量,管杀不管埋
  2. (defun c:test (/ dis en1 en2 lst lst1 pt1 pt2 pt3 pt4 ss tmp)
  3.   (setvar 'peditaccept 1)
  4.   (setq  dis (getreal "\n输入尺寸:")
  5.   ss  (ssget '((0 . "lwpolyline")))
  6.   lst (xty-tr-ss2lst ss t)
  7.   )
  8.   (foreach n lst
  9.     (setq tmp (entlast))
  10.     (command "explode" n)
  11.     (setq ss   (xty-get-adden tmp 1)
  12.     lst1 (xty-tr-ss2lst ss t)
  13.     lst1 (vl-sort  lst1
  14.       '(lambda (a b)
  15.          (< (getpropertyvalue a "length")
  16.             (getpropertyvalue b "length")
  17.             )
  18.          )
  19.       )
  20.     en1  (car lst1)
  21.     pt1  (vlax-curve-getstartpoint en1)
  22.     pt2  (vlax-curve-getendpoint en1)
  23.     en2  (cadr lst1)
  24.     pt3  (vlax-curve-getstartpoint en2)
  25.     pt4  (vlax-curve-getendpoint en2)
  26.     lst1 (cddr lst1)
  27.     )
  28.     (foreach m lst1
  29.       (cond ((equal pt1 (vlax-curve-getstartpoint m) 1e-6)
  30.        (command "lengthen" "de" dis (list m pt1) "")
  31.        (setpropertyvalue
  32.          en1
  33.          "startpoint"
  34.          (vlax-curve-getstartpoint m)
  35.          )
  36.        )
  37.       ((equal pt1 (vlax-curve-getendpoint m) 1e-6)
  38.        (command "lengthen" "de" dis (list m pt1) "")
  39.        (setpropertyvalue
  40.          en1
  41.          "startpoint"
  42.          (vlax-curve-getendpoint m)
  43.          )
  44.        )
  45.       ((equal pt2 (vlax-curve-getstartpoint m) 1e-6)
  46.        (command "lengthen" "de" dis (list m pt2) "")
  47.        (setpropertyvalue
  48.          en1
  49.          "endpoint"
  50.          (vlax-curve-getstartpoint m)
  51.          )
  52.        )
  53.       ((equal pt2 (vlax-curve-getendpoint m) 1e-6)
  54.        (command "lengthen" "de" dis (list m pt2) "")
  55.        (setpropertyvalue
  56.          en1
  57.          "endpoint"
  58.          (vlax-curve-getendpoint m)
  59.          )
  60.        )
  61.       )
  62.       (cond ((equal pt3 (vlax-curve-getstartpoint m) 1e-6)
  63.        (command "lengthen" "de" dis (list m pt3) "")
  64.        (setpropertyvalue
  65.          en2
  66.          "startpoint"
  67.          (vlax-curve-getstartpoint m)
  68.          )
  69.        )
  70.       ((equal pt3 (vlax-curve-getendpoint m) 1e-6)
  71.        (command "lengthen" "de" dis (list m pt3) "")
  72.        (setpropertyvalue
  73.          en2
  74.          "startpoint"
  75.          (vlax-curve-getendpoint m)
  76.          )
  77.        )
  78.       ((equal pt4 (vlax-curve-getstartpoint m) 1e-6)
  79.        (command "lengthen" "de" dis (list m pt4) "")
  80.        (setpropertyvalue
  81.          en2
  82.          "endpoint"
  83.          (vlax-curve-getstartpoint m)
  84.          )
  85.        )
  86.       ((equal pt4 (vlax-curve-getendpoint m) 1e-6)
  87.        (command "lengthen" "de" dis (list m pt4) "")
  88.        (setpropertyvalue
  89.          en2
  90.          "endpoint"
  91.          (vlax-curve-getendpoint m)
  92.          )
  93.        )
  94.       )
  95.       )
  96.     (command"pedit" "m"ss "" "j" "0"  "")
  97.     )
  98.   )
  99. (defun xty-tr-ss2lst (ss form / n en lst)
  100.   (repeat (setq n (sslength ss))
  101.     (setq en (ssname ss (setq n (1- n))))
  102.     (setq lst (cons en lst))
  103.     )
  104.   (setq lst (reverse lst))
  105.   (if form
  106.     lst
  107.     (mapcar (function vlax-ename->vla-object) lst)
  108.     )
  109.   )
  110. (defun xty-get-adden (lasten mode / lst ss)
  111.   (while (setq lasten (entnext lasten))
  112.     (setq lst (cons lasten lst))
  113.     )
  114.   (cond  ((= 0 mode) (setq ss (reverse lst)))
  115.   ((= 1 mode)
  116.    (setq ss (ssadd))
  117.    (foreach n lst (setq ss (ssadd n ss)))
  118.    )
  119.   )
  120.   ss
  121.   )


本帖子中包含更多资源

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

x
回复

使用道具 举报

 楼主| 发表于 2022-7-7 18:23:25 | 显示全部楼层
夏生生 发表于 2022-7-7 16:12
试试,子函数不一定拷贝全了,undo、记忆、错误处理都是基操,自己解决

大神您好,感谢您的帮助,我这边用2019运行显示 未知命令,用2007运行显示 语法错误呢
回复

使用道具 举报

 楼主| 发表于 2022-7-7 18:24:30 | 显示全部楼层
guosheyang 发表于 2022-7-7 09:10
炸开  延长两端较长的那两根线  然后移动短的封口线 不就可以了    应该没多大难度

我想像中是没有难道,就是代码的组合逻辑关系,还不懂呢
回复

使用道具 举报

发表于 2022-7-7 19:26:48 来自手机 | 显示全部楼层
999999 发表于 2022-7-7 18:24
我想像中是没有难道,就是代码的组合逻辑关系,还不懂呢

函数有2011版以后新增函数,至于2019用不了我也不知是何缘由,实在不行你看思路吧。
回复

使用道具 举报

发表于 2022-7-7 19:32:48 来自手机 | 显示全部楼层
999999 发表于 2022-7-7 18:24
我想像中是没有难道,就是代码的组合逻辑关系,还不懂呢

就是炸开,排序,按您例图,最短的两个边是延伸边,找出与短边端点共点的长边,lengthen命令,再更新短边端点为长边延伸后端点,最后pedit
回复

使用道具 举报

发表于 2022-7-7 21:52:27 | 显示全部楼层
;弧形的麻烦


本帖子中包含更多资源

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

x
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-5-15 17:45 , Processed in 0.205061 second(s), 22 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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