我用VBA将一个DWG文件插入当前文件中,代码如下:
插入结果是MText也被炸开称为Text,但是PLine等却没有被炸开,请问是不是CAD的bug?
我用的是2000中文版。
Public Sub insertFile()
Dim insertPoint(0 To 2) As Double
Dim block As AcadBlockReference
Dim FileToInsert As String
insertPoint(0) = 0
insertPoint(1) = 0
insertPoint(2) = 0
FileToInsert = "C:\MText.dwg"
Set block = ThisDrawing.ModelSpace.InsertBlock(insertPoint, FileToInsert, 1, 1, 1, 0)
block.Explode
'block.Delete
End Sub
刚刚实际应用时发现一点小问题:当被插入的文件中有图层被关闭时用"Explode last "时不会炸开图形,修改为直接使用句柄作为Explode的参数即可。完整代码如下:
Public Sub insertFile()
Dim insertPoint(0 To 2) As Double
Dim block As AcadBlockReference
Dim FileToInsert As String
insertPoint(0) = 0
insertPoint(1) = 0
insertPoint(2) = 0
FileToInsert = "C:\MText.dwg"
Set block = ThisDrawing.ModelSpace.InsertBlock(insertPoint, FileToInsert, 1, 1, 1, 0)
'block.Explode
'block.Delete
' ThisDrawing.SendCommand "explode " & axEnt2lspEnt(block) & " "
ThisDrawing.SendCommand "explode last "
End Sub
Public Function axEnt2lspEnt(entObj As AcadEntity) As String
Dim entHandle As String
entHandle = entObj.Handle
axEnt2lspEnt = "(handent " & Chr(34) & entHandle & Chr(34) & ")"
End Function
谢谢老大!
我认为直接用Sendcommand运行CAD的命令不是太好,但是有时候又不知道如何直接用VBA解决一些问题,下面的代码也是直接用CAD的Pedit命令将一些首尾相连的直线连接成一个PLine,老大可不可以转换为直接使用VBA函数实现同样功能?
'合并选择集中分离的线为PLine
Public Sub JoinLineToPline(sel As AcadSelectionSet)
Dim strCommand As String
strCommand = "_Pedit" & vbCr & axEnt2lspEnt(sel.Item(0)) & " Y J "
Dim i As Integer
For i = 0 To sel.Count - 1
strCommand = strCommand + axEnt2lspEnt(sel.Item(i)) + vbCr
Next
strCommand = strCommand + vbCr + vbCr
ThisDrawing.SendCommand strCommand
End Sub