乐筑天下

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

[求助]关于cad标注的问题

[复制链接]

11

主题

39

帖子

8

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
83
发表于 2003-6-3 21:08:00 | 显示全部楼层 |阅读模式
大家好,我有个想法,就是当选择标注进行标注后,跟着直接新建一个标注的层。调试了一下,好象没任何反映,是不是程序执行完ThisDrawing.SendCommand "_dimaligned" & vbCr就退出了
请大家帮助解决这个问题,程序如下:
Sub a()
Dim layer1 As AcadLayer
Set layer1 = ThisDrawing.Layers.add("标注")
layer1.Color = acGreen
Dim n As Integer
ThisDrawing.SendCommand "_dimaligned" & vbCr
For Each ent In ThisDrawing.ModelSpace
If TypeOf ent Is AcadDimAligned Then
ent.Layer = "标注"
End If
Next
End Sub
回复

使用道具 举报

7

主题

38

帖子

7

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
66
发表于 2022-7-13 20:59:00 | 显示全部楼层

能否重新提供下载,现在无链接了
回复

使用道具 举报

34

主题

372

帖子

7

银币

中流砥柱

Rank: 25

铜币
508
发表于 2003-6-4 13:12:00 | 显示全部楼层
(1)未定义ent对象。
    (2)引入SendCommand命令引起了程序执行顺序的混乱,后面的循环语句并不是没有执行,而是在SendCommand之前执行!
    我的建议是,不用SendCommand函数,而是要求用户输入数据,根据数据自动创建一个标注对象。
    第(2)条是我测试的结果,可能会有不妥之处。
回复

使用道具 举报

158

主题

2315

帖子

10

银币

顶梁支柱

Rank: 50Rank: 50

铜币
2951
发表于 2003-6-5 20:07:00 | 显示全部楼层
你所需要的方法就是在标注时把标注对象放到指定的标注图层中,可以使用事件来解决。
但使用事件有一个缺点就是当标注时按了取消键时不能回复先前的图层。
或者可以这样:
在开始命令的事件中记下当前空间的对象数量,然后在结束命令的事件中写入判断刚才的命令是否为标注命令,如果是标注命令则从当前空间对象数量后的对象开始判断对象是否为标注对象,如果是则改变其图层。
这样做就也就是在开始命令时不对图层进行切换,而是在对象建立后再改对象的图层,所以标注时对象还是在当前图层中,而标注完成后才会把对象放到指定的图层中。
为什么不直接判断最后建立的对象来切换呢,因为有些标注命令可以建立多个标注对象,如连接标注,所以只判断最后一个命令是不正确的。
希望大家能用这个思路写出一个程序出来供大家使用(我也想用)。
回复

使用道具 举报

158

主题

2315

帖子

10

银币

顶梁支柱

Rank: 50Rank: 50

铜币
2951
发表于 2003-6-5 20:49:00 | 显示全部楼层
注意程序只考虑了新建图层,而没有考虑新图层的颜色及线型等其它属性,大家可以自己添加上去。
程序有一个好处就是等所有对象添加后才改变对象的图层,所以按了ESC键也没关系,不会造成当前图层换成其它图层的问题。
有一个缺点:在使用连接标注时如果按了取消,则已经创建的标注对象不能改图层。
  1. Public EntCount As Integer
  2. Private Sub AcadDocument_BeginCommand(ByVal CommandName As String)
  3.    EntCount = ThisDrawing.ModelSpace.Count
  4.    
  5. End Sub
  6. Private Sub AcadDocument_EndCommand(ByVal CommandName As String)
  7.     If Left(UCase(CommandName), 3) = "DIM" Then
  8.         Dim NewEnt As AcadEntity
  9.         Dim i As Integer
  10.         Dim NewLayerName As String
  11.         '以下定义了要将标注对象移动到的图层名称
  12.         NewLayerName = "3"
  13.         CreateLayer ("NewLayerName")
  14.         For i = EntCount To ThisDrawing.ModelSpace.Count - 1
  15.         Set NewEnt = ThisDrawing.ModelSpace.Item(i)
  16.         NewEnt.Layer = "NewLayerName"
  17.         Next
  18.     End If
  19. End Sub
  20. Public Function CreateLayer(ssLayerName As String) As AcadLayer
  21. On Error Resume Next
  22.     Set CreateLayer = ThisDrawing.Layers(ssLayerName)
  23.     If Err Then
  24.         Err.Clear
  25.         Set CreateLayer = ThisDrawing.Layers.Add(ssLayerName)
  26.     End If
  27. End Function
回复

使用道具 举报

158

主题

2315

帖子

10

银币

顶梁支柱

Rank: 50Rank: 50

铜币
2951
发表于 2003-6-6 18:27:00 | 显示全部楼层
程序利用注册表来保存切换的图层配置,现在还未完成生成注册表部分,大家可以把以下文件导入到注册表中先试试吧:
请点击此处下载

请先注册会员后在进行下载

已注册会员,请先登录后下载

文件名称:g53lertzxa0.rar 
下载次数:0  文件大小:276 Bytes  售价:2银币 [记录]
下载权限: 不限 以上或 Vip会员   [开通Vip]   [签到领银币]  [免费赚银币]

注意以下程序下载:
请点击此处下载

请先注册会员后在进行下载

已注册会员,请先登录后下载

文件名称:dvjydoflocx.dvb 
下载次数:0  文件大小:48 KB  售价:2银币 [记录]
下载权限: 不限 以上或 Vip会员   [开通Vip]   [签到领银币]  [免费赚银币]


以下是程序内容:
  1. ' AutoLayer.dvb
  2. Public EntCount As Integer
  3. Public LayerSet As Variant
  4. Public GetReg As Boolean
  5. Private Sub AutoLayerLoad()
  6.     Dim LayerSetting() As String
  7.     Dim SplitSetting As Variant
  8.     Dim LayerName As Variant
  9.     Dim LayerCount As Integer
  10.     LayerName = GetAllSettings("MCCAD", "AutoLayer")
  11.     For LayerCount = LBound(LayerName, 1) To UBound(LayerName, 1)
  12.         ReDim Preserve LayerSetting(2, LayerCount)
  13.         LayerSetting(0, LayerCount) = LayerName(LayerCount, 0)
  14.         SplitSetting = Split(LayerName(LayerCount, 1), ",")
  15.         LayerSetting(1, LayerCount) = SplitSetting(0)
  16.         LayerSetting(2, LayerCount) = SplitSetting(1)
  17.     Next
  18.         LayerSet = LayerSetting()
  19. End Sub
  20. Private Sub AcadDocument_BeginCommand(ByVal CommandName As String)
  21.    EntCount = ThisDrawing.ModelSpace.Count
  22. End Sub
  23. Private Sub AcadDocument_EndCommand(ByVal CommandName As String)
  24.    If GetReg = False Then
  25.         AutoLayerLoad
  26.         GetReg = True
  27.    End If
  28.    Dim NewEnt As AcadEntity
  29.    Dim i As Integer
  30.    Dim NewLayerName As String
  31.    Dim j As Integer
  32.    Dim NewLayerColor As Integer
  33.    For j = LBound(LayerSet, 2) To UBound(LayerSet, 2)
  34.        If UCase(CommandName) Like LayerSet(0, j) Then
  35.            NewLayerName = LayerSet(1, j)
  36.            NewLayerColor = CVar(LayerSet(2, j))
  37.            CreateLayer NewLayerName, NewLayerColor
  38.            If ThisDrawing.ModelSpace.Count > EntCount Then
  39.                For i = EntCount To ThisDrawing.ModelSpace.Count - 1
  40.                    Set NewEnt = ThisDrawing.ModelSpace.Item(i)
  41.                    NewEnt.Layer = NewLayerName
  42.                Next
  43.            End If
  44.            Exit For
  45.        End If
  46.    Next
  47. End Sub
  48. Public Function CreateLayer(ssLayerName As String, Optional EntColor As Integer) As AcadLayer
  49. On Error Resume Next
  50.     Set CreateLayer = ThisDrawing.Layers(ssLayerName)
  51.     If Err Then
  52.         Err.Clear
  53.         Set CreateLayer = ThisDrawing.Layers.Add(ssLayerName)
  54.         If EntColor  0 Then CreateLayer.color = EntColor
  55.     End If
  56. End Function
回复

使用道具 举报

11

主题

39

帖子

8

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
83
发表于 2003-6-7 09:15:00 | 显示全部楼层
谢谢了,明老大的程序让我受益菲浅,因为是
回复

使用道具 举报

158

主题

2315

帖子

10

银币

顶梁支柱

Rank: 50Rank: 50

铜币
2951
发表于 2003-6-10 17:29:00 | 显示全部楼层
链接地址:
http://www.mjtd.com/mcdown/list.asp?id=370

3qcfeqe31hx.jpg

3qcfeqe31hx.jpg

回复

使用道具 举报

3

主题

32

帖子

2

银币

初来乍到

Rank: 1

铜币
44
发表于 2003-6-12 11:12:00 | 显示全部楼层
斑竹做的东西真的是专业,学习学习。
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2024-11-21 21:01 , Processed in 0.402691 second(s), 76 queries .

© 2020-2024 乐筑天下

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