乐筑天下

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

[编程交流] 多段线再生

[复制链接]

4

主题

9

帖子

5

银币

初来乍到

Rank: 1

铜币
20
发表于 2022-7-6 12:01:54 | 显示全部楼层 |阅读模式
你好
 
我一直遇到的问题是,试图找到一种方法来选择图形上的所有多段线,然后在所有多段线上将Ltype重新生成设置为“on”。我对autolisp有一点经验,但似乎无法实现。
 
这基本上是我的lisp现在看起来的样子,但由于某种原因,当它到达“pedit”命令时,它不能使用“ss”进行选择,而是使每个字母命令在该命令之后都未知。
 
(定义C:exd()
(setq CE-SAV(getvar“cmdecho”))
(setvar“cmdecho”0)
(setq ss(ssget“x”((0.*多段线)))
(命令“pedit”ss”““l”“on”“))
 
(setq ss nil)
 
(setvar“cmdecho”CE-SAV)
(普林斯)
) ;_ defun结束
 
 
如果可以的话,请帮助我,因为这让我非常沮丧。英雄联盟
 
非常感谢。
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 12:10:44 | 显示全部楼层
这应该有效:
 
  1. (defun C:exd (/ *error* vl ov ss) ;; Localise Variables!
  2. ;; Error Handler to Reset Sys Vars in case User hits Esc!
  3. (defun *error* (msg)
  4.    (and ov (mapcar 'setvar vl ov))
  5.    (or (wcmatch (strcase msg) "*BREAK,*CANCEL*,*EXIT*")
  6.        (princ (strcat "\n** Error: " msg " **")))
  7.    (princ))
  8. ;; Get Sysvars and store them
  9. (setq vl '("CMDECHO" "PEDITACCEPT") ov (mapcar 'getvar vl))
  10. ;; Set sys vars to what we want
  11. (mapcar 'setvar vl '(0 1))
  12. ;; Include IF statment to allow for a null SelectionSet
  13. (if (setq ss (ssget "_X" '((0 . "*POLYLINE"))))
  14.    (command "_.pedit" "_M" ss "" "_L" "ON" ""))
  15. ;; Reset Sys Vars
  16. (mapcar 'setvar vl ov)
  17. (princ))

 
请阅读评论,如果你有问题,尽管问
 
回复

使用道具 举报

4

主题

9

帖子

5

银币

初来乍到

Rank: 1

铜币
20
发表于 2022-7-6 12:16:27 | 显示全部楼层
李,你是人类中的上帝。英雄联盟
 
谢谢你,效果很好。
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 12:26:53 | 显示全部楼层
 
呵呵谢谢Ocron
 
仔细考虑后,我认为代码实际上不需要错误处理程序,因为用户输入没有暂停,但这是一个很好的实践,因为我们正在篡改Sys Vars。
 
回复

使用道具 举报

4

主题

9

帖子

5

银币

初来乍到

Rank: 1

铜币
20
发表于 2022-7-6 12:33:34 | 显示全部楼层
事实上,看到这一点并开始使用它对我来说很好。当我学习Lisp时,它是在ACAD2004年,他们甚至没有教我们这样做。大部分是Initget命令,这是一种痛苦。英雄联盟
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 12:36:57 | 显示全部楼层
 
呵呵,我总是说论坛是迄今为止最好的学习场所
回复

使用道具 举报

54

主题

3755

帖子

3583

银币

后起之秀

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

铜币
438
发表于 2022-7-6 12:45:22 | 显示全部楼层
这是同一件事吗?
 
  1. (defun c:Test (/ #SS)
  2. (and (setq #SS (ssget "_X" '((0 . "*POLYLINE"))))
  3.       (foreach x (mapcar 'cadr (ssnamex #SS))
  4.         (vl-catch-all-apply
  5.           'vla-put-linetypegeneration
  6.           (list (vlax-ename->vla-object x) :vlax-true)
  7.         ) ;_ vl-catch-all-apply
  8.       ) ;_ foreach
  9. ) ;_ and
  10. (princ)
  11. ) ;_ defun
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 12:54:52 | 显示全部楼层
 
很可能
回复

使用道具 举报

40

主题

132

帖子

107

银币

后起之秀

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

铜币
227
发表于 2022-7-6 13:01:25 | 显示全部楼层
非常干净
回复

使用道具 举报

54

主题

3755

帖子

3583

银币

后起之秀

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

铜币
438
发表于 2022-7-6 13:07:10 | 显示全部楼层
实际上,我想我可以把它缩小到这样:
 
  1. (defun c:Test (/ #SS)
  2. (and (setq #SS (ssget "_X" '((0 . "*POLYLINE"))))
  3.       (foreach x (ssnamex #SS)
  4.         (vl-catch-all-apply
  5.           'vla-put-linetypegeneration
  6.           (list (vlax-ename->vla-object (cadr x)) :vlax-true)
  7.         ) ;_ vl-catch-all-apply
  8.       ) ;_ foreach
  9. ) ;_ and
  10. (princ)
  11. ) ;_ defun
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

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

© 2020-2025 乐筑天下

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