乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
查看: 35|回复: 19

[编程交流] 将矩形偏移为单独的

[复制链接]

39

主题

180

帖子

141

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
195
发表于 2022-7-6 08:14:40 | 显示全部楼层 |阅读模式
大家好,
 
你知道当你偏移一个矩形时,它是如何保持为多段线的吗?我需要一个lisp例程,我可以使用它来偏移矩形,将新线设置为当前层,并从线的两端减去偏移距离。我知道这要求很高,但有人见过这样的例行公事吗?
 
谢谢
布瑞恩
回复

使用道具 举报

10

主题

8258

帖子

8335

银币

初来乍到

Rank: 1

铜币
31
发表于 2022-7-6 08:18:46 | 显示全部楼层
分解然后偏移。
回复

使用道具 举报

1

主题

96

帖子

101

银币

初来乍到

Rank: 1

铜币
3
发表于 2022-7-6 08:23:16 | 显示全部楼层
 
他在寻找比那个家伙更重要的东西,哈哈。
回复

使用道具 举报

10

主题

8258

帖子

8335

银币

初来乍到

Rank: 1

铜币
31
发表于 2022-7-6 08:24:52 | 显示全部楼层
是的,创建这样的宏可能太难了。忘了我的建议吧。
回复

使用道具 举报

44

主题

3166

帖子

2803

银币

中流砥柱

Rank: 25

铜币
557
发表于 2022-7-6 08:28:30 | 显示全部楼层
我想知道,如果他们花同样的时间学习如何自己做一些这件事,而不是张贴重复的线程,OP可以完成什么。只是说说而已。
回复

使用道具 举报

10

主题

895

帖子

887

银币

初来乍到

Rank: 1

铜币
49
发表于 2022-7-6 08:32:53 | 显示全部楼层
 
如果您试图自动绘制钢梁,您可能会看到。。。。
http://www.draftsperson.net/index.php?title=Wisey的s\u Steel\u Shapes\u LISP\u程序
 
如果没有,请告诉我们您正在尝试绘制什么,可能已经存在lisp。
回复

使用道具 举报

106

主题

1万

帖子

101

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1299
发表于 2022-7-6 08:36:16 | 显示全部楼层
基本lisp选取两个点查找关于极轴命令的帮助不是很难
 
  1. (setq pt1 (getpoint))
  2. (setq pt2 (getpoint))
  3. (setq offs (getreal))
  4. (setq x1 (car pt1))
  5. (setq y1 (cadr pt1))
  6. now look up polar, distance (hint x1-x2, y1-y2)
  7. work out the 8 points.
回复

使用道具 举报

26

主题

1495

帖子

20

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
118
发表于 2022-7-6 08:37:08 | 显示全部楼层
这实际上是一个相当复杂的过程:
 
  1. [b][color=BLACK]([/color][/b]defun c:offlin [b][color=FUCHSIA]([/color][/b]/ fs fe fd el cf le en ed pl fl mp hd l10 l11[b][color=FUCHSIA])[/color][/b]
  2. [b][color=FUCHSIA]([/color][/b]defun mid_pt [b][color=NAVY]([/color][/b]s e[b][color=NAVY])[/color][/b]
  3.     [b][color=NAVY]([/color][/b]mapcar '[b][color=MAROON]([/color][/b]lambda [b][color=GREEN]([/color][/b]a b[b][color=GREEN])[/color][/b] [b][color=GREEN]([/color][/b]* [b][color=BLUE]([/color][/b]+ a b[b][color=BLUE])[/color][/b] 0.5[b][color=GREEN])[/color][/b][b][color=MAROON])[/color][/b] s e[b][color=NAVY])[/color][/b][b][color=FUCHSIA])[/color][/b]
  4. [b][color=FUCHSIA]([/color][/b]if [b][color=NAVY]([/color][/b]and [b][color=MAROON]([/color][/b]princ [color=#2f4f4f]"\nSelect PLINE To Offset"[/color][b][color=MAROON])[/color][/b]
  5.           [b][color=MAROON]([/color][/b]setq fs [b][color=GREEN]([/color][/b]ssget '[b][color=BLUE]([/color][/b][b][color=RED]([/color][/b]0 . [color=#2f4f4f]"LWPOLYLINE"[/color][b][color=RED])[/color][/b][b][color=BLUE])[/color][/b][b][color=GREEN])[/color][/b][b][color=MAROON])[/color][/b]
  6.           [b][color=MAROON]([/color][/b]= [b][color=GREEN]([/color][/b]sslength fs[b][color=GREEN])[/color][/b] 1[b][color=MAROON])[/color][/b]
  7.           [b][color=MAROON]([/color][/b]setq fe [b][color=GREEN]([/color][/b]ssname fs 0[b][color=GREEN])[/color][/b]
  8.                 fd [b][color=GREEN]([/color][/b]entget fe[b][color=GREEN])[/color][/b]
  9.                 el [b][color=GREEN]([/color][/b]cdr [b][color=BLUE]([/color][/b]assoc 38 fd[b][color=BLUE])[/color][/b][b][color=GREEN])[/color][/b]
  10.                 cf [b][color=GREEN]([/color][/b]if [b][color=BLUE]([/color][/b]= [b][color=RED]([/color][/b]logand [b][color=PURPLE]([/color][/b]cdr [b][color=TEAL]([/color][/b]assoc 70 fd[b][color=TEAL])[/color][/b][b][color=PURPLE])[/color][/b] 1[b][color=RED])[/color][/b] 1[b][color=BLUE])[/color][/b] T nil[b][color=GREEN])[/color][/b]
  11.                 le [b][color=GREEN]([/color][/b]entlast[b][color=GREEN])[/color][/b][b][color=MAROON])[/color][/b][b][color=NAVY])[/color][/b]
  12.      [b][color=NAVY]([/color][/b]progn
  13.        [b][color=MAROON]([/color][/b]while [b][color=GREEN]([/color][/b]eq le [b][color=BLUE]([/color][/b]entlast[b][color=BLUE])[/color][/b][b][color=GREEN])[/color][/b]
  14.               [b][color=GREEN]([/color][/b]command [color=#2f4f4f]"_.CMDECHO"[/color] 1
  15.                        [color=#2f4f4f]"_.OFFSET"[/color] pause fe pause[b][color=GREEN])[/color][/b]
  16.               [b][color=GREEN]([/color][/b]if [b][color=BLUE]([/color][/b]not [b][color=RED]([/color][/b]eq le [b][color=PURPLE]([/color][/b]entlast[b][color=PURPLE])[/color][/b][b][color=RED])[/color][/b][b][color=BLUE])[/color][/b]
  17.                   [b][color=BLUE]([/color][/b]command[b][color=BLUE])[/color][/b][b][color=GREEN])[/color][/b]
  18.               [b][color=GREEN]([/color][/b]command [color=#2f4f4f]"_.CMDECHO"[/color] 0[b][color=GREEN])[/color][/b][b][color=MAROON])[/color][/b]
  19.        [b][color=MAROON]([/color][/b]setq en [b][color=GREEN]([/color][/b]entlast[b][color=GREEN])[/color][/b]
  20.              ed [b][color=GREEN]([/color][/b]entget en[b][color=GREEN])[/color][/b][b][color=MAROON])[/color][/b]
  21.        [b][color=MAROON]([/color][/b]entdel en[b][color=MAROON])[/color][/b]
  22.        [b][color=MAROON]([/color][/b]foreach p ed
  23.          [b][color=GREEN]([/color][/b]if [b][color=BLUE]([/color][/b]= 10 [b][color=RED]([/color][/b]car p[b][color=RED])[/color][/b][b][color=BLUE])[/color][/b]
  24.              [b][color=BLUE]([/color][/b]setq pl [b][color=RED]([/color][/b]cons [b][color=PURPLE]([/color][/b]cdr p[b][color=PURPLE])[/color][/b] pl[b][color=RED])[/color][/b][b][color=BLUE])[/color][/b][b][color=GREEN])[/color][/b][b][color=MAROON])[/color][/b]
  25.        [b][color=MAROON]([/color][/b]foreach p fd
  26.          [b][color=GREEN]([/color][/b]if [b][color=BLUE]([/color][/b]= 10 [b][color=RED]([/color][/b]car p[b][color=RED])[/color][/b][b][color=BLUE])[/color][/b]
  27.              [b][color=BLUE]([/color][/b]setq fl [b][color=RED]([/color][/b]cons [b][color=PURPLE]([/color][/b]cdr p[b][color=PURPLE])[/color][/b] fl[b][color=RED])[/color][/b][b][color=BLUE])[/color][/b][b][color=GREEN])[/color][/b][b][color=MAROON])[/color][/b]
  28.        [b][color=MAROON]([/color][/b]and cf [b][color=GREEN]([/color][/b]setq pl [b][color=BLUE]([/color][/b]cons [b][color=RED]([/color][/b]last pl[b][color=RED])[/color][/b] pl[b][color=BLUE])[/color][/b]
  29.                      fl [b][color=BLUE]([/color][/b]cons [b][color=RED]([/color][/b]last fl[b][color=RED])[/color][/b] fl[b][color=BLUE])[/color][/b][b][color=GREEN])[/color][/b][b][color=MAROON])[/color][/b]
  30.        [b][color=MAROON]([/color][/b]if [b][color=GREEN]([/color][/b]= [b][color=BLUE]([/color][/b]length pl[b][color=BLUE])[/color][/b] [b][color=BLUE]([/color][/b]length fl[b][color=BLUE])[/color][/b][b][color=GREEN])[/color][/b]
  31.            [b][color=GREEN]([/color][/b]progn
  32.              [b][color=BLUE]([/color][/b]while [b][color=RED]([/color][/b]> [b][color=PURPLE]([/color][/b]length pl[b][color=PURPLE])[/color][/b] 1[b][color=RED])[/color][/b]
  33.                     [b][color=RED]([/color][/b]setq mp [b][color=PURPLE]([/color][/b]mid_pt [b][color=TEAL]([/color][/b]car pl[b][color=TEAL])[/color][/b] [b][color=TEAL]([/color][/b]cadr pl[b][color=TEAL])[/color][/b][b][color=PURPLE])[/color][/b]
  34.                           hd [b][color=PURPLE]([/color][/b]* [b][color=TEAL]([/color][/b]distance [b][color=OLIVE]([/color][/b]car fl[b][color=OLIVE])[/color][/b] [b][color=OLIVE]([/color][/b]cadr fl[b][color=OLIVE])[/color][/b][b][color=TEAL])[/color][/b] 0.5[b][color=PURPLE])[/color][/b]
  35.                          l10 [b][color=PURPLE]([/color][/b]polar mp [b][color=TEAL]([/color][/b]angle [b][color=OLIVE]([/color][/b]car pl[b][color=OLIVE])[/color][/b] [b][color=OLIVE]([/color][/b]cadr pl[b][color=OLIVE])[/color][/b][b][color=TEAL])[/color][/b] hd[b][color=PURPLE])[/color][/b]
  36.                          l11 [b][color=PURPLE]([/color][/b]polar mp [b][color=TEAL]([/color][/b]angle [b][color=OLIVE]([/color][/b]cadr pl[b][color=OLIVE])[/color][/b] [b][color=OLIVE]([/color][/b]car pl[b][color=OLIVE])[/color][/b][b][color=TEAL])[/color][/b] hd[b][color=PURPLE])[/color][/b][b][color=RED])[/color][/b]
  37.                     [b][color=RED]([/color][/b]entmake [b][color=PURPLE]([/color][/b]list [b][color=TEAL]([/color][/b]cons 0 [color=#2f4f4f]"LINE"[/color][b][color=TEAL])[/color][/b]
  38.                                    [b][color=TEAL]([/color][/b]cons 10 [b][color=OLIVE]([/color][/b]append l10 [b][color=GRAY]([/color][/b]list el[b][color=GRAY])[/color][/b][b][color=OLIVE])[/color][/b][b][color=TEAL])[/color][/b]
  39.                                    [b][color=TEAL]([/color][/b]cons 11 [b][color=OLIVE]([/color][/b]append l11 [b][color=GRAY]([/color][/b]list el[b][color=GRAY])[/color][/b][b][color=OLIVE])[/color][/b][b][color=TEAL])[/color][/b][b][color=PURPLE])[/color][/b][b][color=RED])[/color][/b]
  40.                     [b][color=RED]([/color][/b]setq pl [b][color=PURPLE]([/color][/b]cdr pl[b][color=PURPLE])[/color][/b]
  41.                           fl [b][color=PURPLE]([/color][/b]cdr fl[b][color=PURPLE])[/color][/b][b][color=RED])[/color][/b][b][color=BLUE])[/color][/b][b][color=GREEN])[/color][/b][b][color=MAROON])[/color][/b][b][color=NAVY])[/color][/b][b][color=FUCHSIA])[/color][/b]
  42. [b][color=FUCHSIA]([/color][/b]prin1[b][color=FUCHSIA])[/color][/b][b][color=BLACK])[/color][/b]

 
 
用偏移类型命令捕捉错误并不总是准确的。
 
这使得线段的长度与原始PLINE相同,无论偏移侧是在内侧还是外侧。
 
玩得开心-大卫
回复

使用道具 举报

0

主题

7

帖子

7

银币

初来乍到

Rank: 1

铜币
0
发表于 2022-7-6 08:41:35 | 显示全部楼层
您好-
这是我读了你的帖子后想到的。(见下图)如果我误解了你,请告诉我。
 
 
091446mq6qqi85fqf57hq8.jpg
 
这仅适用于矩形。它们可以水平或旋转。
您需要输入偏移距离并选择矩形。该例程保持打开状态,允许您选择多个矩形。我希望这能有所帮助。
 
 
  1. (defun c:offsetpline (/ CurLayer OffsetDist VlaObj sset num Ang Ptdist StartPt EndPt)
  2. (vl-load-com)
  3. (defun *error* (msg)
  4. (princ)
  5. ); _end defun
  6. (setq CurLayer (getvar "clayer"))
  7. (setq OffsetDist (getreal "\nEnter an offset distance: "))
  8. (while (setq VlaObj (vlax-ename->vla-object (car (entsel "Select a Rectangle: "))))
  9. (setq Startpt (vlax-curve-getPointAtParam VlaObj 1))
  10. (setq Ang (+ (angle (vlax-curve-getStartPoint VlaObj)(vlax-curve-getPointAtParam VlaObj 1))(* (/ pi 180) 90)))
  11. (setq PtDist (distance Startpt (vlax-curve-getPointAtParam VlaObj 2)))
  12. (if (equal (polar Startpt Ang PtDist)(vlax-curve-getPointAtParam VlaObj 2) 1.0)
  13. (vl-catch-all-apply 'vlax-invoke-method (list VlaObj 'Offset OffsetDist))
  14. (vl-catch-all-apply 'vlax-invoke-method (list VlaObj 'Offset (- OffsetDist)))
  15. ); _end if
  16. (setq VlaObj (vlax-ename->vla-object (entlast)))
  17. (vl-catch-all-apply 'vlax-put (list VlaObj 'Layer CurLayer))
  18. (vl-cmdf "explode" (entlast) "")
  19. (setq sset (ssget "_P"))
  20. (setq num -1)
  21. (repeat (sslength sset)
  22. (setq VlaObj (vlax-ename->vla-object (ssname sset (setq num (1+ num)))))
  23. (setq StartPt (polar (vlax-get VlaObj 'StartPoint)(vlax-get VlaObj 'Angle) OffsetDist))
  24. (vl-catch-all-apply 'vlax-put (list VlaObj 'StartPoint StartPt))
  25. (setq EndPt (polar (vlax-get VlaObj 'EndPoint)(- (vlax-get VlaObj 'Angle) pi) OffsetDist))
  26. (vl-catch-all-apply 'vlax-put (list VlaObj 'EndPoint EndPt))
  27. ); _end repeat
  28. ); _end while
  29. (princ)
  30. ); _end defun
回复

使用道具 举报

39

主题

180

帖子

141

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
195
发表于 2022-7-6 08:43:29 | 显示全部楼层
很好,谢谢你的帮助。
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

QQ|关于我们|小黑屋|乐筑天下 繁体中文

GMT+8, 2025-3-9 08:40 , Processed in 0.395995 second(s), 74 queries .

© 2020-2025 乐筑天下

联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表