Autocad vbA初级教程(13) 块操作定义块方法:Set blocksobj=ThisDrawing.Blocks.Add(基点, 块名)把选择集加入块中的方法:ThisDrawing.CopyObjects(选择集,块)插入块方法:0ThisDrawing.ModelSpace.InsertBlock(插入点,块名, X轴比例,Y轴比例,Z轴比例, 旋转角度)画块属性方法:ThisDrawing.ModelSpace.AddAttribute(文字高度,模式,提示字符, 插入点, 显示字符,默认值)一共有五种模式,在输入时会有提示,其中最常用的是“acAttributeModeNormal”普通模式编程思路:1.定义一个空块2.在块中画一段弧(球服衣领)3.画多段线,镜像画出球衣4.画块属性,由于块属性默认的对齐方式是左对齐,而球员号码应该居中,所以必须把块的对齐属性改为居中。
但是当这个属性更改时块属性对齐点会自动归零,所以不得不再次更改对齐点属性5.把多段线和属性复制到块中6.提示用户点选球员位置和姓名7.插入块,修改球衣号码属性、球员姓名属性以下是源码,附有详细的注释,如果有疑问,建议用变量跟踪法研究一下。
Sub team()Dim playerlay As AcadLayer '定义球员图层Dim playerblock As AcadBlock '定义块变量Dim arcc(0 To 2) As Double '圆弧圆心Dim linep1(0 To 2) As Double '线条端点1Dim linep2(0 To 2) As Double '线条端点2Dim pline(0 To 20) As Double '定义队服右侧多段线7个顶点Dim basep(0 To 2) As Double '块基点00Dim playernumberpoint(0 To 2) As Double '块属性插入点Dim mytxt As AcadTextStyle '定义mytxt变量为文本样式Dim blockRef As AcadBlockReference '定义块属性变量Dim Attr3 As V ariant '插入块属性变量Set playerblock = ThisDrawing.Blocks.Add(basep, "球员") '定义一个"球员"的块arcc(0) = 0arcc(1) = 430Call playerblock.AddArc(arcc, 50, ThisDrawing.Utility.AngleToReal(180, 0), 0) '画弧并加入块中0pline(0) = 0pline(1) = 20pline(3) = 1000pline(4) = 20pline(6) = 100pline(7) = 250pline(9) = 125pline(10) = 2070pline(12) = 212pline(13) = 257pline(15) = 112pline(16) = 4300pline(18) = 50pline(19) = 430Set line1 = ThisDrawing.ModelSpace.AddPolyline(pline) '画队服右侧多段线linep2(1) = 1 '镜像轴第二点位于Y轴上任一点Set line2 = line1.Mirror(linep1, linep2) '镜像获得另一半多段线Dim p(0 To 2) As Double '定义坐标变量0 0Set mytxt = ThisDrawing.TextStyles.Add("mytxt") '添加mytxt样式mytxt.fontFile = "c:\windows\fonts\simfang.ttf" '设置字体文件为仿宋体ThisDrawing.ActiveTextStyle = mytxt '将当前文字样式设置为mytxtplayernumberpoint(0) = 0 '块属性位置playernumberpoint(1) = 2000Set attr1 = ThisDrawing.ModelSpace.AddAttribute(100, acAttributeModeNormal, "号码", playernumberpoint, "X", 0) '画块属性0attr1.Alignment = 7 '居中attr1.TextAlignmentPoint = playernumberpoint '重定义对齐点Set attr2 = ThisDrawing.ModelSpace.AddAttribute(100, acAttributeModeNormal, "姓名", playernumberpoint, "", 0) '画块属性attr2.Alignment = 7 '居中Dim objCollection(0 To 3) As Object '创建选择集Set objCollection(0) = line1 '线条1加入选择集Set objCollection(1) = line2 '线条2加入选择集Set objCollection(2) = attr1 '属性1加入选择集0Set objCollection(3) = attr2 '属性2加入选择集Call ThisDrawing.CopyObjects(objCollection, playerblock) '把选择集加入块中For Each element In objCollection '在选择集中进行循环element.Delete '删除线条和属性(此操作并不影响已创建的块)NextSet playerlay = yers.Add("球员") '新建图层playerlay.color = 2 '为黄色ThisDrawing.ActiveLayer = playerlay '将当前图层设置为球员图层Dim p1 As V ariant '块插入点位置For i = 1 To 11 '插入块pstring = CStr(i) & "号球员位置:"p1 = ThisDrawing.Utility.GetPoint(, pstring) '点选球员位置坐标nstring = ThisDrawing.Utility.GetString(30, "球员姓名:")Set blockRef = ThisDrawing.ModelSpace.InsertBlock(p1, "球员", 1, 1, 1, 0) '插入块 Attr3 = blockRef.GetAttributes '获取块属性Attr3(0).TextString = CStr(i) '赋值球员号码Attr3(1).TextString = nstring '赋值球员姓名NextEnd Sub。