首页 >> 胶管接头

使用VBA进行截断break和修剪trim方螺母

阳晨五金网 2022-07-21 12:28:10

使用VBA进行截断(break)和修剪(trim)

使用VBA进行截断(break)和修剪(trim) 2011年12月10日 来源: 在VBA中,我们可以通过SendCommand方法来发送命令给AutoCAD而对AutoCAD直接进行操作,就象LISP中的Command函数一样,但它却没有Command函数这么方便。因为Command函数可以直接接受LISP命令以及LISP提供的点坐标形式以及双元表等,所以它能够通过程序对图元进行修剪、截断、延伸等操作,但SendCommand方法却不能接受VBA提供的点坐标,不能接受VBA中的其它方法,象点坐标形式,而且也不能纵使出双元表这样的特殊格式,它只能象在命令行一样的输入在命令行中能识别的点形式及双元表。

所以说这个问题也难倒了多位的专家,一段时间以来,这个问题都被认为是一个不能解决的问题,虽然说有些专家也试图通过其它方式来解决,但毕竟要使用一些的控件,而且写出来的语句也难以看懂。

通过对SendCommand方法的研究,我们不难发现它可以接受与命令输入一模一样的语句,也就是说它也能够接受AutoLISP的函数以及相同格式的点坐标。这样,我们就可以通过VBA来制造这样的点坐标,也可以通过VBA来生成一些供SendCommand方法使用的组合起来的AutoLISP语句来表达的一个双元表。

大家应该可以明白了,我也通过以下的例子来给大家演示怎样通过这种形式对图元进行截断及修剪,在这里提供了三个函数供转换VBA形式为LISP形式用。

axPoint2lspPoint是转换VBA的点为SendCommand用的点格式;

axEnt2lspEnt是转换VBA的图元为SendCommand中用与供选择的图元格式;

GetDoubleEntTable是转换VBA的图元及点为SendCommand中用的双元表格式。

'示例BreakSub Break()Dim Pnt As VariantDim entObj As AcadEntityThisDrawing.Utility.GetEntity entObj, Pnt, "选择图元:"Dim Pnt2 As VariantPnt2 = ThisDrawing.Utility.GetPoint(, "选择点:")Dim det As Stringdet = GetDoubleEntTable(entObj, Pnt)Dim lspPnt As StringlspPnt = axPoint2lspPoint(Pnt2)ThisDrawing.SendCommand "_break" & vbCr & det & vbCr & lspPnt & vbCrEnd Sub'示例TrimSub Trim()Dim Pnt1 As VariantDim entObj1 As AcadEntityThisDrawing.Utility.GetEntity entObj1, Pnt1, "选择图元:"Dim det1 As Stringdet1 = axEnt2lspEnt(entObj1)Dim Pnt2 As VariantDim entObj2 As AcadEntityThisDrawing.Utility.GetEntity entObj2, Pnt2, "选择被剪图元:"Dim det2 As Stringdet2 = GetDoubleEntTable(entObj2, Pnt2)ThisDrawing.SendCommand "_trim" & vbCr & det1 & vbCr & vbCr & det2 & vbCr & vbCrEnd Sub'转换双元表的函数Public Function GetDoubleEntTable(entObj As AcadEntity, Pnt As Variant) As StringDim entHandle As StringentHandle = entObj.HandleGetDoubleEntTable = "(list(handent " & Chr(34) & entHandle & Chr(34) & _ ")(list " & Str(Pnt(0)) & Str(Pnt(1)) & Str(Pnt(2)) & "))"End Function'转换点的函数Public Function axPoint2lspPoint(Pnt As Variant) As StringaxPoint2lspPoint = Pnt(0) & "," & Pnt(1) & "," & Pnt(2)End Function'转换图元函数Public Function axEnt2lspEnt(entObj As AcadEntity) As StringDim entHandle As StringentHandle = entObj.HandleaxEnt2lspEnt = "(handent " & Chr(34) & entHandle & Chr(34) & ")"End Function

嵊州市长乐发达综合工具厂

通化市二道江恒源石油化工厂

连平县隆街镇财政所

宁德市三都生顺网具店

江西省修水县太阳能开发公司

丹阳市界牌凯达灯饰厂

广州市三点水广告有限公司

地毯铺装

山东三二五工程机械有限公司

巩义宋陵矿山机械有限公司

友情链接