乐筑天下

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

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

[复制链接]

54

主题

3755

帖子

3583

银币

后起之秀

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

铜币
438
发表于 2022-7-6 12:43:33 | 显示全部楼层
事实上,这一次会让生活更轻松。
 
  1. (defun c:Test (/ #Ent #Obj #Length #LType #Value)
  2. (vl-load-com)
  3. (while (setq #Ent (entsel "\nSelect *line: "))
  4.    (and (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 "")
  18.         (princ (strcat "\nNew Length: " (vl-princ-to-string #Value)))
  19.    ) ;_ and
  20. ) ;_ while
  21. (princ)
  22. ) ;_ defun
回复

使用道具 举报

1

主题

10

帖子

9

银币

初来乍到

Rank: 1

铜币
5
发表于 2022-7-6 12:45:07 | 显示全部楼层
再次非常感谢,这正是我想要的!
 
我打算自己做一些工作(老实说)。;-)
回复

使用道具 举报

54

主题

3755

帖子

3583

银币

后起之秀

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

铜币
438
发表于 2022-7-6 12:49:08 | 显示全部楼层
 
不客气。
 
没什么大不了的,这是一个简单的程序,我基本上要写解释。你仍然需要填写所有的条件,所以你也有工作要做眨眼:
回复

使用道具 举报

1

主题

10

帖子

9

银币

初来乍到

Rank: 1

铜币
5
发表于 2022-7-6 12:51:16 | 显示全部楼层
Alanjt,
 
我在得到一点帮助后,我正在尝试让一个变体工作,你上面提出的。(顺便说一句,效果很好)
 
我试图得到它,这样我就可以画一条多边形线,然后在命令结束时自动调整大小。我添加了pline来画线,然后ssget来选择添加到数据库中的最后一项,但我无法让它做很多事情。我添加了以下代码:
 
帮助
 
 
 
 
  1. (defun c:test ()
  2. (vl-load-com)
  3. (vl-cmdf "_.pline")
  4. (setq #Ent (ssget "_l"))
  5. (vl-position (cdr (assoc 0 (entget (car #Ent)))) '("LWPOLYLINE" "LINE"))
  6. (setq #Obj    (vlax-ename->vla-object (car #Ent))
  7.        #Length (vla-get-length #Obj)
  8.        #LType  (strcase (vla-get-linetype #Obj))
  9. ) ;_ setq
  10. (cond
  11. ;; 4-2
  12.    ((eq #LType "4-2") (setq #Value (+ (* (fix (/ (- #Length 4) 6)) 6) 4)))
  13. ;; 1-5
  14.    ((eq #LType "1-5") (setq #Value (+ (* (fix (/ (- #Length 1) 6)) 6) 1)))
  15. ;; no match
  16.    (T (alert "No matching Linetypes!"))
  17. ) ;_ cond
  18. (vl-cmdf "_.lengthen" "_total" #Value #Ent "")
  19. (princ (strcat "\nNew Length: " (vl-princ-to-string #Value)))
  20. )
回复

使用道具 举报

54

主题

3755

帖子

3583

银币

后起之秀

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

铜币
438
发表于 2022-7-6 12:56:27 | 显示全部楼层
又快又脏,但试试这个:
  1. (defun c:test (/ #Entlast #Ent #Obj #Length #LType #Value)
  2. (vl-load-com)
  3. (or (setq #Entlast (entlast)) (setq #Entlast T))
  4. (vl-cmdf "_.pline")
  5. (while (not (zerop (getvar 'cmdactive)))
  6.    (princ "\nSpecify next point: ")
  7.    (vl-cmdf PAUSE)
  8. ) ;_ while
  9. (cond
  10.    ((not (eq #Entlast (setq #Ent (entlast))))
  11.     (setq #Obj    (vlax-ename->vla-object #Ent)
  12.           #Length (vla-get-length #Obj)
  13.           #LType  (strcase (vla-get-linetype #Obj))
  14.     ) ;_ setq
  15.     (cond
  16.       ;; 4-2
  17.       ((eq #LType "4-2") (setq #Value (+ (* (fix (/ (- #Length 4) 6)) 6) 4)))
  18.       ;; 1-5
  19.       ((eq #LType "1-5") (setq #Value (+ (* (fix (/ (- #Length 1) 6)) 6) 1)))
  20.       ;; no match
  21.       (T (alert "No matching Linetypes!"))
  22.     ) ;_ cond
  23.     (and #Value
  24.          (vl-cmdf "_.lengthen" "_total" #Value (list #Ent (getvar 'lastpoint)) "")
  25.          (princ (strcat "\nNew Length: " (vl-princ-to-string #Value)))
  26.     ) ;_ and
  27.    )
  28. ) ;_ cond
  29. (princ)
  30. ) ;_ defun

 
我让它根据最后拾取的点选择线的终点。
 
我要回家了,但我肯定晚些时候会回来。
回复

使用道具 举报

1

主题

10

帖子

9

银币

初来乍到

Rank: 1

铜币
5
发表于 2022-7-6 12:59:54 | 显示全部楼层
在我上床睡觉之前试过,我觉得很好。
 
我甚至还没有接近,我花了几个小时阅读帮助文件,寻找我可以使用的命令。。。。
 
再次感谢。
回复

使用道具 举报

54

主题

3755

帖子

3583

银币

后起之秀

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

铜币
438
发表于 2022-7-6 13:02:26 | 显示全部楼层
不,你比你想象的要近。
第一次知道如何实时操作命令函数有点棘手。
 
若你们要有一个函数来画普林斯,还有一个函数来设置普林斯的长度,我会定义。考虑一个用于过滤部分的子程序,这将使生活变得更加轻松,并减少所需的代码量。此外,如果你更新匹配部分,你只需要做一次。
回复

使用道具 举报

1

主题

10

帖子

9

银币

初来乍到

Rank: 1

铜币
5
发表于 2022-7-6 13:05:15 | 显示全部楼层
我将明确地将其分解为子例程,并且随着我们使用的线型数量的增加,长度公式也会增加。
回复

使用道具 举报

1

主题

10

帖子

9

银币

初来乍到

Rank: 1

铜币
5
发表于 2022-7-6 13:10:00 | 显示全部楼层
你好,
 
希望还有一个问题…;-)
 
我正在尝试确保在绘制线之后,在该线上启用“类型生成”。我在例程的末尾添加了以下内容,但它不起作用,因为它似乎没有选择行。
 
任何帮助都将不胜感激。
 
  1. (vl-cmdf "_.pedit" #Ent "L" "on")
回复

使用道具 举报

54

主题

3755

帖子

3583

银币

后起之秀

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

铜币
438
发表于 2022-7-6 13:10:54 | 显示全部楼层
 
尝试额外的“”。
  1. (vl-cmdf "_.pedit" #Ent "_L" "on" "")
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-5 07:01 , Processed in 0.525575 second(s), 70 queries .

© 2020-2025 乐筑天下

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