请教一个关于面域的属性引用问题
<p>Public Sub region()<br/>Dim curves(1) As AcadEntity<br/>Dim cp(2) As Double<br/>Dim r As Double<br/>Dim sn, en As Double<br/>cp(0) = 5#<br/>cp(1) = 3#<br/>cp(2) = 0#<br/>r = 2#<br/>sn = 0<br/>en = 3<br/>Set curves(0) = ThisDrawing.ModelSpace.AddArc(cp, r, sn, en)<br/>Set curves(1) = ThisDrawing.ModelSpace.AddLine(curves(0).StartPoint, curves(0).EndPoint)<br/>Dim regionobj As Variant<br/>regionobj = ThisDrawing.ModelSpace.AddRegion(curves)<br/>regionobj(0).color = acRed<br/>Dim pt As AcadPoint<br/>Set pt = ThisDrawing.ModelSpace.AddPoint(regionobj.Centroid)<br/>pt.color = acBlue<br/>ZoomExtents<br/>End Sub<br/>我自己认为错误的原因是:Dim regionobj As Variant,而我后面引用regionobj的Centroid属性应该要求regionobj是acadregion才对吧,我不知道怎么样才能把Variant转换为acadregion类型<br/></p> Public Sub region()Dim curves(1) As AcadEntity
Dim cp(2) As Double
Dim r As Double
Dim sn, en As Double
cp(0) = 5#
cp(1) = 3#
cp(2) = 0#
r = 2#
sn = 0
en = 3
Set curves(0) = ThisDrawing.ModelSpace.AddArc(cp, r, sn, en)
Set curves(1) = ThisDrawing.ModelSpace.AddLine(curves(0).StartPoint, curves(0).EndPoint)
Dim regionobj As Variant
regionobj = ThisDrawing.ModelSpace.AddRegion(curves)
regionobj(0).color = acRed
Dim Myregion As AcadRegion
Set Myregion = ThisDrawing.ModelSpace.Item(ThisDrawing.ModelSpace.Count - 1)
Dim pt0 As Variant
pt0 = Myregion.Centroid
Dim pt1(0 To 2) As Double
pt1(0) = pt0(0): pt1(1) = pt0(1): pt1(2) = 0
Dim pt As AcadPoint
Set pt = ThisDrawing.ModelSpace.AddPoint(pt1)
pt.color = acBlue
ZoomExtents
End Sub
谢谢了。现在我想把点变为+的形式,查了一下帮助,将PDMODE的值改为2就可以了,可是PDMODE是CAD的系统变量,请问怎么样在VBA中调用CAD的系统变量呢?我试了几次都出错了。 ThisDrawing.GetVariable "PDMODE" '获取<br/>ThisDrawing.SetVariable "PDMODE", 2 '设置 <p>谢谢版主了.又遇到类似问题了,需要你的帮助.</p><p>Sub Example_AddPolyline()<br/> <br/> Dim plineObj As AcadPolyline<br/> Dim pt1 As Variant<br/> Dim pt2 As Variant<br/> pt1 = ThisDrawing.Utility.GetPoint(, "get point")<br/> pt2 = ThisDrawing.Utility.GetPoint(, "get point")<br/> <br/> Dim points(0 To 5) As Variant<br/> points(0) = pt1(0)<br/> points(1) = pt1(1)<br/> points(2) = 0<br/> points(3) = pt2(0)<br/> points(4) = pt2(1)<br/> points(5) = 0<br/> <br/> ' Create a Polyline object in model space<br/> Set plineObj = ThisDrawing.ModelSpace.AddPolyline(points)<br/> ZoomExtents<br/>End Sub</p><p>我自己认为出的错是:AddPolyline(points)要求points是OCS坐标值表,而由GetPoint方法得到的点是3D WCS坐标值,由3D WCS坐标值向OCS坐标值可以用TranslateCoordinates方法,我按照帮助文件提供的方法试了一下,还是说Set plineObj = ThisDrawing.ModelSpace.AddPolyline(points)是无效的调用过程.麻烦你帮我看一到底是什么问题.<br/><br/></p> <p> Dim points(0 To 5) As Variant定义错误,应该</p><p>Dim points(0 To 5) As Double<br/></p> <p>Sub myl()<br/>Dim p1 As Variant '申明端点坐标<br/>Dim p2 As Variant<br/>Dim al() As Double '声明一个动态数组<br/>Dim templ As AcadEntity<br/>p1 = ThisDrawing.Utility.GetPoint(, "输入点:") '获取点坐标<br/>p1(2) = 0 '将Z坐标值赋予点坐标中</p><p>ReDim al(0 To 2) '定义动态数组<br/>al(0) = p1(0)<br/>al(1) = p1(1)<br/>al(2) = 0</p><p>On Error GoTo Err_Control '出错陷井<br/>Do '开始循环<br/> p2 = ThisDrawing.Utility.GetPoint(p1, vbCr & "输入下一点:") '获取下一个点的坐标<br/> <br/> p2(2) = 0 '将Z坐值赋予点坐标中<br/> <br/> lub = UBound(al) '获取当前l数组中元的元素个数<br/> ReDim Preserve al(lub + 3)<br/> For i = 1 To 3<br/> al(lub + i) = p2(i - 1)<br/> Next i<br/> <br/> Set templ = ThisDrawing.ModelSpace.AddPolyline(al) '画多段线<br/> p1 = p2 '将第二点的端点保存为下一条直线的第一个端点坐标<br/>Loop<br/>Err_Control:<br/>templ.Closed = True</p><p>Dim regionobj As Variant<br/>regionobj = ThisDrawing.ModelSpace.AddRegion(templ) '转化为面域<br/>regionobj(0).color = acRed</p><p>Dim Myregion As AcadRegion<br/>Set Myregion = ThisDrawing.ModelSpace.Item(ThisDrawing.ModelSpace.Count - 1)<br/> <br/>Dim pt0 As Variant<br/>pt0 = Myregion.Centroid '引用Centroid属性</p><p>Dim pt1(0 To 2) As Double<br/>pt1(0) = pt0(0): pt1(1) = pt0(1): pt1(2) = 0</p><p>Dim pt As AcadPoint<br/>Set pt = ThisDrawing.ModelSpace.AddPoint(pt1)<br/>pt.color = acBlue<br/>ThisDrawing.SetVariable "PDMODE", 2<br/>ThisDrawing.SetVariable "PDSIZE", 0.1 '调用系统变量<br/>ZoomExtents<br/>End Sub</p><p>版主帮我看一下是什么问题,问了你这么多问题我以为就解决了,可是到最后还是出现了问题,看来还经继续学习.</p> <p>我昨天晚上回去想了一下,原来是变量templ应该定义为数组才对,因为AddRegion(templ)方法要求templ为数组列表。谢谢版主对我前面几个问题的帮助,同时自己也感觉到有小小成就。</p> 我在使用中经常遇到Variant的问题,解决方法是用debug.print Typename(aa),判断是何种数据类型,如何是Variant, debug.print aa(0),aa(1)获取数据值.
页:
[1]