乐筑天下

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

[编程交流] 全靠我自己。。。有点。属性

[复制链接]

10

主题

46

帖子

36

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
50
发表于 2022-7-5 17:14:09 | 显示全部楼层 |阅读模式
  1. (defun c:awz ( / sUndo enx atent atent_list)
  2. (setq sUndo (vlax-invoke (vla-get-ActiveDocument (vlax-get-acad-object)) 'StartUndoMark))
  3. (setvar 'errno 0)
  4. (while (/= 52 (getvar 'errno))
  5.         (setvar 'errno 0)
  6.         (setq atent (car (nentsel "\nSelect multiline attribute to change Defined Width to 0: ")))
  7.         (cond
  8.                 (   (= 7 (getvar 'errno))
  9.                         (prompt "\nNothing Selected.")
  10.                 )
  11.                 (   (null atent)
  12.                         (prompt "\nExit.")
  13.                 )
  14.                 (   (/= "ATTRIB" (cdr (assoc 0 (setq enx (entget atent)))))
  15.                         (prompt "\nSelected object is not an Attribute.")
  16.                 )
  17.                 (   (= 4 (logand 4 (cdr (assoc 70 (tblsearch "layer" (cdr (assoc 8 enx)))))))
  18.                         (prompt "\nSelected Attribute is on a locked layer.")
  19.                 )
  20.         (if atent (setq atent_list (entget atent))
  21.         (setq atent_list (subst (cons 41 0) (assoc 42 atent_list) atent_list ))
  22.         (entmod atent_list)
  23. ))
  24. (if sUndo (vlax-invoke (vla-get-ActiveDocument (vlax-get-acad-object)) 'EndUndoMark))
  25. )(princ)
  26. )(vl-load-com)(princ)

 
通过研究Lee Mac和Grrr等专业人士过去的代码,我能够自己创建这个lisp。
 
在工作中,我们有一个程序,可以插入具有多行属性的块,其中包含信息集,每个值都是它自己的文本行。
不幸的是,有时,我的意思是,大多数时候,如果信息中有空格,它会“换行”并创建新行。
双击属性,然后“…”是非常烦人的然后更改有时超过100个属性的宽度。
 
出于挫折,这一代码诞生了。
 
我欢迎大家尽可能多地批评这段代码,我喜欢学习别人是如何写的。我补充的不需要,我需要的不需要,还有更简单的方法。什么都不要隐瞒!
 
如果我没有赞扬那些启发我的代码的创作者,我道歉。你们应该得到所有的赞扬。
回复

使用道具 举报

18

主题

1529

帖子

973

银币

中流砥柱

Rank: 25

铜币
649
发表于 2022-7-5 17:21:06 | 显示全部楼层
确实存在一些问题。。。
我能给你的最好建议是:在缩进代码时要更加小心。这将帮助您更好地理解程序结构。有了适当的缩进,您可能会注意到cond语句中奇怪的if语句。
注意,在整个程序中,sUndo为零,因此永远不会调用EndUndoMark。
  1. (defun c:awz ( / doc enx atent)
  2. (vla-startundomark (setq doc (vla-get-activedocument (vlax-get-acad-object))))
  3. (setvar 'errno 0)
  4. (while (/= 52 (getvar 'errno))
  5.    (setvar 'errno 0)
  6.    (setq atent (car (nentsel "\nSelect multiline attribute to change Defined Width to 0: ")))
  7.    (cond
  8.      ( (= 7 (getvar 'errno))
  9.        (prompt "\nNothing Selected.")
  10.      )
  11.      ( (null atent)
  12.        (prompt "\nExit.")
  13.      )
  14.      ( (/= "ATTRIB" (cdr (assoc 0 (setq enx (entget atent)))))
  15.        (prompt "\nSelected object is not an Attribute.")
  16.      )
  17.      ( (= 4 (logand 4 (cdr (assoc 70 (tblsearch "layer" (cdr (assoc 8 enx)))))))
  18.        (prompt "\nSelected Attribute is on a locked layer.")
  19.      )
  20.      ( T
  21.        (entmod (append enx '((41 . 0.0))))
  22.      )
  23.    )
  24. )
  25. (vla-endundomark doc)
  26. (princ)
  27. )
  28. (vl-load-com)
  29. (princ)
回复

使用道具 举报

18

主题

1529

帖子

973

银币

中流砥柱

Rank: 25

铜币
649
发表于 2022-7-5 17:31:19 | 显示全部楼层
... 您是否尝试重新定义块?这显然会更有效率。
回复

使用道具 举报

10

主题

46

帖子

36

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
50
发表于 2022-7-5 17:34:41 | 显示全部楼层
 
它看起来比我的版本更干净。也更容易理解。
回复

使用道具 举报

10

主题

46

帖子

36

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
50
发表于 2022-7-5 17:41:06 | 显示全部楼层
 
与在blockeditor中将属性设置为宽度0?然后运行BATTMAN进行同步?这应该行得通,但每一项新工作都必须这样做。这是一个公司计划,我不会搞砸它。
回复

使用道具 举报

18

主题

1529

帖子

973

银币

中流砥柱

Rank: 25

铜币
649
发表于 2022-7-5 17:48:14 | 显示全部楼层
我在上一篇文章中编辑了代码。Gc 41在实体列表中出现两次,我的代码会错误地更改第一次出现的内容。我最初的想法是使用反向。但是,如果两个gc 41项具有相同的值,则仍然存在问题。使用append代替subst解决了这两个问题。
  1. (subst '(41 . 0.0) '(41 . 1.0) '((41 . 1.0) (41 . 1.0))) => ((41 . 0.0) (41 . 0.0))
回复

使用道具 举报

66

主题

1552

帖子

1514

银币

后起之秀

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

铜币
325
发表于 2022-7-5 17:58:22 | 显示全部楼层
谢谢你的夸奖!
但我不认为自己是专业人士,也不认为自己是程序员。我目前的技能对编写代码非常感兴趣。。并向更熟练的用户学习(李·麦克和塔瓦在其中发挥了重要作用)。
我非常感谢他们的帮助,所以我尝试将我实践作品中的任何“版权”翻译成他们/他们的昵称。
作为证明,Roy_043提到了我在之前帖子中发布的示例中的一个错误:
我知道,在这些论坛上,有一些Lisp程序的巨人在游,在沼泽深处,我只是听从塔瓦的建议,尽可能多地参与线程。
回复

使用道具 举报

10

主题

46

帖子

36

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
50
发表于 2022-7-5 18:01:21 | 显示全部楼层
 
这是我的目标。成为一名精通编写代码的人,这里的每个人都很有帮助。
回复

使用道具 举报

66

主题

1552

帖子

1514

银币

后起之秀

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

铜币
325
发表于 2022-7-5 18:14:08 | 显示全部楼层
 
可以因此,为了了解您目前正在处理的问题,请分析以下(entsel)示例:
[code][颜色=#8b4513];提供了4个示例来显示提示用户使用entseldefun C:test[e e1 e2 LineEntity R;>>示例#1-简单示例#2版本1-中等示例#2版本2-中等示例#3-平均值
回复

使用道具 举报

10

主题

46

帖子

36

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
50
发表于 2022-7-5 18:16:11 | 显示全部楼层
 
 
谢谢我一直很感谢反馈,我更感谢这些例子!期待分析!
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-13 08:57 , Processed in 0.449765 second(s), 72 queries .

© 2020-2025 乐筑天下

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