乐筑天下

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

[编程交流] 更改多边形的长度

[复制链接]

1

主题

10

帖子

9

银币

初来乍到

Rank: 1

铜币
5
发表于 2022-7-6 12:10:03 | 显示全部楼层 |阅读模式
我刚刚开始使用AutoLisp,已经为此奋斗了一段时间,但仍然不知道从哪里开始。
 
我被要求创建一个例程,该例程将根据线型将多边形线条缩短到设定数量的最近倍数,缩短距离选择位置最远的一端。我们需要这样做,以便可以重新调整虚线的大小,使其在开始和结束时具有完整的虚线。
 
这需要应用于5种集合线类型。
 
我将看到它的工作原理如下:
 
1) 用户选择末端的一条线保持不变
2) Autocad缩短该线,使其以一个完整的破折号开始和结束。
3) 结束
 
我可以使用lengthen命令和DE选项(以及一个计算器)来完成这项工作,但我不知道如何实现自动化。
 
如果你能给我任何帮助,我将不胜感激。
回复

使用道具 举报

54

主题

3755

帖子

3583

银币

后起之秀

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

铜币
438
发表于 2022-7-6 12:16:20 | 显示全部楼层
如果您知道计算结果,只需使用Length total并选择对象。
回复

使用道具 举报

1

主题

10

帖子

9

银币

初来乍到

Rank: 1

铜币
5
发表于 2022-7-6 12:17:40 | 显示全部楼层
我希望使用以下内容:
 
(命令“lengthen”暂停“de”
 
计算不是问题,我只是不知道如何得到原始长度,然后插入调整。
 
我们必须在绘图中经常这样做,试图用眼睛来做,或者计算调整是很痛苦和耗时的。
回复

使用道具 举报

54

主题

3755

帖子

3583

银币

后起之秀

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

铜币
438
发表于 2022-7-6 12:20:14 | 显示全部楼层
试试这个。你没有给我计算结果,所以你必须改变那部分。
 
  1. (defun c:Test (/ #Ent #Value)
  2. (vl-load-com)
  3. (and (setq #Ent (entsel "\nSelect *line: ")) [color=Red]; select object[/color]
  4.       (vl-position (cdr (assoc 0 (entget (car #Ent)))) '("LWPOLYLINE" "LINE")) [color=Red]; verify object[/color] type
  5.       (setq #Value (* 0.5 (vla-get-length (vlax-ename->vla-object (car #Ent))))) [color=Red]; convert to vla-object, extract length and make calculations[/color]
  6.       (vl-cmdf "_.lengthen" "_total" #Value #Ent) [color=Red]; execute lengthen command on selected object[/color]
  7.       (princ (strcat "\nNew Length: " (vl-princ-to-string #Value))) [color=Red]; print results to command line[/color]
  8. ) ;_ and
  9. (princ)
  10. ) ;_ defun
回复

使用道具 举报

1

主题

10

帖子

9

银币

初来乍到

Rank: 1

铜币
5
发表于 2022-7-6 12:24:19 | 显示全部楼层
Alanjt,
 
非常感谢你这么快的回复,这正是我想要的。
 
只有一个问题,公式必须根据所选的线型进行更改,那么可以检索线型以在if/true语句中使用吗?
 
LtRimmer公司
回复

使用道具 举报

54

主题

3755

帖子

3583

银币

后起之秀

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

铜币
438
发表于 2022-7-6 12:27:08 | 显示全部楼层
没问题。
见上文,我更新了评论。
 
线型是在对象级别还是在图层级别设置?
回复

使用道具 举报

1

主题

10

帖子

9

银币

初来乍到

Rank: 1

铜币
5
发表于 2022-7-6 12:31:24 | 显示全部楼层
它们被设置在一个对象上,即它们都在同一层上,线型发生了变化。
回复

使用道具 举报

54

主题

3755

帖子

3583

银币

后起之秀

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

铜币
438
发表于 2022-7-6 12:34:42 | 显示全部楼层
尝试以下操作:
 
  1. (defun c:Test (/ #Ent #Obj #Length #LType #Value)
  2. (vl-load-com)
  3. (and (setq #Ent (entsel "\nSelect *line: "))
  4.       (vl-position (cdr (assoc 0 (entget (car #Ent)))) '("LWPOLYLINE" "LINE"))
  5.       (setq #Obj    (vlax-ename->vla-object (car #Ent))
  6.             #Length (vla-get-length #Obj)
  7.             #LType  (strcase (vla-get-linetype #Obj))
  8.       ) ;_ setq
  9.       (cond
  10.         ;; hidden2
  11.         ((eq #LType "HIDDEN2") (setq #Value (* 0.5 #Length)))
  12.         ;; phantom2
  13.         ((eq #LType "PHANTOM2") (setq #Value (+ 3 #Length)))
  14.         ;; no match
  15.         (T (alert "No matching Linetypes!"))
  16.       ) ;_ cond
  17.       (vl-cmdf "_.lengthen" "_total" #Value #Ent [color=Red]""[/color])
  18.       (princ (strcat "\nNew Length: " (vl-princ-to-string #Value)))
  19. ) ;_ and
  20. (princ)
  21. ) ;_ defun
回复

使用道具 举报

1

主题

10

帖子

9

银币

初来乍到

Rank: 1

铜币
5
发表于 2022-7-6 12:38:33 | 显示全部楼层
现在看起来不错,
 
最后一个问题是,如果在不退出命令的情况下选择具有不同线型的第二条直线,则会将长度更改为前一种线型的长度。
是否可以在更改每条线的长度后再次启动该功能,或者干脆一起退出?
 
我真的很感激这一点,我已经推迟了很长时间看它,这都是因为我张开了嘴,说应该有办法;-)
回复

使用道具 举报

54

主题

3755

帖子

3583

银币

后起之秀

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

铜币
438
发表于 2022-7-6 12:40:50 | 显示全部楼层
 
 
哎呀,忘记了一个“”(代码在上面更新了)。
 
很高兴它对你有用。
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-5 07:10 , Processed in 0.364046 second(s), 72 queries .

© 2020-2025 乐筑天下

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