乐筑天下

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

[编程交流] 带p的呼叫子功能

[复制链接]

3

主题

14

帖子

11

银币

初来乍到

Rank: 1

铜币
20
发表于 2022-7-6 07:34:11 | 显示全部楼层 |阅读模式
大家好。
 
我想知道是否有人可以告诉我如何将以下代码放入子函数,以便我可以在主函数中多次调用它。
 
其思想是将多段线/实体与一个参数一起传递,该参数定义了多段线两端的修剪长度。它应该返回修剪的多段线。
 
以下是我的代码:
 
  1. ; active object
  2. (setq myline (entlast))
  3. ; trip distance
  4. (setq trim_dist 50)
  5. ; First Break Point Sets
  6. (setq start_point (vlax-curve-getPointAtDist myobj 0))
  7. (setq trim_point (vlax-curve-getPointAtDist myobj trim_dist))
  8. ; First Break
  9. (command "._break" myline "_non" (trans start_point 0 1) "_non" (trans trim_point 0 1))
  10. (setq myline (entlast))
  11. ; Second Break Point Sets
  12. (setq edpt (vlax-curve-getendparam myline))
  13. (setq el_length (vlax-curve-getDistAtParam myline edpt)) ; length of element
  14. (setq trim_point2 (vlax-curve-getPointAtDist myline (- el_length trim_dist)))
  15. (setq end_point (vlax-curve-getPointAtDist myline el_length))
  16. ; Second Break
  17. (command "._break" myline "_non" (trans end_point 0 1) "_non" (trans trim_point2 0 1))
  18. ; Result
  19. (setq result_line (entlast))
回复

使用道具 举报

35

主题

2471

帖子

2447

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
174
发表于 2022-7-6 07:53:38 | 显示全部楼层
我相信这就是你想要的:
  1. [color=magenta](defun TrimPline( myline trim_dist[/color]
  2. [color=magenta]                / start_point trim_point edpt el_length trim_point2 end_point )[/color]
  3. ; First Break Point Sets
  4. (setq start_point (vlax-curve-getPointAtDist [color=red]myline[/color] 0))
  5. (setq trim_point (vlax-curve-getPointAtDist [color=red]myline[/color] trim_dist))
  6. ; First Break
  7. (command "._break" myline "_non" (trans start_point 0 1) "_non" (trans trim_point 0 1))
  8. ; Second Break Point Sets
  9. (setq edpt (vlax-curve-getendparam myline))
  10. (setq el_length (vlax-curve-getDistAtParam myline edpt)) ; length of element
  11. (setq trim_point2 (vlax-curve-getPointAtDist myline (- el_length trim_dist)))
  12. (setq end_point (vlax-curve-getPointAtDist myline el_length))
  13. ; Second Break
  14. (command "._break" myline "_non" (trans end_point 0 1) "_non" (trans trim_point2 0 1))
  15. ; Result
  16. [color=red] myline[/color]
  17. [color=magenta])[/color]
  18. [color=magenta](while (setq ssetPline (ssget "_:S" '((0 . "LWPOLYLINE"))))[/color]
  19. [color=magenta] (TrimPline (ssname ssetPline 0) 50.0)[/color]
  20. [color=magenta])[/color]

请注意,我对您的代码做了一些其他更正;您还需要添加一些验证,以使修剪尺寸不超过多段线的长度。
回复

使用道具 举报

3

主题

14

帖子

11

银币

初来乍到

Rank: 1

铜币
20
发表于 2022-7-6 08:00:21 | 显示全部楼层
谢谢Mircea,
我认为这是正确的方向。
 
请允许我更具体一点,在我的主脚本中,我将创建一条多段线(边界)并将其分解。我想把这个边界的分解段传递给这个子函数,以缩短它们。
 
马丁
 
 
回复

使用道具 举报

35

主题

2471

帖子

2447

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
174
发表于 2022-7-6 08:05:26 | 显示全部楼层
在这种情况下,按如下方式调用上述函数:
  1. (setq basePLine (entlast))
  2. ;explode the polyline and parse resulted selection set
  3. (command "_.EXPLODE" basePLine)
  4. (setq ssetLines (ssget "_P"))
  5. (while (> (sslength ssetLines) 0)
  6. (setq myline (ssname ssetLines 0))     ;process first item in selection set
  7. ([b]TrimPline[/b] myline 5)
  8. (setq ssetLines (ssdel myline ssetLines))   ;remove processed item
  9. )
回复

使用道具 举报

3

主题

14

帖子

11

银币

初来乍到

Rank: 1

铜币
20
发表于 2022-7-6 08:23:20 | 显示全部楼层
米尔恰,
明白-谢谢你的帮助!
现在,我可以继续用直线重新连接修剪后的线段,并将它们重新连接成多段线。(实际替换倒角以适用于所有线型…)
马丁
 
 
回复

使用道具 举报

35

主题

2471

帖子

2447

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
174
发表于 2022-7-6 08:26:38 | 显示全部楼层
不知道你为什么想要实现;您知道可以将倒角命令应用于这样的多段线吗?
  1. (setvar "CHAMFERA" 5.0)
  2. (setvar "CHAMFERB" 5.0)
  3. (command "_.CHAMFER" "_P" (entlast))

当然,一个好的编程实践是保留用户的倒角距离,并在处理后替换它们。
 
 
关于多段线上非连续线型的外观,请检查PLINE命令的Ltype gen选项。
回复

使用道具 举报

3

主题

14

帖子

11

银币

初来乍到

Rank: 1

铜币
20
发表于 2022-7-6 08:42:16 | 显示全部楼层
如果多段线包含弧段,则倒角不起作用,这就是为什么我要分解它并通过lisp例程绘制它们。
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-10 05:06 , Processed in 0.621899 second(s), 66 queries .

© 2020-2025 乐筑天下

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