乐筑天下

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

[编程交流] 将图层重命名为dwgname-1等

[复制链接]

17

主题

127

帖子

110

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
85
发表于 2022-7-6 11:21:08 | 显示全部楼层
非常感谢!!你就是那个男人!
回复

使用道具 举报

54

主题

3755

帖子

3583

银币

后起之秀

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

铜币
438
发表于 2022-7-6 11:25:29 | 显示全部楼层
享受
你明白代码在做什么吗?
回复

使用道具 举报

17

主题

127

帖子

110

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
85
发表于 2022-7-6 11:28:44 | 显示全部楼层
我现在正在试着破译它。然而,由于这里几乎是下班时间,我确信在我离开之前我不会处理好它。我会在早上回来,让你知道我是否能够得到我的头周围的代码。再次感谢你的帮助。
 
朗尼
回复

使用道具 举报

17

主题

127

帖子

110

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
85
发表于 2022-7-6 11:35:47 | 显示全部楼层
艾伦,我今天下班逃学了,带孩子们去看电影,和查克·E·芝士(ChuckE.Cheese)在一起,所以直到刚才我才有机会复习这个代码。然而,由于妻子今晚工作,我有足够的时间来解决这个问题。
 
我想我将从第一行开始。我读了一些关于使用(lambda)的书,但我不确定有什么条件可以保证在常规(defun)语句中使用它。我发现反斜杠前面列出的变量是全局变量,而反斜杠后面的变量只是局部变量。至少(defun)声明是这样的。这是否适用于(λ)?
  1. ((lambda (name / tab)

 
 
根据第二行中的术语,我可以找出代码在做什么,我只是不知道如果我试图在其他事情上使用此代码,我可以使用什么术语。“x”是变量吗?如果是,为什么不包括在(lambda)后面的括号中?我可以用“线”、“圆”、“层”或“颜色”代替“布局”吗?顺便说一句,我假设这行代码基本上提取了“vla get layouts”中列出的任何术语的属性。
  1. (vlax-for x (vla-get-layouts (vla-get-activedocument (vlax-get-acad-object)))

 
 
在第三行中,您设置了一个条件评估。我想我理解这种类型的评估,但这个例子有点复杂。据我所知,条件评估的基本设置如下:
  1. (cond
  2.    (1st test)(action to take place if true)
  3.    (2nd test)(action to take place if true)
  4.    (else do this if none of the above is true))

 
 
所以在第一个条件中,你已经设置好了,这样“模型”选项卡就不会被修改,对吗?我这么说是因为如果这个条件为真,我看不到会发生任何动作,所以我假设如果省略了动作,那么什么都不会发生。
  1. ((eq (vla-get-name x) "Model"))

 
 
如果taborder值小于4,则下一个条件返回true,结果是将选项卡重命名为字符串“name”、“tab”和“BOM”的值。
  1. ((< 0 (setq tab (vla-get-taborder x)) 4)
  2.            (vl-catch-all-apply
  3.              (function vla-put-name)
  4.              (list x (strcat name (itoa tab) " BOM"))
  5.            )
  6.           )

 
 
对于所有其他条件,返回最终条件,即使用字符串“name”和“taborder”的值命名选项卡。为什么您在这里使用“(itoa(vla get taborder x))和(itoa tab)进行上一次评估?只是想知道。。。
  1. ((vl-catch-all-apply
  2.              (function vla-put-name)
  3.              (list x (strcat name (itoa (vla-get-taborder x))))
  4.            )
  5.           )

 
 
现在我猜最后一段代码实际上是对选项卡进行重命名的部分,这意味着上面的代码只是派生名称并将其存储以供最后一段使用。虽然我不知道,但我还是有点困惑。
  1. (strcat (vl-filename-base (getvar 'dwgname)) "-")

 
 
现在我头痛
 
再次感谢您对这段代码的帮助。
 
朗尼
回复

使用道具 举报

20

主题

81

帖子

61

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
100
发表于 2022-7-6 11:40:59 | 显示全部楼层
您可以通过执行以下操作来修改lenth中的dwg名称:
  1.        (setq str1 (strcat (vl-filename-base (getvar 'dwgname))))
  2.         (setq str4(strcat "DRW-" (substr str1 5 ))

该示例获取dwg名称的字母5到8,并在其之前添加DRW。
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-6 17:17 , Processed in 0.532420 second(s), 60 queries .

© 2020-2025 乐筑天下

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