乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
查看: 249|回复: 9

处理大量信息

[复制链接]

5

主题

11

帖子

6

银币

初来乍到

Rank: 1

铜币
25
发表于 2022-7-6 22:58:08 | 显示全部楼层 |阅读模式
我正在使用visual studio 2005并检查活动autocad(2007)文件中多段线对象的区域。
我使用[item1=ThisDrawing.ModelSpace.Item(i)]获取项目属性。但是,当模型空间中的项数较大(如10000+)时,使用这种方法会使程序运行非常慢。除了[item1=ThisDrawing.ModelSpace.item(i)]之外,是否有一些功能可以在屏幕上获取项目,或者有什么快速的方法可以获取项目属性?
回复

使用道具 举报

10

主题

973

帖子

909

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
118
发表于 2022-7-6 23:07:42 | 显示全部楼层
Visual Studio 2005通常意味着使用托管ARX(.NET API),尽管使用COM互操作(尤其是从进程外可执行文件)是相当常见的。不过,原始帖子中的代码行具有熟悉的VBA外观。
 
从哪个方向连接到AutoCAD?
回复

使用道具 举报

5

主题

11

帖子

6

银币

初来乍到

Rank: 1

铜币
25
发表于 2022-7-6 23:13:05 | 显示全部楼层
我没有这样的知识来回答你。但我想你可以根据我的代码来决定。这是我的软件中的示例代码:(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)
回复

使用道具 举报

0

主题

127

帖子

130

银币

限制会员

铜币
-2
发表于 2022-7-6 23:18:38 | 显示全部楼层
这:-
将item1设置为Autodesk。AutoCAD。互操作。常见的AcadObject公司
MyAcad=CType(GetObject(,“AutoCAD.Application.17”),Autodesk。AutoCAD。互操作。AcadApplication)
 
表示您正在使用COM,因此您正在有效地使用ActiveX,类似于VBA。
回复

使用道具 举报

5

主题

11

帖子

6

银币

初来乍到

Rank: 1

铜币
25
发表于 2022-7-6 23:30:40 | 显示全部楼层
要加快速度,我应该做什么?
对于30000个对象,它大约需要6-7分钟。
 
我正在做的就是这样。我将在程序唯一命名的新层中创建一些矩形。
程序计算这些矩形内的多段线、圆和椭圆。我可以缩放到这些矩形。如果我能在屏幕上看到这些项目,那么我不需要处理30000个对象,而只需要在屏幕上看到100个对象。它将大大提高速度。有没有办法只在屏幕上获取项目??
回复

使用道具 举报

0

主题

127

帖子

130

银币

限制会员

铜币
-2
发表于 2022-7-6 23:37:38 | 显示全部楼层
图形变量VIEWSIZE存储当前视口中显示的视图高度,以图形单位测量。
.. 结合VIEWCTR
 
你可以利用这些。。。但应该有一个更简单的方法。。
 
也许可以保存一个临时视图,然后对其维度进行干涉。
 
... 但应该还有更简单的方法
回复

使用道具 举报

0

主题

127

帖子

130

银币

限制会员

铜币
-2
发表于 2022-7-6 23:43:11 | 显示全部楼层
 
看看AcadViewportClass
Autodesk。AutoCAD。互操作。常见的AcadViewportClass
下弯角
右上角
 
 
[已添加]
在联机网络帮助中查找ActiveViewport。。AutoCAD。NET开发者指南
回复

使用道具 举报

0

主题

19

帖子

20

银币

限制会员

铜币
-1
发表于 2022-7-6 23:46:57 | 显示全部楼层
在VBA中运行它,通常比VB外部连接快10倍,因为它会在AutoCAD的内存空间中运行。
我认为您也可以遍历polyline集合,而不是整个图形,或者创建一个虚拟图形并转储所有非polyline,
 
但是,请再次尝试通过AutoCAD的VBAIDE内部运行相同的代码
回复

使用道具 举报

RMS

9

主题

38

帖子

29

银币

初来乍到

Rank: 1

铜币
45
发表于 2022-7-6 23:57:36 | 显示全部楼层
先清除图形,然后尝试。。。。。。。。。。
回复

使用道具 举报

5

主题

11

帖子

6

银币

初来乍到

Rank: 1

铜币
25
发表于 2022-7-7 00:03:43 | 显示全部楼层
我想使程序非常精确和可用。事实上,删除除多段线以外的所有其他对象是一个很好的解决方案,但我不希望用户做这样的事情。我想到的是,我正在使用选择集,使用按窗口选择/多边形窗口方法,我只在该对象内获得多段线、圆和椭圆。所以这使得我的计算速度和我的预期一样快。
我要试试。谢谢你的建议
我的代码中的示例:
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。面积()
......
回复

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

QQ|关于我们|小黑屋|乐筑天下 繁体中文

GMT+8, 2024-11-23 16:10 , Processed in 0.160241 second(s), 72 queries .

© 2020-2024 乐筑天下

联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表