乐筑天下

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

[编程交流] 查找co的AutoLisp例程

[复制链接]

6

主题

47

帖子

41

银币

初来乍到

Rank: 1

铜币
30
发表于 2022-7-5 19:24:09 | 显示全部楼层
Commandobill,谢谢!这段代码看起来越来越接近我想要的。
 
请原谅我的无知,但当我加载此例程时,我会得到以下结果:
 
命令:(加载“../”)CB:REPLACEATTRIBUTEVALUE
 
如何初始化主函数?我键入test11,但它无法识别。
 
此外,在那里的某个地方是否需要vl load com?请原谅我的无知,我仍处于初级阶段。
回复

使用道具 举报

106

主题

1万

帖子

101

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1299
发表于 2022-7-5 19:26:53 | 显示全部楼层
当有疑问时,把Vl加载com放在一个自动加载的lisp中,这样它总是在启动时完成。
回复

使用道具 举报

6

主题

47

帖子

41

银币

初来乍到

Rank: 1

铜币
30
发表于 2022-7-5 19:30:54 | 显示全部楼层
伙计们,大部分是好消息!Commandobill,你的代码很好用!
 
然而,我忘了提到,我有3个标题栏,不是两个(对不起)。设置块后,它将保留在第一个图形中找到的标题栏。因此,如果第一个图形具有“drawing\u Sheet\u 22x34”,则当我将其作为批处理(脚本模式)运行时,它将仅使用该标题栏更新图形。但是,如果我将lisp拖放到单个图形中,它会修复所有图形,而不管标题栏如何。
 
我在if语句的末尾添加了(ssdel ent blockSS),对拖放没有影响,但阻止了lisp在多批处理中工作。
 
一定有一个可变的问题。如何重置变量,以便在下一个图形上以blocks开始,并找到图形中的哪个标题栏?
回复

使用道具 举报

12

主题

395

帖子

384

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
60
发表于 2022-7-5 19:31:22 | 显示全部楼层
就主要功能而言,仍然不是我最好的工作,但完成了工作。
  1. (vl-load-com)
  2. (defun c:test11 ( / blockSS blockList attName attNumber)
  3. (if
  4.    (setq blockSS (ssget "X" (list (cons 0 "INSERT") (cons -4 "<xor") (cons 2 "Drawing_Sheet_22x34") (cons 2 "Drawing_Sheet_22x34-H") (cons -4 "xor>"))))
  5.    (progn
  6.      (setq blockList (mapcar 'cadr (ssnamex blockSS)))
  7.      (setq attName (vla-get-tagstring (car (cb:matchAtts "REV" "REV" (vlax-ename->vla-object(car blockList))))))
  8.      (setq attNumber (substr attName (strlen attName) 1))
  9.      (mapcar '(lambda (x)
  10.    (cb:replaceAttributeValue (strcat "DATE" attNumber) "29-JUN-15" (vlax-ename->vla-object x))
  11.    (cb:replaceAttributeValue (strcat "DESC" attNumber) "BASELINE UPDATE - 101/111 RENOVATIONS" (vlax-ename->vla-object x)))
  12.       blockList)
  13.    ))
  14. (princ)
  15. )
  16. (defun cb:matchAtts (baseAttName attPrefix Blk / )
  17. (setq baseAtt (car (vl-remove-if-not '(lambda (x) (= baseAttName (vla-get-tagstring x))) (cb:variantToList (vla-getattributes Blk)))))
  18. (vl-remove-if-not '(lambda (x)
  19.                (and
  20.                  (wcmatch (vla-get-tagstring x) (strcat attPrefix "*"))
  21.                  (not (eq (vla-get-tagstring x) baseAttName))
  22.                  (eq (vla-get-textstring x) (vla-get-textstring baseAtt))
  23.                  ))
  24.    (cb:variantToList (vla-getattributes Blk)))
  25. )
  26. (defun cb:variantToList (theVariant / )
  27. (if (= 'variant (type theVariant))
  28. (vlax-safearray->list (vlax-variant-value theVariant))
  29.    nil
  30.    )
  31. )
  32. ;;;;;Replace Attribute Value;;;;;;;;;
  33. ;;;;;By: CommandoBill;;;;;;;;;;;;;;;;;
  34. ;;;;;01/24/15;;;;;;;;;;;;;;;;;;;;;;;;
  35. ;;;;;Send a block to this function with an attribute you want to replace with a new value
  36. ;;;;attName = the name of the attribute which value you want to replace
  37. ;;;;attNewVal = the new value you want in the attribute
  38. ;;;;Blk = the vla-object verision of the block which the attribute is in
  39. (defun cb:replaceAttributeValue (attName attNewVal Blk / )
  40. (mapcar '(lambda (x) (if (= attName (vla-get-tagstring x))
  41.                  (vla-put-textstring x attNewVal))) (cb:variantToList (vla-getattributes Blk)))
  42. (princ)
  43.      )
回复

使用道具 举报

12

主题

395

帖子

384

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
60
发表于 2022-7-5 19:37:28 | 显示全部楼层
 
我刚刚发布的内容应该适用于您绘图中的所有标题栏。
回复

使用道具 举报

6

主题

47

帖子

41

银币

初来乍到

Rank: 1

铜币
30
发表于 2022-7-5 19:39:41 | 显示全部楼层
再次感谢Commandobill。这帮我学到了很多,也解决了我最初的要求!
回复

使用道具 举报

pBe

32

主题

2722

帖子

2666

银币

后起之秀

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

铜币
211
发表于 2022-7-5 19:42:41 | 显示全部楼层
 
如果它真的达到了这么高的速度,并且速度框达到了最大值,那么最后一个速度总是最后一个吗?如果不匹配呢?它是否会“冲击”转速*值?
 
 
13
 
12
11
10
 
9
 
如果答案是否定的,那你怎么办?
 
是否使用多个布局选项卡?
Tblocks在模型空间上吗?
每个图形是否有一个以上的Tblock?
 
人们必须考虑达·鲍尔兹的所有条件,因此才有问题。
 
pBe公司
回复

使用道具 举报

6

主题

47

帖子

41

银币

初来乍到

Rank: 1

铜币
30
发表于 2022-7-5 19:46:57 | 显示全部楼层
每个标题栏有不同数量的修订。例如,水平标题栏有4个修订的空间,因此有REV1、REV2、REV3和REV4。假设REV为1。REV1为0,REV2为1。因此,REV2和REV具有匹配的值。REV3和REV4还没有值。此外,我已经有了一个例程,一旦修订区域被填满,就会将修订向下移动。我不需要删除任何修订信息。我要做的就是找到正确的DATE*和DESC*属性并更改它们的值。
 
 
每个图形只有一个布局(布局1),所有标题栏都在图纸空间中。
回复

使用道具 举报

pBe

32

主题

2722

帖子

2666

银币

后起之秀

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

铜币
211
发表于 2022-7-5 19:48:38 | 显示全部楼层
 
你的意思是REV和REV*标记的匹配值正确吗?我的问题的重点是,如果没有对手怎么办?我相信只要有匹配项,就很容易找到正确的日期和描述。我只是提出这个问题,以防这种情况发生。
 
无论如何,我看到Commandobills的代码对你有用,现在没有必要混淆这个问题。
 
干杯
pBe公司
回复

使用道具 举报

6

主题

47

帖子

41

银币

初来乍到

Rank: 1

铜币
30
发表于 2022-7-5 19:51:50 | 显示全部楼层
啊,说得好。在这种情况下,总会有一场比赛。基本上,我要做的是返回并将最新版本的所有日期和描述更改为相同的日期和描述。否则,我必须手动返回并重复更改它们。因为它们都是一样的,所以脚本节省了几个小时。此外,由于它们都是一样的,现在我可以很容易地进入并在excel中更新数据库。谢谢你的意见。
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-12 13:47 , Processed in 0.593550 second(s), 70 queries .

© 2020-2025 乐筑天下

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