明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 6333|回复: 10

vba怎么实现修改指定图层的线宽和文字高度

[复制链接]
发表于 2013-6-16 21:40:49 | 显示全部楼层 |阅读模式
我想用vba遍历我的当前文件的所有层,然后对指定的层进行线宽和文字高度的设置怎么实现,我的代码如下,但无法达到功能,求高手指点。
Sub zongtu()
On Error Resume Next
Dim I As Integer
Dim msg As String
msg = ""
Dim a As Double
a = ThisDrawing.Layers.Count - 1
For I = 0 To a
If ThisDrawing.Layers.Item(I).Name = "DLSS" Then
msg = ThisDrawing.Layers.Item(I).Name
ThisDrawing.Layers(I).Lineweight = 0

Next
'遍历图层,对dlss层的线宽设置为0,文字高度设置为1.25
End Sub

发表于 2013-6-17 19:06:39 | 显示全部楼层
本帖最后由 yshf 于 2013-6-17 22:01 编辑

试试这个
  1. Sub zongtu()
  2.     On Error Resume Next
  3.    
  4.     Dim LayObj As AcadLayer
  5.     For Each LayObj In ThisDrawing.Layers
  6.         If LayObj.Name = "DLSS" Then
  7.            LayObj.Lineweight = 0
  8.         End If
  9.     Next
  10.    
  11.     Dim Ssd As AcadSelectionSet
  12.     Dim FType(0 To 4) As Integer
  13.     Dim FData(0 To 4) As Variant
  14.     Dim TeObj As Object
  15.    
  16.     FType(0) = -4
  17.     FType(1) = 0
  18.     FType(2) = 0
  19.     FType(3) = -4
  20.     FType(4) = 8
  21.    
  22.     FData(0) = "<or"
  23.     FData(1) = "text"
  24.     FData(2) = "mtext"
  25.     FData(3) = "or>"
  26.     FData(4) = "DLSS"
  27.    
  28.     ThisDrawing.SelectionSets("Ssd").Delete
  29.    
  30.     '创建选择集(选择图层为DLSS,图元实体为文字的选择集)
  31.     Set Ssd = ThisDrawing.SelectionSets.Add("Ssd")
  32.     Ssd.Select acSelectionSetAll, , , FType, FData
  33.     For Each TeObj In Ssd
  34.         TeObj.Height = 1.25
  35.     Next
  36.    
  37. End Sub
发表于 2013-6-17 21:51:48 | 显示全部楼层
相应的lisp
  1. (defun c:cc()
  2.     (setq tcm  "DLSS"
  3.           Tcobj  (vlax-ename->vla-object (tblobjname "layer" tcm))
  4.     )
  5.    
  6.     (vlax-put Tcobj "Lineweight" 0)
  7.     (if (setq Ssd (ssget "x" (list '(0 . "*text") (cons 8 tcm))))
  8.         (progn
  9.             (setq n (sslength Ssd) i 0)
  10.             (repeat n
  11.                 (setq dxf (entget (ssname Ssd i))
  12.                       dxf (subst (cons 40 1.25) (assoc 40 dxf) dxf)
  13.                       i   (1+ i)
  14.                 )
  15.                 (entmod dxf)
  16.             )
  17.         )
  18.     )
  19.     (princ)
  20. )
 楼主| 发表于 2013-6-21 22:01:26 | 显示全部楼层
yshf 发表于 2013-6-17 21:51
相应的lisp

谢谢,认真学习了
发表于 2014-3-7 12:04:10 | 显示全部楼层
这个对于学lisp的人来说很有用啊
发表于 2014-3-7 21:23:39 | 显示全部楼层
楼主大公无私
 楼主| 发表于 2014-4-8 13:15:33 | 显示全部楼层
yshf 发表于 2013-6-17 21:51
相应的lisp

谢谢,你这个不错
 楼主| 发表于 2014-4-8 13:17:49 | 显示全部楼层
yshf 发表于 2013-6-17 21:51
相应的lisp

你那里有关于lisp编程的书推荐没啊,我只会vba,想学lisp
发表于 2014-4-8 20:19:43 | 显示全部楼层
1、《Auto LISP & DCL基础篇》 吴永进  林美樱编著
2、《Visual LISP程序设计——技巧与范例》 陈伯雄 冯伟编著
 楼主| 发表于 2014-4-9 12:13:24 | 显示全部楼层
yshf 发表于 2013-6-17 19:06
试试这个

追问一下,你这个vba改线宽的,我想改dlss层的多段线的全局宽度为0怎么弄
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-12-23 13:54 , Processed in 0.193910 second(s), 27 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表