乐筑天下

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

[编程交流] 宏?

[复制链接]
pvd

2

主题

5

帖子

3

银币

初来乍到

Rank: 1

铜币
10
发表于 2022-7-6 11:45:58 | 显示全部楼层 |阅读模式
大家好,
 
我正在寻找一些东西,把颜色,线型和线宽的对象按层。这有宏吗?谁能帮我,因为我对Visual Basic一无所知。
 
非常感谢你
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 11:52:50 | 显示全部楼层
VLISP:
 
  1. (defun c:test (/ i obj ss)
  2. (vl-load-com)
  3. (setq i -1 *doc (cond (*doc) ((vla-get-ActiveDocument (vlax-get-acad-object)))))
  4. (cond ((ssget "_:L")
  5.         (vlax-for obj (setq ss (vla-get-ActiveSelectionSet *doc))
  6.           (mapcar
  7.             (function (lambda (prop value) (vlax-put-property obj prop value)))
  8.             '(Color Linetype Lineweight) (list acByLayer "ByLayer" acLnWtByLayer)))
  9.         (vla-delete ss)))
  10. (princ))
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 11:56:59 | 显示全部楼层
我的VBA很差,但是:
 
  1. Sub 2ByLayer ( )
  2. Dim sSet As AcadSelectionSet
  3. Set sSet = ThisDrawing.SelectionSets.Add("ByLayerSet")
  4. sSet.SelectOnScreen
  5. For i = 0 To sSet.Count
  6.    sSet.Item(i).Linetype = "BYLAYER"
  7.    sSet.Color = acByLayer
  8.    sSet.Lineweight = acLnWtByLayer
  9. Next i
  10. sSet.Delete
  11. End Sub

 
感谢对VBA的建议。。。
回复

使用道具 举报

pvd

2

主题

5

帖子

3

银币

初来乍到

Rank: 1

铜币
10
发表于 2022-7-6 12:06:37 | 显示全部楼层
非常感谢李!
现在请原谅我的愚蠢,但我无法让脚本工作。我将代码粘贴到我的Visual LISP编辑器中,对吗?然后我做什么?
 
再次感谢
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 12:12:29 | 显示全部楼层
有几种方法可以实现:
[列表]
  • 打开VLIDE,File>NewFile,粘贴代码并单击图标加载代码
    124600stxqxu7zzrxf005t.png
    [/列表]
    [列表]
  • 将代码另存为。lsp文件,通过启动套件加载。
    [/列表]
    [列表]
  • 将代码粘贴到命令行以加载它。
    见此处:
     
    http://www.cadtutor.net/forum/showthread.php?t=1390
  • 回复

    使用道具 举报

    pvd

    2

    主题

    5

    帖子

    3

    银币

    初来乍到

    Rank: 1

    铜币
    10
    发表于 2022-7-6 12:18:02 | 显示全部楼层
    太好了,李,谢谢你让我开始!
    回复

    使用道具 举报

    48

    主题

    1073

    帖子

    1043

    银币

    后起之秀

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

    铜币
    238
    发表于 2022-7-6 12:23:23 | 显示全部楼层
    我不得不这么做。。。。。。
    1. Public Sub AByLayer()
    2. Dim i as Integer
    3. Dim sSet As AcadSelectionSet
    4. Set sSet = ThisDrawing.SelectionSets.Add("ByLayerSet")
    5. sSet.SelectOnScreen
    6. For i = 0 To sSet.Count - 1
    7.    sSet.Item(i).Linetype = "ByLayer"
    8.    sSet.Item(i).color = acByLayer
    9.    sSet.Item(i).Lineweight = acLnWtByLayer
    10. Next i
    11. sSet.Delete
    12. End Sub

    我必须以字母而不是数字开始程序名称。
    我的设置要求声明变量,所以我添加了Dim语句。
    从“计数”中去掉一个。
    添加项目(i)至颜色和线宽线。
    回复

    使用道具 举报

    114

    主题

    1万

    帖子

    1万

    银币

    中流砥柱

    Rank: 25

    铜币
    543
    发表于 2022-7-6 12:25:37 | 显示全部楼层
    哇-真不敢相信我错过了那些“第(I)项”的陈述!那太草率了。
     
    谢谢你,Dave,你看,我的CAD上没有安装VBA,而且还没有机会安装,所以我所有的VBA代码都只是“理论性的”,通过示例进行了帮助。
     
    回复

    使用道具 举报

    48

    主题

    1073

    帖子

    1043

    银币

    后起之秀

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

    铜币
    238
    发表于 2022-7-6 12:32:11 | 显示全部楼层
    你做得比我好,我安装了VBA!
    回复

    使用道具 举报

    114

    主题

    1万

    帖子

    1万

    银币

    中流砥柱

    Rank: 25

    铜币
    543
    发表于 2022-7-6 12:38:50 | 显示全部楼层
     
    嗯,我不知道,你比我呆的时间长得多
     
    好的,我想澄清一下:
     
    [列表]
  • “Public Sub”是否意味着可以在命令行调用该函数?而仅仅“Sub”意味着它是一个子函数?
    [/列表]
    [列表]
    For循环中使用的
  • 符号也需要声明。
    [/列表]
    [列表]
  • 数字不能用于函数名。
    [/列表]
    谢谢Dave,非常感谢。
     
  • 回复

    使用道具 举报

    发表回复

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

    本版积分规则

    • 微信公众平台

    • 扫描访问手机版

    • 点击图片下载手机App

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

    GMT+8, 2025-3-5 10:56 , Processed in 0.420911 second(s), 85 queries .

    © 2020-2025 乐筑天下

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