乐筑天下

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

将代码用于AutoCAD和Microsoft应用程序

[复制链接]

26

主题

128

帖子

2

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
231
发表于 2019-9-16 11:45:42 | 显示全部楼层 |阅读模式
我还没有为autoCAD创建一个. NET程序,在此之前我有几个问题。现在,我使用AutoLISP进行AutoCAD电气自动化。除此之外,我还使用微软access和VBA来保存和处理需要绘制电气图纸的数据。我想扩展AutoCAD中数据库的功能和参与度。在此之前,我想知道我是否能在AutoCAD和Microsoft Access中使用dll(或任何等效的)文件。我想保留我的AutoCAD“手动”工具,同时升级到更大的自动化程序。然而,我不想维护做同样事情的多个程序。

本帖以下内容被隐藏保护;需要你回复后,才能看到!

游客,如果您要查看本帖隐藏内容请回复
回复

使用道具 举报

7

主题

100

帖子

7

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
135
发表于 2019-9-16 14:45:38 | 显示全部楼层
不可以,AutoCAD .NET 程序只能在 AutoCAD 内部运行。它称为进程内,或使用 autocad 在运行时使用的相同进程。但是,您可以从同一代码中自动访问。从您的描述中,我不确定您所说的“大型自动化程序”是什么意思,但最好保持基于AutoCAD的架构。如果您确实需要从另一个应用程序在AutoCAD中工作,则仅限于AutoCAD的ActiveX(vba使用)api。
回复

使用道具 举报

69

主题

875

帖子

15

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1146
发表于 2019-9-16 18:31:33 | 显示全部楼层
要添加到57gmc中,最好使用SQLite、MySQL或Microsoft SQL Server数据库。这将意味着在.net中重新编写查询和函数,但至少您将使代码保持最新,并使其保持一致。您还将受益于更好的性能和更大的存储容量
如果每个项目都需要一个db,那么SQLite将是理想的选择,因为它只是一个存储在文件夹中的文件,不需要db服务器等,更容易使用。
回复

使用道具 举报

129

主题

422

帖子

5

银币

中流砥柱

Rank: 25

铜币
936
发表于 2019-9-16 18:46:22 | 显示全部楼层

我的粗略理解是,如果以一种特定的方式完成,.Net有能力跨多个应用程序工作。例如,我可以让.net访问数据库,然后在cad中基于数据库完成操作,反之亦然。我已经做了很多。我访问了cad之外的软件,并使用同一个.net应用程序基于该数据在cad内部执行操作,反之亦然<你应该看看发电机。它将允许您构建连接到各种应用程序或数据库的节点,并为您提供大量处理不同事务的能力。
回复

使用道具 举报

26

主题

128

帖子

2

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
231
发表于 2019-9-16 20:36:25 | 显示全部楼层

澄清一下,我很清楚AutoCAD程序只能在AutoCAD中运行。我想说的是工具可以在不同的层次上运行。然而,这些程序需要能够扩展到更高阶的函数。我举个例子。AutoCAD Electrical中有一个信号交互参考工具。此工具获取信号交叉引用块的wireno属性中的值,并将其与sigcode属性中的值关联起来。有两种类型,源和目标信号代码。AutoCAD electrical将这些数据存储在数据库中。运行信号交叉引用工具时,有三个选项。
1。选择
2。绘制宽度3。项目范围
选择允许您选择一个信号交叉引用块来更新它。
绘图范围工具在活动绘图上运行。
项目范围工具在包含项目所有图形的激活项目上运行。图形既可以关闭也可以打开(它使用objectDBX)
此工具的主要问题是此工具存在大量错误,因为程序中嵌入了三个独立的例程来做同样的事情。“图形范围”工具的行为与“项目范围”工具不同(不正确),它仅选择活动图形。这非常令人愤怒。
我编写程序的方式是用一个函数来完成这项工作。即读取信号代码、查询数据库、获取线号、将线号写入信号交叉引用块。但是,其他工具只是获取数据并将数据传递给这一个功能(拾取、图形范围和项目范围)。我一直用这种方式为AutoCAD electrical编程,就代码维护而言,这是一个巨大的成功(即不需要代码维护)。如果有bug,我修复一次,所有相关的工具都会更新。
我的问题是,当我的程序跨越软件界限时,如AutoCAD Electrical与Microsoft Access。我希望Access能够使用数据库中的基本数据计算PLC寻址并存储该数据,同时AutoCAD Electrical使用该数据创建PLC卡。这只是一个小例子。当我用AutoLISP编写一个函数时,我不想在VBA编写另一个做同样事情的函数。重写这些函数的原因是为了以更少的代码维护和更大的灵活性扩大到更高的自动化水平。
我有一个工具可以插入带有属性键的电机电路。数据库保存了电机回路的每种可能的组合,并在插入后填充回路。只有一个函数执行插入。有两个收集数据的函数。一个是手动插入的对话框。另一个是当更高级的工具调用它时被调用的自动化功能。例如,项目范围的自动化将用ascii文件(由excel中的程序生成)中给出的数据创建整个项目。如果工具坏了,一次修复可以修复两个工具。
此外,我不想在做同样事情的几个函数中发现错误。
所以我将重申这个问题。我可以用AutoCAD和microsoft应用程序都可以访问的语言/编译文件编写函数吗?我知道某些动作,如在图纸中创建对象,只能在AutoCAD中完成,这很好,但是,这是我最不担心的,我需要计算正确的数据来填充这些块。
回复

使用道具 举报

16

主题

506

帖子

6

银币

中流砥柱

Rank: 25

铜币
570
发表于 2019-9-16 22:56:14 | 显示全部楼层
是的,这是可以做到的。 公共代码位于单独的 DLL 中,然后可由其他项目引用。
回复

使用道具 举报

26

主题

128

帖子

2

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
231
发表于 2019-9-17 07:20:45 | 显示全部楼层

如何编写代码才能在AutoCAD和Microsoft Office产品中使用这些函数和对象?
回复

使用道具 举报

4

主题

219

帖子

4

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
238
发表于 2019-9-17 10:03:06 | 显示全部楼层
听起来您的重点是为特定的流程/功能编写一组代码(使用相同的语言或相同的平台,如.NET,这样选择C#或VB.NET的语言就不会成为问题),并在不同的应用程序中使用它们(在您的情况下,主要是AutoCAD和各种MS Office应用程序,Access)
在我看来,您不仅将MS Access用作数据源,还将其用作用户应用程序(因此MS Access中的VBA代码),这就是您希望编写可由AutoCAD和MC Access共享的代码的原因。但是,您没有提供有关在AutoCAD和MS Access中执行何种“相同的操作/过程”的更多详细信息?您在“wireno”、“sigcode”中描述的示例场景都可以在AutoCAD端处理。但我假设在您的工作流程中,AutoCAD使用的数据将由其他应用程序(目前为MS Access的UI)在AutoCAD内部和外部进行操作
基于这些场景,让我们看看您可以做些什么:
1.AutoCAD方面:您可以编写可与任何其他应用共享的.NET DLL,只要DLL没有对AutoCAD.NET API程序集的引用。例如,您构建的.NET DLL仅处理来自外部数据源的数据访问(执行通常的CRUD工作)。然后该DLL可以与其他应用共享,无论应用是64位还是32位。理想情况下,您可以创建一组数据访问接口,并针对不同类型的数据源(无论是MS access、SQL Server还是web services)以不同的方式实现这些接口。
2.其他应用程序可能共享AutoCAD中使用的同一DLL。不幸的是,MS Access作为前端应用程序(UI部分)不支持.NET插件作为其他MS Office(Word/Excel)。因此,您不能直接共享.NET DLL。必须将.NET DLL公开为COM互操作,然后才能将COM互操作与MS Access VBA代码一起使用。虽然这仍然使AutoCAD和您的MS Access应用程序共享同一个DLL,但使.NET DLL能够运行会增加解决方案的复杂性,并使应用程序的安装/更新过程变得非常复杂。在我看来,使用MS Access作为前端UI是一个错误的选择(更有可能是由于历史原因),如果MS Access同时是前端UI和数据库本身,则情况更糟(MS Access UI应该与MS Access数据库分离)
如果确实需要从AutoCAD内部和外部操作数据,那么正如我所见,理想的情况是创建一个.NET独立应用程序(桌面或web)。然后,您可以拥有完全可共享的DLL来处理数据访问,最好是通过接口。通过这种方式,AutoCAD和外部应用程序都可以访问任何类型的外部数据源,而只需进行很少的配置更改
再说一次,如果您限制使用MS Access的外部应用程序,无论是出于选择还是出于历史原因,情况看起来不太好,选项也很有限(支持COM的.NET DLL)。如果可能的话,我会放弃MS Access(作为前端UI和数据源),转而选择其他更好的选择。否则,每次出现新的更新要求时,您都会遇到同样的问题。
回复

使用道具 举报

26

主题

128

帖子

2

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
231
发表于 2019-9-17 12:20:42 | 显示全部楼层
幸运的是,我在访问方面没有太多投资,因此可以接受更改
我没有太多示例可供提供的原因是我正处于开发更大的自动化程序的规划阶段。现在我所有的自动化代码都在AutoLISP中。我想过渡到C#dxf编写器。这样,我就不必处理困扰AutoCAD Electrical的所有错误
除了Access之外,您还推荐哪些外部程序作为首选?
回复

使用道具 举报

69

主题

875

帖子

15

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1146
发表于 2019-9-17 18:15:35 | 显示全部楼层

如果您希望每个项目都有一个数据库,我会使用SQLite,事实上,您可以将其用于所有项目,具体取决于您设想的记录集随着时间的推移有多大。如果您谈论的是数百万条记录,请转到MSSQL服务器或类似MySQL或Postgres的东西。
SQLite的美妙之处在于它是一个简单的文件,您无需配置服务器等。事实上,无论如何,我都会将其用于开发,您的数据和查询可以在需要时轻松传输到服务器托管的数据库中。
然后,您的所有业务逻辑都可以嵌入到您的一个AutoCAD应用程序插件中,而无需外部应用程序。如上n.yuan所述,替代方案是大量的工作和维护。hth
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2024-11-22 06:14 , Processed in 0.192319 second(s), 72 queries .

© 2020-2024 乐筑天下

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