AutocadVBA初级教学文章(第九课创建选择集)

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

1.在创建对象的同时可以直接引用.以前的例程中已经做过多次了,现在复习一下,看例程:先随机画300个圆,在画圆时直接引用,然后再把这些圆根本大小修改颜色.Subc300()Dimmyselect(0To300)AsAcadEntity'定义选择集数组Dimpp(0To2)AsDouble'圆心坐标Fori=0To300'循环300次pp(0)=3000*Rnd:pp(1)=3000*Rnd:pp(2)=0'设置圆心坐标Setmyselect(i)=ThisDrawing.ModelSpace.AddCircle(pp,Rnd*30+1)'画不同大小的圆NextiFori=1To300Ifmyselect(i).Radius10Then'判断圆的直径是否大于10myselect(i).color=Int(255*Rnd+1)'大圆颜色改为随机数Elsemyselect(i).color=0'小圆改为白色EndIfNextiZoomExtents'缩放到显示全部对象EndSubpp(0)=3000*Rnd:pp(1)=3000*Rnd:pp(2)=0这一行实际上应该是三条语句,用三行合并为一行,用冒号分开rnd是随机数函数,它的数值为0-1之间的小数,3000*rnd得到的数值就是在0-3000之间的随机数Setmyselect(i)=ThisDrawing.ModelSpace.AddCircle(pp,Rnd*30+1)这条语句的作用是以pp点坐标为圆心,画一个圆,半径是1-30之间的随机数,赋值给myselect选择集.提标用户在屏幕中选取选择语句这样写:Setsset=ThisDrawing.SelectionSets.Add(ss1),其中”ss1”是一个选择集名称,这个参数可以随意写一个,注意不要重复就可以了.下面的例程是让用户选择对象,然后把选中的对象改为绿色,最后把选择集删除Submysel()DimssetAsAcadSelectionSet'定义选择集对象DimelementAsAcadEntity'定义选择集中的元素对象Setsset=ThisDrawing.SelectionSets.Add(ss1)'新建一个选择集sset.SelectOnScreen'提示用户选择ForEachelementInsset'在选择集中进行循环element.color=acGreen'改为绿色Nextsset.Delete'删除选择集EndSub3.选择全部对象用select方法,参数为acSelectionSetAll,看例程,这个程序选择全部对象,显示选中的对象,并计算对象数.Suballsel()Dimsel1AsAcadSelectionSet'定义选择集对象Setsel1=ThisDrawing.SelectionSets.Add(s)'新建一个选择集Callsel1.Select(acSelectionSetAll)'全部选中sel1.Highlight(True)'显示选择的对象sco=sel1.Count'计算选择集中的对象数MsgBox选中对象数:&CStr(sco)'显示对话框EndSub3.运用select方法上面的例题已经运用了select方法,下面讲一下select的5种选择方式:1:择全部对象(acselectionsetall)2.选择上次创建的对象(acselectionsetlast)3.选择上次选择的对象(acselectionsetprevious)4.选择矩形窗口内对象(acselectionsetwindow)5.选择矩形窗口内以及与边界相交的对象(acselectionsetcrossing)还是看代码来学习.其中选择语句是:Callsel1.Select(Mode,p1,p2)Mode已经定义为5,也就是选择矩形窗口内以及与边界相交的对象,p1和p2是两个点坐标,Subselnew()Dimsel1AsAcadSelectionSet'定义选择集对象Dimp1(0To2)AsDouble'坐标1Dimp2(0To2)AsDouble'坐标2p1(0)=0:p1(1)=0:p1(2)=0'设置坐标1p2(0)=300:p2(1)=300:p2(2)=0'设置坐标1Mode=5'把选择模式存入mode变量中Setsel1=ThisDrawing.SelectionSets.Add(sel3)'新建一个选择集Callsel1.Select(Mode,p1,p2)'选择对象sel1.Highlight(ture)'显示已选中的对象EndSubCADVBA过滤器、选择集分享我看到过这个问题有好几次了,当时只是把代码发给了个人,现在把这些代码贴出来,建立一个专题,加以自己的理解进行说明,希望能对大家在工作中遇到选择集和过滤器问题有所帮助以供大家使用。这种方法建立选择集和过滤器我使用过千百遍,未出现过任何异常。'——————————————————————————————————'名称:BuildFilter'作者:罗简单'日期:2008-3-11'功能:创建过滤器'——————————————————————————————————PublicSubBuildFilter(TypeArray,DataArray,ParamArraygCodes())DimfType()AsInteger,fData()DimindexAsLong,iAsLongindex=LBound(gCodes)-1Fori=LBound(gCodes)ToUBound(gCodes)Step2index=index+1ReDimPreservefType(0Toindex)ReDimPreservefData(0Toindex)fType(index)=CInt(gCodes(i))fData(index)=gCodes(i+1)NextTypeArray=fType:DataArray=fDataEndSub'——————————————————————————————————'名称:CreateSelectionSet'作者:罗简单'日期:2008-3-11'功能:创建选择集'——————————————————————————————————PublicFunctionCreateSelectionSet(OptionalssNameAsString=ss)AsAcadSelectionSetDimssAsAcadSelectionSetOnErrorResumeNextSetss=ThisDrawing.SelectionSets(ssName)IfErrThenSetss=ThisDrawing.SelectionSets.Add(ssName)ss.ClearSetCreateSelectionSet=ssEndFunction'创建个过程来调用过滤器和选择集SubTestBuildFilterAndCteSset()'定义过滤器DimpType,pDataBuildFilterpType,pData,0,LWPOLYLINE,8,JZD'注意:这里的0与8是通过命令(entget(car(entsel)))获取的对象基本'特性,例如:'**********************************************************************************'((-1.图元名:7ef83b28)(0.LWPOLYLINE)(330.图元名:'7ef81cc0)(5.425)(100.AcDbEntity)(67.0)(410.Model)(8.'JZD)(6.Continuous)(100.AcDbPolyline)(90.2)(70.128)(43.0.0)'(38.0.0)(39.0.0)(1092.501135.6905)(40.0.0)(41.0.0)(42.0.0)(10'208.946102.652)(40.0.0)(41.0.0)(42.0.0)(2100.00.01.0))'**********************************************************************************'其中比较常用的(0.LWPOLYLINE)表示对象类型;(8.JZD)表示对象所在层'所以还可以扩展或收缩过滤器,如下'BuildFilterpType,pData,0,LWPOLYLINE:建立图上所有的多段线过滤器'BuildFilterpType,pData,0,LWPOLYLINE,8,JZD:建立图层是JZD的多段线过滤器'BuildFilterpType,pData,0,LWPOLYLINE,8,JZD,62,3:建立图层是JZD、颜色为绿色的多段线过滤器'定义选择集DimssetAsAcadSelectionSetSetsset=CreateSelectionSet'根据以上指定的过滤器建立选择集sset.Clearsset.SelectacSelectionSetAll,,,pType,pData'这里可以通过Select、SelectAtPoint、SelectByPolygon、SelectOnScreen等方法'配合Mode和Point1、Point2建立更加用户化的选择集EndSub'当在一个过程中连续使用两个以上的选择集时,需要重新定义选择集,如下:'创建空间选择集的函数2PublicFunctionCreateSelectionSet2(OptionalssNameAsString=ss2)AsAcadSelectionSetDimss2AsAcadSelectionSetOnErrorResumeNextSetss2=ThisDrawing.SelectionSets(ssName)IfErrThenSetss2=ThisDrawing.SelectionSets.Add(ssName)ss2.ClearSetCreateSelectionSet2=ss2EndFunction'创建个过程来调用过滤器和选择集SubTestBuildFilterAndCteSset()'定义过滤器DimpType,pDataBuildFilterpType,pData,0,LWPOLYLINE,8,JZD'注意:这里的0与8是通过命令(entget(car(entsel)))获取的对象基本'特性,例如:'**********************************************************************************'((-1.图元名:7ef83b28)(0.LWPOLYLINE)(330.图元名:'7ef81cc0)(5.425)(100.AcDbEntity)(67.0)(410.Model)(8.'JZD)(6.Continuous)(100.AcDbPolyline)(90.2)(70.128)(43.0.0)'(38.0.0)(39.0.0)(1092.501135.6905)(40.0.0)(41.0.0)(42.0.0)(10'208.946102.652)(40.0.0)(41.0.0)(42.0.0)(2100.00.01.0))'**********************************************************************************'其中比较常用的(0.LWPOLYLINE)表示对象类型;(8.JZD)表示对象所在层'所以还可以扩展或收缩过滤器,如下'BuildFilterpType,pData,0,LWPOLYLINE:建立图上所有的多段线过滤器'BuildFilterpType,pData,0,LWPOLYLINE,8,JZD:建立图

1 / 12
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功