乐筑天下

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

[编程交流] 缩短pline/lin的两端

[复制链接]

46

主题

161

帖子

104

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
242
发表于 2022-7-5 16:52:47 | 显示全部楼层 |阅读模式
我写了一些lisp来缩短pline/line的两端。
此例程基于“_.lengthen”命令,但有一个问题,使用此命令我无法缩短末端不在屏幕上的线/线。
 
如何不用(命令)实现我的目标,有什么建议吗?
回复

使用道具 举报

66

主题

1552

帖子

1514

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
325
发表于 2022-7-5 17:01:17 | 显示全部楼层
你好
你是说像这样,但反过来?
你看过vlax曲线-****函数了吗?
编辑:顺便问一下,你想在两端缩短还是只在拾取的一端缩短?
编辑2:
无论如何,考虑一下:
  1. [color=#8b4513]; Trim Curve[/color]
  2. [b][color=BLACK]([/color][/b]defun C:test [b][color=FUCHSIA]([/color][/b] / n pick e p spt ept [b][color=FUCHSIA])[/color][/b]
  3. [b][color=FUCHSIA]([/color][/b]if [b][color=NAVY]([/color][/b]and [b][color=MAROON]([/color][/b]not [b][color=GREEN]([/color][/b]initget [b][color=BLUE]([/color][/b]+ 2 4[b][color=BLUE])[/color][/b][b][color=GREEN])[/color][/b][b][color=MAROON])[/color][/b] [b][color=MAROON]([/color][/b]setq n [b][color=GREEN]([/color][/b]getreal [color=#2f4f4f]"\nSpecify trim value <exit>: "[/color][b][color=GREEN])[/color][/b][b][color=MAROON])[/color][/b] [b][color=NAVY])[/color][/b]
  4.         [b][color=NAVY]([/color][/b]progn
  5.                 [b][color=MAROON]([/color][/b]setvar 'errno 0[b][color=MAROON])[/color][/b]
  6.                 [b][color=MAROON]([/color][/b]while [b][color=GREEN]([/color][/b]/= 52 [b][color=BLUE]([/color][/b]getvar 'errno[b][color=BLUE])[/color][/b][b][color=GREEN])[/color][/b]
  7.                         [b][color=GREEN]([/color][/b]setq pick [b][color=BLUE]([/color][/b]entsel [color=#2f4f4f]"\nSpecify side on curve to shorten <exit>: "[/color][b][color=BLUE])[/color][/b][b][color=GREEN])[/color][/b]
  8.                         [b][color=GREEN]([/color][/b]cond
  9.                                 [b][color=BLUE]([/color][/b] [b][color=RED]([/color][/b]= 7 [b][color=PURPLE]([/color][/b]getvar 'errno[b][color=PURPLE])[/color][/b][b][color=RED])[/color][/b] [b][color=RED]([/color][/b]princ [color=#2f4f4f]"\nMissed, try again."[/color][b][color=RED])[/color][/b] [b][color=RED]([/color][/b]setvar 'errno 0[b][color=RED])[/color][/b] [b][color=BLUE])[/color][/b]
  10.                                 [b][color=BLUE]([/color][/b] [b][color=RED]([/color][/b]and [b][color=PURPLE]([/color][/b]= 'ENAME [b][color=TEAL]([/color][/b]type [b][color=OLIVE]([/color][/b]car pick[b][color=OLIVE])[/color][/b][b][color=TEAL])[/color][/b][b][color=PURPLE])[/color][/b] [b][color=PURPLE]([/color][/b]vl-catch-all-error-p [b][color=TEAL]([/color][/b]vl-catch-all-apply 'vlax-curve-getEndParam [b][color=OLIVE]([/color][/b]list [b][color=GRAY]([/color][/b]car pick[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]
  11.                                         [b][color=RED]([/color][/b]princ [color=#2f4f4f]"\nYou must select a curve object."[/color][b][color=RED])[/color][/b]
  12.                                 [b][color=BLUE])[/color][/b]
  13.                                 [b][color=BLUE]([/color][/b] [b][color=RED]([/color][/b]and pick [b][color=PURPLE]([/color][/b]< [b][color=TEAL]([/color][/b]vlax-curve-getDistAtParam [b][color=OLIVE]([/color][/b]car pick[b][color=OLIVE])[/color][/b] [b][color=OLIVE]([/color][/b]vlax-curve-getEndParam [b][color=GRAY]([/color][/b]car pick[b][color=GRAY])[/color][/b][b][color=OLIVE])[/color][/b][b][color=TEAL])[/color][/b] n[b][color=PURPLE])[/color][/b] [b][color=RED])[/color][/b]
  14.                                         [b][color=RED]([/color][/b]princ [color=#2f4f4f]"\nThis curve is shorter than the specified trim value."[/color][b][color=RED])[/color][/b]
  15.                                 [b][color=BLUE])[/color][/b]
  16.                                 [b][color=BLUE]([/color][/b] [b][color=RED]([/color][/b]and pick [b][color=PURPLE]([/color][/b]setq e [b][color=TEAL]([/color][/b]car pick[b][color=TEAL])[/color][/b][b][color=PURPLE])[/color][/b] [b][color=PURPLE]([/color][/b]setq p [b][color=TEAL]([/color][/b]cadr pick[b][color=TEAL])[/color][/b][b][color=PURPLE])[/color][/b] [b][color=RED])[/color][/b]
  17.                                         [b][color=RED]([/color][/b]cond
  18.                                                 [b][color=PURPLE]([/color][/b] [b][color=TEAL]([/color][/b]vlax-curve-isClosed e[b][color=TEAL])[/color][/b]
  19.                                                         [b][color=TEAL]([/color][/b]princ [color=#2f4f4f]"\nThis curve is closed, cannot be trimmed."[/color][b][color=TEAL])[/color][/b]
  20.                                                 [b][color=PURPLE])[/color][/b]
  21.                                                 [b][color=PURPLE]([/color][/b]T
  22.                                                         [b][color=TEAL]([/color][/b]if [color=#8b4513]; trim the picked side, to modify it to trim both sides: just remove/comment this [b][color=OLIVE]([/color][/b]if[b][color=OLIVE])[/color][/b] function, and the [color=#2f4f4f]"T"[/color] symbol from the [b][color=OLIVE]([/color][/b]cond[b][color=OLIVE])[/color][/b][/color]
  23.                                                                 [b][color=OLIVE]([/color][/b]>=
  24.                                                                         [b][color=GRAY]([/color][/b]distance p [b][color=AQUA]([/color][/b]setq spt [b][color=LIME]([/color][/b]vlax-curve-getPointAtParam e [b][color=SILVER]([/color][/b]vlax-curve-getStartParam e[b][color=SILVER])[/color][/b][b][color=LIME])[/color][/b][b][color=AQUA])[/color][/b][b][color=GRAY])[/color][/b]
  25.                                                                         [b][color=GRAY]([/color][/b]distance p [b][color=AQUA]([/color][/b]setq ept [b][color=LIME]([/color][/b]vlax-curve-getPointAtParam e [b][color=SILVER]([/color][/b]vlax-curve-getEndParam e[b][color=SILVER])[/color][/b][b][color=LIME])[/color][/b][b][color=AQUA])[/color][/b][b][color=GRAY])[/color][/b]
  26.                                                                 [b][color=OLIVE])[/color][/b]
  27.                                                                 [b][color=OLIVE]([/color][/b]command [color=#2f4f4f]"_.BREAK"[/color] [b][color=GRAY]([/color][/b]nentselp ept[b][color=GRAY])[/color][/b] [color=#2f4f4f]"_non"[/color] [b][color=GRAY]([/color][/b]vlax-curve-getPointAtDist e [b][color=AQUA]([/color][/b]- [b][color=LIME]([/color][/b]vlax-curve-getDistAtPoint e ept[b][color=LIME])[/color][/b] n[b][color=AQUA])[/color][/b][b][color=GRAY])[/color][/b] [b][color=OLIVE])[/color][/b]
  28.                                                                 [b][color=OLIVE]([/color][/b]command [color=#2f4f4f]"_.BREAK"[/color] [b][color=GRAY]([/color][/b]nentselp spt[b][color=GRAY])[/color][/b] [color=#2f4f4f]"_non"[/color] [b][color=GRAY]([/color][/b]vlax-curve-getPointAtDist e [b][color=AQUA]([/color][/b]+ [b][color=LIME]([/color][/b]vlax-curve-getDistAtPoint e spt[b][color=LIME])[/color][/b] n[b][color=AQUA])[/color][/b][b][color=GRAY])[/color][/b] [b][color=OLIVE])[/color][/b]
  29.                                                         [b][color=TEAL])[/color][/b][color=#8b4513]; if[/color]
  30.                                                 [b][color=PURPLE])[/color][/b]
  31.                                         [b][color=RED])[/color][/b][color=#8b4513]; cond[/color]
  32.                                 [b][color=BLUE])[/color][/b]
  33.                                 [b][color=BLUE]([/color][/b]T nil[b][color=BLUE])[/color][/b]
  34.                         [b][color=GREEN])[/color][/b][color=#8b4513]; cond[/color]
  35.                 [b][color=MAROON])[/color][/b][color=#8b4513]; while[/color]
  36.         [b][color=NAVY])[/color][/b][color=#8b4513]; progn[/color]
  37. [b][color=FUCHSIA])[/color][/b][color=#8b4513]; if[/color]
  38. [b][color=FUCHSIA]([/color][/b]princ[b][color=FUCHSIA])[/color][/b]
  39. [b][color=BLACK])[/color][/b][color=#8b4513];| defun |; [b][color=BLACK]([/color][/b]vl-load-com[b][color=BLACK])[/color][/b] [b][color=BLACK]([/color][/b]princ[b][color=BLACK])[/color][/b][/color]

编辑3:
我猜你在寻找这样的东西:
 
  1. [color=#8b4513]; Trim Curves - Both ends[/color]
  2. [b][color=BLACK]([/color][/b]defun C:test [b][color=FUCHSIA]([/color][/b] / n Lst2 r [b][color=FUCHSIA])[/color][/b]
  3. [b][color=FUCHSIA]([/color][/b]and [b][color=NAVY]([/color][/b]not [b][color=MAROON]([/color][/b]initget [b][color=GREEN]([/color][/b]+ 2 4[b][color=GREEN])[/color][/b][b][color=MAROON])[/color][/b][b][color=NAVY])[/color][/b]  [b][color=NAVY]([/color][/b]setq n [b][color=MAROON]([/color][/b]getreal [color=#2f4f4f]"\nSpecify trim value <exit>: "[/color][b][color=MAROON])[/color][/b][b][color=NAVY])[/color][/b] [b][color=FUCHSIA])[/color][/b]
  4. [b][color=FUCHSIA]([/color][/b]while
  5.         [b][color=NAVY]([/color][/b]and
  6.                 n
  7.                 [b][color=MAROON]([/color][/b]princ [color=#2f4f4f]"\nSelect curves to trim: "[/color][b][color=MAROON])[/color][/b]
  8.                 [b][color=MAROON]([/color][/b]vl-some 'ssget [b][color=GREEN]([/color][/b]list [color=#2f4f4f]"_I"[/color] [color=#2f4f4f]"_:L"[/color][b][color=GREEN])[/color][/b][b][color=MAROON])[/color][/b]
  9.         [b][color=NAVY])[/color][/b]
  10.         [b][color=NAVY]([/color][/b]progn
  11.                 [b][color=MAROON]([/color][/b]
  12.                         [b][color=GREEN]([/color][/b]lambda [b][color=BLUE]([/color][/b] SS / Lst [b][color=BLUE])[/color][/b]
  13.                                 [b][color=BLUE]([/color][/b]if SS
  14.                                         [b][color=RED]([/color][/b]progn
  15.                                                 [b][color=PURPLE]([/color][/b]vlax-map-collection SS [b][color=TEAL]([/color][/b]function [b][color=OLIVE]([/color][/b]lambda [b][color=GRAY]([/color][/b]o[b][color=GRAY])[/color][/b] [b][color=GRAY]([/color][/b]setq Lst [b][color=AQUA]([/color][/b]cons [b][color=LIME]([/color][/b]vlax-vla-object->ename o[b][color=LIME])[/color][/b] Lst[b][color=AQUA])[/color][/b][b][color=GRAY])[/color][/b][b][color=OLIVE])[/color][/b][b][color=TEAL])[/color][/b][b][color=PURPLE])[/color][/b]
  16.                                                 [b][color=PURPLE]([/color][/b]mapcar
  17.                                                         [b][color=TEAL]([/color][/b]function
  18.                                                                 [b][color=OLIVE]([/color][/b]lambda [b][color=GRAY]([/color][/b]e / spt ept[b][color=GRAY])[/color][/b]
  19.                                                                         [b][color=GRAY]([/color][/b]if
  20.                                                                                 [b][color=AQUA]([/color][/b]and
  21.                                                                                         [b][color=LIME]([/color][/b]not
  22.                                                                                                 [b][color=SILVER]([/color][/b]or
  23.                                                                                                         [b][color=YELLOW]([/color][/b]vl-catch-all-error-p [b][color=WHITE]([/color][/b]vl-catch-all-apply 'vlax-curve-getEndParam [b][color=BLACK]([/color][/b]list e[b][color=BLACK])[/color][/b][b][color=WHITE])[/color][/b][b][color=YELLOW])[/color][/b]
  24.                                                                                                         [b][color=YELLOW]([/color][/b]vlax-curve-isClosed e[b][color=YELLOW])[/color][/b]
  25.                                                                                                         [b][color=YELLOW]([/color][/b]< [b][color=WHITE]([/color][/b]vlax-curve-getDistAtParam e [b][color=BLACK]([/color][/b]vlax-curve-getEndParam e[b][color=BLACK])[/color][/b][b][color=WHITE])[/color][/b] n[b][color=YELLOW])[/color][/b]
  26.                                                                                                 [b][color=SILVER])[/color][/b]
  27.                                                                                         [b][color=LIME])[/color][/b]
  28.                                                                                         [b][color=LIME]([/color][/b]setq spt [b][color=SILVER]([/color][/b]vlax-curve-getPointAtParam e [b][color=YELLOW]([/color][/b]vlax-curve-getStartParam e[b][color=YELLOW])[/color][/b][b][color=SILVER])[/color][/b][b][color=LIME])[/color][/b]
  29.                                                                                         [b][color=LIME]([/color][/b]setq ept [b][color=SILVER]([/color][/b]vlax-curve-getPointAtParam e [b][color=YELLOW]([/color][/b]vlax-curve-getEndParam e[b][color=YELLOW])[/color][/b][b][color=SILVER])[/color][/b][b][color=LIME])[/color][/b]
  30.                                                                                 [b][color=AQUA])[/color][/b]
  31.                                                                                 [b][color=AQUA]([/color][/b]setq Lst2 [b][color=LIME]([/color][/b]cons [b][color=SILVER]([/color][/b]list e spt ept[b][color=SILVER])[/color][/b] Lst2[b][color=LIME])[/color][/b][b][color=AQUA])[/color][/b]
  32.                                                                         [b][color=GRAY])[/color][/b]
  33.                                                                 [b][color=OLIVE])[/color][/b]
  34.                                                         [b][color=TEAL])[/color][/b]
  35.                                                         Lst
  36.                                                 [b][color=PURPLE])[/color][/b]
  37.                                         [b][color=RED])[/color][/b]
  38.                                 [b][color=BLUE])[/color][/b]
  39.                                 [b][color=BLUE]([/color][/b]vla-Delete SS[b][color=BLUE])[/color][/b]
  40.                         [b][color=GREEN])[/color][/b]
  41.                         [b][color=GREEN]([/color][/b]vla-get-ActiveSelectionSet [b][color=BLUE]([/color][/b]vla-get-ActiveDocument [b][color=RED]([/color][/b]vlax-get-acad-object[b][color=RED])[/color][/b][b][color=BLUE])[/color][/b][b][color=GREEN])[/color][/b]
  42.                 [b][color=MAROON])[/color][/b]
  43.                 [b][color=MAROON]([/color][/b]vla-EndUndoMark [b][color=GREEN]([/color][/b]vla-get-ActiveDocument [b][color=BLUE]([/color][/b]vlax-get-acad-object[b][color=BLUE])[/color][/b][b][color=GREEN])[/color][/b][b][color=MAROON])[/color][/b]
  44.                 [b][color=MAROON]([/color][/b]vla-StartUndoMark [b][color=GREEN]([/color][/b]vla-get-ActiveDocument [b][color=BLUE]([/color][/b]vlax-get-acad-object[b][color=BLUE])[/color][/b][b][color=GREEN])[/color][/b][b][color=MAROON])[/color][/b]
  45.                 [b][color=MAROON]([/color][/b]vla-ZoomExtents [b][color=GREEN]([/color][/b]vlax-get-acad-object[b][color=GREEN])[/color][/b][b][color=MAROON])[/color][/b]
  46.                 [b][color=MAROON]([/color][/b]foreach x Lst2
  47.                         [b][color=GREEN]([/color][/b]and
  48.                                 [b][color=BLUE]([/color][/b]not [b][color=RED]([/color][/b]vl-catch-all-error-p [b][color=PURPLE]([/color][/b]setq r [b][color=TEAL]([/color][/b]vl-catch-all-apply 'vlax-curve-getDistAtPoint [b][color=OLIVE]([/color][/b]list [b][color=GRAY]([/color][/b]car x[b][color=GRAY])[/color][/b] [b][color=GRAY]([/color][/b]caddr x[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][b][color=BLUE])[/color][/b] r
  49.                                 [b][color=BLUE]([/color][/b]command [color=#2f4f4f]"_.BREAK"[/color] [b][color=RED]([/color][/b]nentselp [b][color=PURPLE]([/color][/b]caddr x[b][color=PURPLE])[/color][/b][b][color=RED])[/color][/b] [color=#2f4f4f]"_non"[/color] [b][color=RED]([/color][/b]vlax-curve-getPointAtDist [b][color=PURPLE]([/color][/b]car x[b][color=PURPLE])[/color][/b] [b][color=PURPLE]([/color][/b]- r n[b][color=PURPLE])[/color][/b][b][color=RED])[/color][/b] [b][color=BLUE])[/color][/b]
  50.                         [b][color=GREEN])[/color][/b]
  51.                         [b][color=GREEN]([/color][/b]and
  52.                                 [b][color=BLUE]([/color][/b]not [b][color=RED]([/color][/b]vl-catch-all-error-p [b][color=PURPLE]([/color][/b]setq r [b][color=TEAL]([/color][/b]vl-catch-all-apply 'vlax-curve-getDistAtPoint [b][color=OLIVE]([/color][/b]list [b][color=GRAY]([/color][/b]car x[b][color=GRAY])[/color][/b] [b][color=GRAY]([/color][/b]cadr x[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][b][color=BLUE])[/color][/b] r
  53.                                 [b][color=BLUE]([/color][/b]command [color=#2f4f4f]"_.BREAK"[/color] [b][color=RED]([/color][/b]nentselp [b][color=PURPLE]([/color][/b]cadr x[b][color=PURPLE])[/color][/b][b][color=RED])[/color][/b] [color=#2f4f4f]"_non"[/color] [b][color=RED]([/color][/b]vlax-curve-getPointAtDist [b][color=PURPLE]([/color][/b]car x[b][color=PURPLE])[/color][/b] [b][color=PURPLE]([/color][/b]+ r n[b][color=PURPLE])[/color][/b][b][color=RED])[/color][/b] [b][color=BLUE])[/color][/b]
  54.                         [b][color=GREEN])[/color][/b]
  55.                 [b][color=MAROON])[/color][/b]
  56.                 [b][color=MAROON]([/color][/b]vla-ZoomPrevious [b][color=GREEN]([/color][/b]vlax-get-acad-object[b][color=GREEN])[/color][/b][b][color=MAROON])[/color][/b]
  57.                 [b][color=MAROON]([/color][/b]vla-EndUndoMark [b][color=GREEN]([/color][/b]vla-get-ActiveDocument [b][color=BLUE]([/color][/b]vlax-get-acad-object[b][color=BLUE])[/color][/b][b][color=GREEN])[/color][/b][b][color=MAROON])[/color][/b]
  58.         [b][color=NAVY])[/color][/b]
  59. [b][color=FUCHSIA])[/color][/b]
  60. [b][color=FUCHSIA]([/color][/b]princ[b][color=FUCHSIA])[/color][/b]
  61. [b][color=BLACK])[/color][/b][color=#8b4513];| defun |; [b][color=BLACK]([/color][/b]vl-load-com[b][color=BLACK])[/color][/b] [b][color=BLACK]([/color][/b]princ[b][color=BLACK])[/color][/b][/color]

有些曲线有问题,IDK为什么。。虽然“屏幕问题”不是一个问题,因为缩放方法。
回复

使用道具 举报

5

主题

1334

帖子

1410

银币

限制会员

铜币
-20
发表于 2022-7-5 17:08:46 | 显示全部楼层
还有更多信息ab Lee的双扩展。。。
看这里-仅限沼泽会员。。。
https://www.theswamp.org/index.php?topic=49394.0
 
M、 R。
回复

使用道具 举报

66

主题

1552

帖子

1514

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
325
发表于 2022-7-5 17:18:34 | 显示全部楼层
 
哦,很好,一个收缩选项!
顺便说一句,我忘了包括长度检查,如果修剪值大于实际的曲线长度。
在我看来,如果扩展是提示一个接一个地选择曲线上的一条边(就像我在这里上传的第一个gif的反面),那么它会更有用。
回复

使用道具 举报

5

主题

1334

帖子

1410

银币

限制会员

铜币
-20
发表于 2022-7-5 17:26:47 | 显示全部楼层
 
  1. ; Trim Curve
  2. (defun C:trimcurve ( / n pick e p spt ept )
  3. (vl-load-com)
  4. (or *n* (setq *n* 1.0))
  5. (initget (+ 2 4))
  6. (setq n (getdist (strcat "\nPick or specify trim value <" (rtos *n* 2 20) "> : ")))
  7. (if (null n)
  8.    (setq n *n*)
  9.    (setq *n* n)
  10. )
  11. (setvar 'errno 0)
  12. (while (/= 52 (getvar 'errno))
  13.    (setq pick (entsel "\nSpecify side on curve to shorten <exit> : "))
  14.    (cond
  15.      ( (= 7 (getvar 'errno)) (princ "\nMissed, try again.") (setvar 'errno 0) )
  16.      ( (and (= 'ENAME (type (car pick))) (vl-catch-all-error-p (vl-catch-all-apply 'vlax-curve-getEndParam (list (car pick)))) )
  17.        (princ "\nYou must select a curve object.")
  18.      )
  19.      ( (and pick (< (vlax-curve-getDistAtParam (car pick) (vlax-curve-getEndParam (car pick))) n) )
  20.        (princ "\nThis curve is shorter than the specified trim value.")
  21.      )
  22.      ( (and pick (setq e (car pick)) (setq p (vlax-curve-getclosestpointto e (trans (cadr pick) 1 0))) )
  23.        (cond
  24.          ( (vlax-curve-isClosed e)
  25.            (princ "\nThis curve is closed, cannot be trimmed.")
  26.          )
  27.          (T
  28.            (if
  29.              (>=
  30.                (distance p (setq spt (vlax-curve-getStartPoint e)))
  31.                (distance p (setq ept (vlax-curve-getEndPoint e)))
  32.              )
  33.              (command "_.BREAK" (nentselp (trans ept 0 1)) "_non" (trans (vlax-curve-getPointAtDist e (- (vlax-curve-getDistAtPoint e ept) n)) 0 1) )
  34.              (command "_.BREAK" (nentselp (trans spt 0 1)) "_non" (trans (vlax-curve-getPointAtDist e (+ (vlax-curve-getDistAtPoint e spt) n)) 0 1) )
  35.            ); if
  36.          )
  37.        ); cond
  38.      )
  39.    ); cond
  40. ); while
  41. (princ)
  42. )
  1. ; Extend Curve
  2. (defun C:extendcurve ( / n pick e p spt ept )
  3. (vl-load-com)
  4. (or *n* (setq *n* 1.0))
  5. (initget (+ 2 4))
  6. (setq n (getdist (strcat "\nPick or specify extend value <" (rtos *n* 2 20) "> : ")))
  7. (if (null n)
  8.    (setq n *n*)
  9.    (setq *n* n)
  10. )
  11. (setvar 'errno 0)
  12. (while (/= 52 (getvar 'errno))
  13.    (setq pick (entsel "\nSpecify side on curve to lengthen <exit> : "))
  14.    (cond
  15.      ( (= 7 (getvar 'errno)) (princ "\nMissed, try again.") (setvar 'errno 0) )
  16.      ( (and (= 'ENAME (type (car pick))) (vl-catch-all-error-p (vl-catch-all-apply 'vlax-curve-getEndParam (list (car pick)))) )
  17.        (princ "\nYou must select a curve object.")
  18.      )
  19.      ( (and pick (setq e (car pick)) (setq p (vlax-curve-getclosestpointto e (trans (cadr pick) 1 0))) )
  20.        (cond
  21.          ( (vlax-curve-isClosed e)
  22.            (princ "\nThis curve is closed, cannot be extended.")
  23.          )
  24.          (T
  25.            (if
  26.              (>=
  27.                (distance p (setq spt (vlax-curve-getStartPoint e)))
  28.                (distance p (setq ept (vlax-curve-getEndPoint e)))
  29.              )
  30.              (progn
  31.                (command "_.LENGTHEN" "_DE" n "_non" (trans ept 0 1) "")
  32.                (setvar 'errno 0)
  33.              )
  34.              (progn
  35.                (command "_.LENGTHEN" "_DE" n "_non" (trans spt 0 1) "")
  36.                (setvar 'errno 0)
  37.              )
  38.            ); if
  39.          )
  40.        ); cond
  41.      )
  42.    ); cond
  43. ); while
  44. (princ)
  45. )
HTH。,M、 R。
回复

使用道具 举报

66

主题

1552

帖子

1514

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
325
发表于 2022-7-5 17:32:10 | 显示全部楼层
 
含糖的
在我看来,这是一个可以添加到PLINETOOLS中的便捷工具。
回复

使用道具 举报

5

主题

1334

帖子

1410

银币

限制会员

铜币
-20
发表于 2022-7-5 17:42:29 | 显示全部楼层
修改第二个代码。。。虽然以不寻常的方式使用(vl-some)在“ssget”中具有创造性,但我认为这是不必要的和过度编程的情况。。。正如你们所见,我已经更改了前一篇文章中的两个代码,现在所有4个代码都兼容,可以顺序使用之前的输入-用户应该寻找的唯一一件事是在任务完成后将全局*n*变量置零。。。
 
  1. ; Trim Curves - Both ends
  2. (defun C:trimcurves ( / n Lst2 r )
  3. (vl-load-com)
  4. (or *n* (setq *n* 1.0))
  5. (initget (+ 2 4))
  6. (setq n (getdist (strcat "\nPick or specify trim value <" (rtos *n* 2 20) "> : ")))
  7. (if (null n)
  8.    (setq n *n*)
  9.    (setq *n* n)
  10. )
  11. (while
  12.    (and
  13.      (princ "\nSelect curves to trim <exit> : ")
  14.      (ssget "_:L-I" '((0 . "*POLYLINE,SPLINE,LINE,HELIX,ARC,ELLIPSE")))
  15.    )
  16.    (progn
  17.      (
  18.        (lambda ( SS / Lst )
  19.          (if SS
  20.            (progn
  21.              (vlax-map-collection SS (function (lambda ( o ) (setq Lst (cons (vlax-vla-object->ename o) Lst)))))
  22.              (mapcar
  23.                (function
  24.                  (lambda ( e / spt ept )
  25.                    (if
  26.                      (and
  27.                        (not
  28.                          (or
  29.                            (vl-catch-all-error-p (vl-catch-all-apply 'vlax-curve-getEndParam (list e)))
  30.                            (vlax-curve-isClosed e)
  31.                            (< (vlax-curve-getDistAtParam e (vlax-curve-getEndParam e)) n)
  32.                          )
  33.                        )
  34.                        (setq spt (vlax-curve-getStartPoint e))
  35.                        (setq ept (vlax-curve-getEndPoint e))
  36.                      )
  37.                      (setq Lst2 (cons (list e spt ept) Lst2))
  38.                    )
  39.                  )
  40.                )
  41.                Lst
  42.              )
  43.            )
  44.          )
  45.          (vla-Delete SS)
  46.        )
  47.        (vla-get-ActiveSelectionSet (vla-get-ActiveDocument (vlax-get-acad-object)))
  48.      )
  49.      (vla-StartUndoMark (vla-get-ActiveDocument (vlax-get-acad-object)))
  50.      (vla-ZoomExtents (vlax-get-acad-object))
  51.      (foreach x Lst2
  52.        (and
  53.          (not (vl-catch-all-error-p (setq r (vl-catch-all-apply 'vlax-curve-getDistAtPoint (list (car x) (caddr x))))))
  54.          r
  55.          (command "_.BREAK" (nentselp (caddr x)) "_non" (trans (vlax-curve-getPointAtDist (car x) (- r n)) 0 1) )
  56.        )
  57.        (and
  58.          (not (vl-catch-all-error-p (setq r (vl-catch-all-apply 'vlax-curve-getDistAtPoint (list (car x) (cadr x))))))
  59.          r
  60.          (command "_.BREAK" (nentselp (cadr x)) "_non" (trans (vlax-curve-getPointAtDist (car x) (+ r n)) 0 1) )
  61.        )
  62.      )
  63.      (vla-ZoomPrevious (vlax-get-acad-object))
  64.      (vla-EndUndoMark (vla-get-ActiveDocument (vlax-get-acad-object)))
  65.    )
  66. )
  67. (princ)
  68. )

尊敬的M.R。
P、 我不知道你想说什么关于PLINETOOLS-他们在我看来正确地填补了所有Lisp程序,它应该有。。。此处发布的Lisp是独立的,可能适用于也可能不适用于多段线实体,因此PLINETOOLS是独立的。。。
回复

使用道具 举报

66

主题

1552

帖子

1514

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
325
发表于 2022-7-5 17:48:26 | 显示全部楼层
干得好,马尔科!
我的第二个代码显然是一个关于评估的游戏。(如果我在追求实际性能:标准SS迭代,没有(lambda)和SS vla对象,我会写其他内容)。
关于全局变量的建议:尝试使用与例程相关的东西命名,例如*TrimExtend:variable*
(因为通用全局变量名有可能与另一个相交,用于其他loaded.lsp)。这是从LM那里学到的(至少是他全球化变量的方式)。
 
 
哦,好的,那只是一个建议。(给我留下的印象是,当任务与vlax曲线-***函数/几何例程相关时,你就是大师)。
保加利亚欢呼!
P、 总的来说,我只是想帮助ziele_o2k,而不会以任何方式破坏李的声誉。
回复

使用道具 举报

1

主题

597

帖子

599

银币

初来乍到

Rank: 1

铜币
2
发表于 2022-7-5 17:58:26 | 显示全部楼层
“一个人不能只缩短一行的末尾,他必须缩短整行。”我认为这是尤达主义。
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-13 11:04 , Processed in 0.849589 second(s), 81 queries .

© 2020-2025 乐筑天下

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