第一范文网 - 专业文章范例文档资料分享平台

AutoCAD二次开发(VBA)

来源:用户分享 时间:2025/6/4 9:56:51 本文由loading 分享 下载这篇文档手机版
说明:文章内容仅供预览,部分内容可能不全,需要完整文档或者需要复制内容,请下载word后使用。下载word有问题请添加微信号:xxxxxxx或QQ:xxxxxx 处理(尽可能给您提供完整文档),感谢您的支持与谅解。

第三个参数分别是样条曲线起点和终点的切点坐标。

下面的程序使用三点在模型空间中绘制样条曲线。其中样条曲线的起始相切点为(2,3,0),终点切点为(3,1,0)。

Dim SpLinObj As AcadSpline Dim STanP(0 To 2) As Double Dim ETanP(0 To 2) As Double Dim VetPoints(0 To 8) As Double STanP(0) = 2 STanP(1) = 3 STanP(2) = 0 ETanP(0) = 3 ETanP(1) = 1 ETanP(2) = 0 VetPoints(0) = 0.6 VetPoints(1) = 0.9 VetPoints(2) = 0 VetPoints(3) = 4.5 VetPoints(4) = 6 VetPoints(5) = 0 VetPoints(6) = 12 VetPoints(7) = 1 VetPoints(8) = 0

Set SpLinObj = ThisDrawing.ModelSpace.AddSpline(VetPoints, STanP, ETanP) 14.4.7.8创建剖面线

剖面线是以某种图案按一定的方式填充图形中的指定区域的对象。在VBA应用程序中创建剖面线的过程通常是这样的:首先创建Hatch对象,然后为其指定外部回路,也就是剖面线最外层边界;最后指定要绘制剖面线的区域。要创建Hatch对象,需要使用AddHatch方法,该方法需要三个参数,分别设置Hatch对象的图案类型、图案名称和关联性。使用AddHatch方法最重要的是构建一个封闭的边界,例如编写应用程序绘制“喷射混凝土支护巷道断面图”,其中喷射混凝土的图示表示中需要使用Hatch方法,在构建封闭区域时较为麻烦。

1.剖面线的关联性

与直接使用AutoCAD绘制剖面线一样,用户的VBA程序也可以创建关联式或者非关联式的剖面线。关联式剖面线与它们的边界是相互联系的,在边界修改时剖面线也自动更新;而非关联式剖面线与边界是相互独立的。关联性是在剖面线创建时设置的,一旦创建剖面线后,用户可以删除关联性,但是不能再创建关联性。

要创建关联式剖面线,需要在使用AddHatch方法时,将它的第三个参数(Associativity)设置为TRUE,如果要创建非关联式剖面线,则需要将第三个参数设置为FLASE。

2.剖面线图案类型

用图案填充区域可以使用AutoCAD提供的实体填充和标准的预定义的剖面线图案,也可以使用定制的图案。在使用AddHatch方法时,第一个参数即是指定剖面线图案的类型。该参数有三个常数可选:

? AcHatchPatternTypePredefined:使用AutoCAD提供的定义在acad.pat文件中的图案; ? AchatchPatternTypeUserDefined:使用当前线型定义的剖面线的图案;

? AcHatchPatternTypeCustomDefined:使用用户定义的PAT文件中的图案。 3.剖面线图案名称

在使用AutoCAD方法时,第二个参数即是指定剖面线图案的名称。该名称在所选的图案类型中必须是有效的名称。 14.4.7.9定义剖面线边界

在创建了Hatch对象后,就可以添加剖面线的边界。剖面线的边界可以是直线、弧、圆、二维多段线等,以及多个对象的组合。

第一个添加的边界必须是最外侧边界,它定义了剖面线的最外面范围。要加入最外侧边界,需要使用剖面线对象的AppendOuterLoop方法。在定义最外侧边界线后,可以继续加入内部世界,这时需要使用剖面线对象的AppendInnerLoop方法。

AppendOuterLoop方法和AppendInnerLoop方法均需要一个参数,该参数是构成回路的图形对象数据矩阵。内部边界定义的是剖面线内孤立的对象,称为孤岛。Hatch对象如何处理这些岛是根据剖面线对象的HatchStyle属性的设置值而定。HatchStyle属性可以设置的值及描述如表14-2所示。

表14-2 剖面线样式

HatchStyle Normal

描述

指定标准样式或正常。此样式由最外面区域边界向内创建剖面线。如果AutoCAD碰到内部边界,会关闭剖面线,直到碰到另一个边界。

Outer Ignore

填满最外面区域。此样式也是从区域最外边界向内创建剖面线,但是一旦遇到内部边界即关闭剖面线,不再向里填充。 忽略内部边界。此样式使剖面线通过所有的内部对象。

当完成定义剖面线后,必须要先计算后才能显示,这需要执行Evaluate方法。下面的应

用程序是在模型空间中绘制关联的剖面线。

Dim HatchObj As AcadHatch Dim PatternName As String Dim PatternType As Long

Dim PolyObj2(0 To 0) As AcadEntity Dim VetPoint2(0 To 14) As Double '定义多段线顶点的图案名称 VetPoint2(0) = 50 VetPoint2(1) = 50 VetPoint2(2) = 0 VetPoint2(3) = 80 VetPoint2(4) = 50 VetPoint2(5) = 0 VetPoint2(6) = 80 VetPoint2(7) = 60 VetPoint2(8) = 0 VetPoint2(9) = 50 VetPoint2(10) = 60 VetPoint2(11) = 0 VetPoint2(12) = 50 VetPoint2(13) = 50

VetPoint2(14) = 0 PatternName = \PatternType = 0 '创建多段线

Set PolyObj2(0) = ThisDrawing.ModelSpace.AddPolyline(VetPoint2) '创建剖面线对象

Set HatchObj = ThisDrawing.ModelSpace.AddHatch(PatternType, PatternName, True) '给剖面线对象赋边界

HatchObj.AppendOuterLoop (PolyObj2) HatchObj.Evaluate

14.4.8编辑图形对象

14.4.8.1偏移对象

如果要偏移对象,需要使用Offset方法。对象的Offset方法需要一个重要的参数(距离值)。如果距离值为正值,则向外偏移绘制一个较大的曲线,即新对象的曲率半径比原对象的大;如果距离是负值,那么AutoCAD会以原对象偏移绘制出一个“较小”的曲线,也就是新对象曲率半径更小;如果距离值无效,则会返回一个错误。

下面的程序先创建一条多段线和一个圆,然后偏移这两个对象。 Dim CircleObj As AcadCircle Dim CenP(0 To 2) As Double Dim R As Double

Dim PLineObj As AcadLWPolyline Dim PLPoints(0 To 11) As Double CenP(0) = 30: CenP(1) = 30 R = 10

PLPoints(0) = 30: PLPoints(1) = 30 PLPoints(2) = 31: PLPoints(3) = 41 PLPoints(4) = 22: PLPoints(5) = 22 PLPoints(6) = 35: PLPoints(7) = 32 PLPoints(8) = 37: PLPoints(9) = 39 PLPoints(10) = 33: PLPoints(11) = 32

Set CircleObj = ThisDrawing.ModelSpace.AddCircle(CenP, R)

Set PLineObj = ThisDrawing.ModelSpace.AddLightWeightPolyline(PLPoints) PLineObj.Closed = True '偏移多段线和圆

Dim OffsetCircle As Variant Dim OffsetPline As Variant OffsetCircle = CircleObj.Offset(2.5) OffsetPline = PLineObj.Offset(1) 14.4.8.2镜像对象

镜像对象需要使用Mirror方法。与AutoCAD中的镜像不同,这个方法会保留原来的对象。如果要删除原来的对象,需要另外使用Erase方法。

Mirror方法需要两个坐标参数。这两个坐标值定义镜像线的端点,对称于此镜像线绘制

出对象的副本。在下面的程序中先创建一条多段线,然后镜像该多段线。

Dim PlineObj As AcadLWPolyline Dim PLPoint(0 To 7) As Double PLPoint(0) = 0: PLPoint(1) = 0 PLPoint(2) = 1000: PLPoint(3) = 0 PLPoint(4) = 1000: PLPoint(5) = 1000 PLPoint(6) = 0: PLPoint(7) = 1000

Set PlineObj = ThisDrawing.ModelSpace.AddLightWeightPolyline(PLPoint) PlineObj.Closed = True PlineObj.Update

Dim MirrP1(0 To 2) As Double Dim MirrP2(0 To 2) As Double MirrP1(0) = 0 MirrP1(1) = -50 MirrP1(2) = 0 MirrP2(0) = 10 MirrP2(1) = -50 MirrP2(2) = 0

PlineObj.Mirror MirrP1, MirrP2 14.4.8.3阵列对象 1.环形阵列

所有的图形都可以进行环形阵列,如果要创建环形阵列,需要使用该对象提供的

ArrayPolar方法,该方法需要三个参数。环形阵列创建的对象数目、阵列角度和阵列的中心点坐标。其中对象的数目必须是大于1的正整数;阵列角度为非0的数值,单位是弧度,正值为逆时针阵列,负值则为顺时针阵列,如果角度等于0,则会产生错误;中心点是包含三个单精度数的Variant数据阵列,这些单精度代表指定环形阵列中心点的三维WCS坐标值。

AutoCAD自动计算阵列中心点到原来对象上的参考点的距离。VBA的环形阵列方法ArrayPolar与AutoCAD的Array命令的区别在于它不支持阵列操作时旋转对象。

下面的程序先创建一个椭圆,然后对椭圆进行环形阵列,共创建10个椭圆,其中环形阵列的基点为(300,40,0),阵列角度为270°。

Dim ElliseObj As AcadEllipse Dim EllCenP(0 To 2) As Double Dim EllMajAxisP(0 To 2) As Double Dim EllAxisScale As Double Dim RotateP(0 To 2) As Double Dim ArrayNumber As Integer Dim ArrayAngle As Double Dim ArrayResult As Variant EllCenP(0) = 20 EllCenP(1) = 40 EllCenP(2) = 0

EllMajAxisP(0) = 25 EllMajAxisP(1) = 40 EllMajAxisP(2) = 0

搜索更多关于: AutoCAD二次开发(VBA) 的文档
AutoCAD二次开发(VBA).doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
本文链接:https://www.diyifanwen.net/c8oftt0btz997tl37ll5s_5.html(转载请注明文章来源)
热门推荐
Copyright © 2012-2023 第一范文网 版权所有 免责声明 | 联系我们
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ:xxxxxx 邮箱:xxxxxx@qq.com
渝ICP备2023013149号
Top