标签:
杂谈 |
分类: 开发 |
7. 如何调用vba命令对多义线进行fit(拟合)处理
直接用SendCommand方法,调用命令进行编辑
8. 块属性值编辑
PublicSub GetAttribute()
' 本段代码从选中的图块中获取属性值,并对其修改
Dim entObj As AcadEntity
Dim pickPnt As Variant
Dim blkRefObj As AcadBlockReference
' 选择图元
ThisDrawing.Utility.GetEntity entObj, pickPnt
' 判断是否为块引用
If StrComp(entObj.ObjectName, "AcDbBlockReference", 1) <> 0 Then
MsgBox " 你选择的不是一个图块,程序将退出!"
' 如果选择的不是一个块引用则程序退出运行
Exit Sub
End If
' 如果选择的是块引用,将其赋给块引用对象
Set blkRefObj = entObj
' 判断该块引用是否含有属性值
If Not blkRefObj.HasAttributes Then
MsgBox " 你选择的图块没有块属性,程序将退出!"
' 如果不含由属性值退出
Exit Sub
End If
Dim attVars As Variant
Dim I As Integer
' 获取块引用中的块属性对象
attVars = blkRefObj.GetAttributes
' 对块属性对象进行遍历
For I = 0 To UBound(attVars)
MsgBox " 第" & I + 1 & " 属性对象的属性值分别如下:" & Chr(13) & Chr(13) & _
" 属性标签为:" & attVars(I).TagString & Chr(13) & _
" 属性值为 :" & attVars(I).TextString
Next
' 将块属性的标签和值进行修改
attVars(0).TagString = "New Tag"
attVars(0).TextString = "New Value"
ThisDrawing.Regen True
EndSub
9.如何用程序控制对象捕捉
通过设置系统变量“osmode”来控制
10. 如何从VBA到VB?
在VB里,首先要获得Application对象,再获取Document对象,把VBA中的ThisDrawing对象设置成该Document对象即可,这样,你开发出来的程序就可以融入VB的强大功能了。
11.IntersectWith方法
获取图中一个对象与另一对象的交点
语法
RetVal= object.IntersectWith(IntersectObject, ExtendOption)
参数
Object 该方法适用于所有图形对象 ( 除了Pviewport和PolygonMesh)
IntersectObject 对象,为输入项; 该对象可以是所有图形对象中的任一个。
ExtendOptionAcExtendOption 枚举数; 为输入项
该选项指定两个对象是否通过延伸一个或两个或没有延伸来取得相交点。
acExtendNone 均无延伸。
acExtendThisEntity 延伸源对象。
acExtendOtherEntity 延伸作为参数传递的对象。
acExtendBoth 两个对象均延伸。
RetVal(返回值) 变体或双精度数组,返回图形中一个对象和另一对象相交的点的数组。
490
12.绘制多边形并显示多边形顶点坐标
Subpolygon()
' 以下语句绘制正多边形
Dim num As Integer
Dim pnt As Variant
Dim lpnt As Variant
num = ThisDrawing.Utility.GetInteger(" 请选择正多边形的边数:")
Dim fpnt As Variant
fpnt = ThisDrawing.Utility.GetPoint(, " 请选择正多边形的起点:")
Dim leng As Double
leng = ThisDrawing.Utility.GetDistance(fpnt, " 请选择正多边形的边长:")
ReDim lpnt(0 To num * 2 - 1) As Double
pnt = fpnt
lpnt(0) = pnt(0)
lpnt(1) = pnt(1)
Dim st As Integer
For st = 1 To num - 1
pnt = ThisDrawing.Utility.PolarPoint(pnt, (3.14159265 * 2 / num) * (st - 1), leng)
lpnt(st * 2) = pnt(0)
lpnt(st * 2 + 1) = pnt(1)
Next st
Dim pgon As AcadLWPolyline
Set pgon = ThisDrawing.ModelSpace.AddLightWeightPolyline(lpnt)
pgon.Closed = True
ThisDrawing.Regen (True)
' 以下语句获取多边形的顶点
Dim gpnt As Variant
gpnt = pgon.Coordinates
Dim pntcnt As Integer
pntcnt = UBound(gpnt)
Dim disptxt As String
disptxt = " 多边形共有" & (pntcnt + 1) / 2 & " 个顶点" & vbCrLf
Dim i As Integer
For i = 0 To pntcnt - 1 Step 2
disptxt = disptxt & " 第" & i / 2 + 1 & " 个顶点的坐标为:" & _
gpnt(i) & "," & gpnt(i + 1) & vbCrLf
Next i
disptxt = disptxt & " 明经通道VBA示例 http://www.mjtd.com"
MsgBox disptxt, , " 多边形的坐标显示"
EndSub
13.PrivateSub AcadDocument_BeginDoubleClick(ByVal pPoint As Variant)
MsgBox"图上双击坐标位置" & vbCrLf & pPoint(0) & vbCrLf & _
pPoint(1) & vbCrLf & pPoint(2)
Open"MyTest.txt" For Output Access Write As #1
Print#1, Format(pPoint(0), "0.000"), Format(pPoint(1), "0.000"),_
Format(pPoint(2), "0.000")
Close#1
EndSub
上面的程序只能实现将坐标输出一次,而第二次双击时,会将第一次的坐标值覆盖,有什么办法可以实现连续点选输出而不覆盖吗??????
Open 语句的Output改为Append即可
14.现有Handpoint = acadApp.ActiveDocument.Utility.GetPoint(, "请输入套料的插入点")
希望用户在捕捉点或输入点坐标动作时,如何避免用户因其他操作如缩放、PAN引起的系统报错
可以加一段以下语句:
onerror goto errHandle
Handpoint= acadApp.ActiveDocument.Utility.GetPoint(, " 请输入套料的插入点:")
errhandle:
ifErr.Number=-2147352567 then
Err.Clear
resume
endif
15.在VBA中如何传送一个参数给Vlisp?
如:在VBA中A= "123" , 要把VBA中A的值赋给Vlisp中的B。
用sendcommand可以做到
如:
Subvaluetolisp()
Dim a As Integer
a = 123
ThisDrawing.SendCommand "(setq b " & a & ") "
EndSub
如果不想命令行回显,则可以用VLAX控制。
16.请问在VBA中如何修改属性块中属性的textstring的对齐方式,谢了。
与Text一样,属性块也有HorizontalAlignment属性
P487
17.我想知道vb中的那个函数或者对象的方法可以代替在cad中按esc键取消命令
谢谢
SendCommand("")或SendCommand(Chr(27))
直接用SendCommand方法,调用命令进行编辑
8.
Public
End
9.如何用程序控制对象捕捉
通过设置系统变量“osmode”来控制
10.
在VB里,首先要获得Application对象,再获取Document对象,把VBA中的ThisDrawing对象设置成该Document对象即可,这样,你开发出来的程序就可以融入VB的强大功能了。
11.IntersectWith
获取图中一个对象与另一对象的交点
语法
RetVal
Object
IntersectObject
ExtendOption
该选项指定两个对象是否通过延伸一个或两个或没有延伸来取得相交点。
acExtendNone
acExtendThisEntity
acExtendOtherEntity
acExtendBoth
RetVal(返回值)
490
12.绘制多边形并显示多边形顶点坐标
Sub
'
'
End
13.Private
MsgBox
Open
Close
End
上面的程序只能实现将坐标输出一次,而第二次双击时,会将第一次的坐标值覆盖,有什么办法可以实现连续点选输出而不覆盖吗??????
Open
14.
希望用户在捕捉点或输入点坐标动作时,如何避免用户因其他操作如缩放、PAN引起的系统报错
可以加一段以下语句:
on
Handpoint
errhandle:
if
Err.Clear
resume
end
15.在VBA中如何传送一个参数给Vlisp?
如:在VBA中A
用sendcommand可以做到
如:
Sub
End
16.请问在VBA中如何修改属性块中属性的textstring的对齐方式,谢了。
与Text一样,属性块也有HorizontalAlignment属性
P487
17.我想知道vb中的那个函数或者对象的方法可以代替在cad中按esc键取消命令
谢谢
SendCommand("")或SendCommand(Chr(27))
前一篇:明经CAD_VBA论坛整理(1)
后一篇:明经CAD_VBA论坛整理(3)