处理大量信息
我正在使用visual studio 2005并检查活动autocad(2007)文件中多段线对象的区域。我使用获取项目属性。但是,当模型空间中的项数较大(如10000+)时,使用这种方法会使程序运行非常慢。除了之外,是否有一些功能可以在屏幕上获取项目,或者有什么快速的方法可以获取项目属性? Visual Studio 2005通常意味着使用托管ARX(.NET API),尽管使用COM互操作(尤其是从进程外可执行文件)是相当常见的。不过,原始帖子中的代码行具有熟悉的VBA外观。
从哪个方向连接到AutoCAD? 我没有这样的知识来回答你。但我想你可以根据我的代码来决定。这是我的软件中的示例代码:(visual studio 2005代码)
将MyAcad设置为Autodesk。AutoCAD。互操作。AcadApplication公司
将此图形设置为Autodesk。AutoCAD。互操作。AcadDocument公司
Dim itemAd AsString
Dim i,cn AsInteger公司
尺寸a,KNk(1)为双精度
将item1设置为Autodesk。AutoCAD。互操作。常见的AcadObject公司
MyAcad=CType(GetObject(,“AutoCAD.Application.17”),Autodesk。AutoCAD。互操作。AcadApplication)
此图纸=MyAcad。活动文档
cn=本图纸。模型空间。计数
i=0
a=0
道希尔(i
项目1=本图纸。模型空间。项目(i)
itemAd=item1。对象名称
如果itemAd=“AcDbPolyline”或itemAd=“AcDbCircle”或itemAd=“acdbeliple”,则
如果itemAd=“AcDbPolyline”,则
KNk(0)=第1项。坐标(0)
KNk(1)=第1项。坐标(1)
其他的
KNk(0)=第1项。中心(0)
KNk(1)=第1项。中心(1)
EndIf
a=a+项目1。面积()
EndIf
i=i+1
环
MsgBox(a) 这:-
将item1设置为Autodesk。AutoCAD。互操作。常见的AcadObject公司
MyAcad=CType(GetObject(,“AutoCAD.Application.17”),Autodesk。AutoCAD。互操作。AcadApplication)
表示您正在使用COM,因此您正在有效地使用ActiveX,类似于VBA。 要加快速度,我应该做什么?
对于30000个对象,它大约需要6-7分钟。
我正在做的就是这样。我将在程序唯一命名的新层中创建一些矩形。
程序计算这些矩形内的多段线、圆和椭圆。我可以缩放到这些矩形。如果我能在屏幕上看到这些项目,那么我不需要处理30000个对象,而只需要在屏幕上看到100个对象。它将大大提高速度。有没有办法只在屏幕上获取项目?? 图形变量VIEWSIZE存储当前视口中显示的视图高度,以图形单位测量。
.. 结合VIEWCTR
你可以利用这些。。。但应该有一个更简单的方法。。
也许可以保存一个临时视图,然后对其维度进行干涉。
... 但应该还有更简单的方法
看看AcadViewportClass
Autodesk。AutoCAD。互操作。常见的AcadViewportClass
下弯角
右上角
[已添加]
在联机网络帮助中查找ActiveViewport。。AutoCAD。NET开发者指南 在VBA中运行它,通常比VB外部连接快10倍,因为它会在AutoCAD的内存空间中运行。
我认为您也可以遍历polyline集合,而不是整个图形,或者创建一个虚拟图形并转储所有非polyline,
但是,请再次尝试通过AutoCAD的VBAIDE内部运行相同的代码 先清除图形,然后尝试。。。。。。。。。。 我想使程序非常精确和可用。事实上,删除除多段线以外的所有其他对象是一个很好的解决方案,但我不希望用户做这样的事情。我想到的是,我正在使用选择集,使用按窗口选择/多边形窗口方法,我只在该对象内获得多段线、圆和椭圆。所以这使得我的计算速度和我的预期一样快。
我要试试。谢谢你的建议
我的代码中的示例:
dim altsx(2),ustsx(2)为双精度
oSel=此图纸。选择集。添加(“IMRAPKSecimi”)
oSel。选择(Autodesk.AutoCAD.Interop.Common.AcSelect.acSelectionSetWindow、altsx、ustsx)
oSel中的ForEach item1
itemAd=item1。对象名称
如果itemAd=“AcDbPolyline”或itemAd=“AcDbCircle”或itemAd=“acdbeliple”,则
对于KatmanNo=0到KtmnSy
KatmanAd=KatmanAdLB。项目。项目(KatmanNo)
如果是第1项。图层=KatmanAd Then
Alan(KatNo,KatmanNo)=Alan(KatNo,KatmanNo)+项目1。面积()
......
页:
[1]