修改块时需要的帮助
这项任务看起来相对简单,但因为我对Autocad如此陌生,更重要的是如何与VB交互。Net与AutoCad一起使用时,我看得越多,就越感到困惑。我有一个文件,其中包含多个具有各种属性的块。我可以打开它,在vb中将其另存为不同的文件名。net,但我不知道如何修改块中的属性。
我想做的是:打开文件,将数据插入属性,将其另存为不同的文件名,再次修改数据,将其另存为不同的文件名,等等
谢谢你的帮助,即使你只是给我指出了正确的方向。我的眼睛看不清我能找到的关于这个主题的一切。 欢迎来到CADTutor!
您要做的是迭代目标文档数据库中的每个BlockReference,然后迭代所述BlockReference的AttributeCollection对象,一旦通过GetObject()方法在事务中打开,将每个类型转换ObjectId修改为AttributeReference。
这可能有助于:http://help.autodesk.com/view/ACD/2015/ENU/?guid=GUID-BA69D85A-2AED-43C2-B5B7-73022B5F28F8
此外,您也可以考虑将图形作为侧数据库打开,而不是在编辑器中实际打开。性能方面也快得多。
如果您是新手,请单独使用。NET开发,然后您可能会考虑学习C#而不是VB,因为您将发现更多的示例代码可以帮助您学习。
干杯 如果你没有被锁定。NET,那么这里有这么多VLISP或纯lisp的示例代码。只需询问并发布一个dwg,这样代码就可以根据需要进行定制。 谢谢你提供的信息。无论出于何种原因,当我从你给我的链接中插入代码时,它编译得很好,但不会运行代码。它只是跳过它,好像有什么不对劲。没有显示错误,只是没有运行它。
它似乎来自代码引用的任何时候:
Dim acCurDb As Autodesk.AutoCAD.DatabaseServices.Database
acCurDb = Application.DocumentManager.MdiActiveDocument.Database
我在项目中包含了所有import语句,正如我所说的,在编译时或运行时(我可以看到)不会生成任何错误。
我已经把范围缩小到MdiActiveDocument,只要插入一个包含这个的语句,代码就会编译得很好,不会执行它。
不幸的是,我被限制在VB中。网
需要更多信息。
您开发的AutoCAD版本是什么(您在个人资料中列出了2014)?
您使用的是什么版本的Visual Studio?
你在使用什么环境?
您是否为适当的环境编译/调试?
你在用吗。NET或COM API(你只发布了两行.NET)?
如果使用COM API,您是否延迟绑定?
您是否下载并安装了相应的ObjectARX SDK。网络向导?
你用的是什么代码?
编译后,您是通过Autoloader、Registry Loader还是通过NETLOAD命令手动加载程序集?
您是否测试了MdiActiveDocument!=null(同样,取决于版本)? 您开发的AutoCAD版本是什么(您在个人资料中列出了2014)?是的,2014 64位完整版本不是LT
您使用的是什么版本的Visual Studio?2010年快车
你在使用什么环境?windows 7 64位
您是否为适当的环境编译/调试?对
你在用吗。NET或COM API(你只发布了两行.NET)。网
如果使用COM API,您是否延迟绑定?
您是否下载并安装了相应的ObjectARX SDK。网络向导?是的,我相信是的,这是一个来自该项目参考标签的屏幕截图
你用的是什么代码?张贴在下面。代码的其余部分目前已注释掉,以尝试隔离问题的来源。上一个函数用于打开autocad文档。然后我等待一段时间以确保所有内容都已加载,然后继续下面的代码。通过这样做,我现在可以让它生成一个错误,其中它声明无法找到dll。
Dim ed As Editor = Application.DocumentManager.MdiActiveDocument.Editor
Dim doc As Document = Application.DocumentManager.MdiActiveDocument
下面是我现在得到的错误:
我仔细检查了一下,文件确实在应该放的地方。
编译后,您是通过Autoloader、Registry Loader还是通过NETLOAD命令手动加载程序集?通过一行一行地走来运行它。
您是否测试了MdiActiveDocument!=null(同样,取决于版本)?没有。基本上是从autodesk的网站复制和粘贴代码。
是的,2014 64位完整版本不是LT
</blockquote>
非常感谢。
2010年快车
</blockquote>
Visual Studio 2010 Express为每个C++、C#和VB提供了独立的应用程序,每个应用程序都有一个max。NET 4.0框架(如果内存可用)。。。但是,Autodesk在此建议您在为2014年开发时使用Visual Studio 2012(Express ok)。
windows 7 64位
</blockquote>
非常感谢。
对
</blockquote>
你确定吗?解决方案配置和解决方案平台下拉菜单设置为什么?
.网
</blockquote>
那么,为什么下面的屏幕截图显示了互操作(COM)程序集引用?
是的,我相信是的,这是一个来自该项目参考标签的屏幕截图。
https://www.cadtutor.net/forum/attachment.php?attachmentid=50577&d=1409154597
</blockquote>
在上面的链接中,下载并安装适当版本的ObjectARX SDK(您似乎拥有),然后。NET向导。
张贴在下面。代码的其余部分目前已注释掉,以尝试隔离问题的来源。上一个函数用于打开autocad文档。然后我等待一段时间以确保所有内容都已加载,然后继续下面的代码。通过这样做,我现在可以让它生成一个错误,其中它声明无法找到dll。
Dim ed As Editor = Application.DocumentManager.MdiActiveDocument.Editor
Dim doc As Document = Application.DocumentManager.MdiActiveDocument
下面是我现在得到的错误:
https://www.cadtutor.net/forum/attachment.php?attachmentid=50578&d=1409155234
我仔细检查了一下,文件实际上在应该放的地方。
</blockquote>
这与您在上面发布的代码相同,并且同样含糊不清。
如果我们看不到代码,就无法帮助您解决代码损坏的问题。所以,除非只是问一个一般性的问题,并期待什么,但在最好的娱乐意见的回应,请不要含糊其辞。
也就是说。。。。
打开“AutoCAD文档”的功能是什么?
同样,您没有在这里或下面指定如何“加载所有内容”。。。您要么从AutoCAD process instance(插件)中加载代码,要么从AutoCAD外部运行独立应用程序(.exe);既然你还没有发布你的代码,那是哪一个?
通过一行一行地走来运行它。
</blockquote>
这不是一个有效的响应,因为您无法逐行遍历尚未加载的内容(如果您试图调试插件,但尚未发布代码,因此我不知道您是否正在为自己编写插件或独立可执行文件?);重新阅读之前的评论。
没有。基本上是从autodesk的网站复制和粘贴代码。
</blockquote>
的第一条规则:[永远不要假设复制的样例代码可以编译]。 那么,为什么下面的屏幕截图显示了互操作(COM)程序集引用?
这些是。网看看类型列。它们附带objectarx包。
我想我明白我的困惑所在了。我试图使用netload命令从autocad中以简单的windows窗体而不是类库的形式运行此代码。
以下是打开autocad和我在最初试用中使用的图形的代码:
Dim AcadDoc As Autodesk.AutoCAD.Interop.AcadDocument
Dim AcadApp As Autodesk.AutoCAD.Interop.AcadApplication
AcadApp = New Autodesk.AutoCAD.Interop.AcadApplication
AcadApp.Visible = True
AcadDoc = AcadApp.Documents.Open("c:\projects\acad\mag.dwg")
不确定是否有一种方法可以在Autocad之外实现我想要的功能。但是,如果我能从netload命令使其工作,这对我来说也会很好。特别是因为这只是我想帮助加快一项非常繁琐的任务。
我知道你没有看到它;这就是为什么我试图帮你指出正确的方向,这显然需要足够的信息(否则会浪费我们的时间)。
我还感谢您最终澄清了您要做的事情(Windows窗体应用程序)。
您在不知不觉中忽略的是,ObjectARX SDK同时提供了这两种功能。NET和COM程序集。。。前者位于。。\inc \目录,而后者位于其中一个。。\inc-x64\或。。\inc-win32目录作为COM依赖于环境(网络在32位和64位环境中都工作,因此“AnyCPU”等)。
您可以在AutoCAD内外成功使用COM,但如果确定了这一点,则会对您观察到的行为的潜在解决方案提出不同的建议。
这是COM代码,而不是。NET,因为只有COM使用互操作程序集引用。。。根据上面的描述,这段代码还需要编译为64位程序集,因为您正在Win7x64中工作。
我几乎所有的AutoCAD开发都是为了插件,而我过去实现的一点COM,后来都被移植到了。NET的动态关键字和P/Invoke的出现。
现在,您仍然可以在使用Forms应用程序后执行操作,但速度会稍慢,当然比在AutoCAD实例中执行操作要复杂一些。请参阅这篇文章,了解更多关于如何在使用后完成任务的信息。NET API。有关Autoloader的更多信息,请参阅我签名中的链接。
我相信,在你完全按照自己的要求去做之前,你仍然需要从别人那里获取代码,我们很乐意为你提供帮助。。。只需要足够的信息和代码,让我们的时间值得志愿服务。
干杯 我只是想说谢谢你的帮助。我知道提供这些信息需要多少时间。我将回头阅读我之前阅读过的一些文档,但我的思维方式是将其构建为dll,而不是windows应用程序。这样看起来可能更清楚。
再次感谢。
页:
[1]
2