• Civil3D二次开发常见问题总结


    Civil3D二次开发常见问题总结

    1. AutoCAD命令提示"未知命令**……"的原因:在Initialize方法内报出异常就会导致这种情况。O__O"…(或是少加了dll引用)还有一种情况就是CommandClass特性位置写错了,它必须放在命名空间上面,否则在CAD 2010中就会出现"未知命令"的情况,CAD 2014没有这种情况
    2. Civil 3D 工具空间(Toolspace)不见了怎么办?在命令行上输入ShowTS
    3. 3、使用netload命令加载程序集抛出"System.BadImageFormatException"异常解决方案。http://www.cnblogs.com/sly-tongtong/p/3569321.html
    4. ObjectARXSDK里的acdbmgd.dllacmgd.dll与安装目录下的acdbmgd.dllacmgd.dll这两组对应的dll是有区别的,一般调试时候用第一组,开发时候用第二组
    5. .net framework版本号AutoCAD版本号是有对应关系的。比如,.net framework 3.5对应AutoCAD 2010做二次开发,如果对应错了就会出现1中描述的情况。还有调试时有可能和Visual Studio版本号有关,我就遇到过这种情况,用VS 2012+AutoCAD 2010开发时加入断点没有反应,但VS换成2010的话就有反应了。(_)
    6. 关于VS 2012+AutoCAD 2010开发时加入断点没有反应的问题已经解决了,原来从VS 2010开始默认的调试器类型为托管4.0,而AutoCAD是用.net framework 3.5开发的。它默认的调试器类型为托管2.0。这就造成了加入断点没有反应的情况。解决方法:http://www.cnblogs.com/junqilian/archive/2011/03/18/1988327.htmlhttp://www.cnblogs.com/junqilian/archive/2011/03/18/1988327.html
    7. 自定义实体(C++)-关于弹出"未能找到***.dll…………"提示框的问题引起这个问题有许多原因,我遇到的是生成选项造成的,我用的是win7 64位系统,所以安装Civil3D版本也是64位,但自定义实体项目的生成方式默认是32位,我也没改所以在netload的时候就会报出那个提示框,只要把自定义实体项目的生成方式改成64位即可。
    8. 在使用netload加载dll时,命令行输出一行异常的信息-"………………"而且还没完整输出O__O"…。造成这个原因有可能是命令的名称重复
    9. Editor捕获到的东东不一定是你想要的,再操作之前一定要进行判断。比如Armadillo项目的CheckConnectivity命令
    10. 不要太过于相信CAD事件,开发文档上说它不靠谱。
    11. 自定义AutoCAD实体出现下面错误的原因是ObjectArx安装目录改变或者不存在导致的。

      解决方案:找到自定实体项目的目录下的Autodesk.arx-2014.props文件,打开并编辑ArxSdkDir节点的值,改为安装ObjectArx的路径。就OK了。

    12. 操蛋的弧线点 Polyline线用Explode方法打散后,子项弧线的起点和终点不一定和画线时的起终点一样,以下是测试数据:

      左到右

      arc.StartPoint

      {(7151.11257350689,2494.76600079297,200)}

      X: 7151.1125735068927

      Y: 2494.7660007929662

      Z: 200.0

      arc.EndPoint

      {(5218.90934925515,2527.31643705483,200)}

      X: 5218.9093492551474

      Y: 2527.3164370548329

      Z: 200.0

      --下到上

      arc.StartPoint

      {(10482.6189523043,1834.73690787365,200)}

      X: 10482.6189523043

      Y: 1834.7369078736517

      Z: 200.0

      arc.EndPoint

      {(10482.6189523043,4351.74259295576,200)}

      X: 10482.6189523043

      Y: 4351.7425929557648

      Z: 200.0

      --右到左

      arc.StartPoint

      {(16300.4106147591,1435.48772301059,600)}

      X: 16300.410614759079

      Y: 1435.4877230105917

      Z: 600.0

      arc.EndPoint

      {(14285.8917180871,1435.48772301059,600)}

      X: 14285.891718087136

      Y: 1435.4877230105913

      Z: 600.0

      --上到下

      arc.StartPoint

      {(11770.9503677832,-1525.82060923224,400)}

      X: 11770.950367783196

      Y: -1525.8206092322357

      Z: 400.0

      arc.EndPoint

      {(11794.1975746998,681.662180525194,400)}

      X: 11794.197574699823

      Y: 681.662180525194

      Z: 400.0

      可以看到有时候一致,有时候相反,这是非常操蛋的地方,用时谨记。

      更新:貌似是起始角和终止角的问题,转的圈圈太多。

    13. 外部程序启动AutoCAD程序各种异常的错误

      错误1-http://www.cnblogs.com/junqilian/archive/2011/08/21/2148630.html

      如果按上面改正后还有错误那么原因有两个:1ProgID值与当前CAD系统版本号不一样,2是打开多个CAD导致的

    14. 坑爹的SendCommand方法

      .net访问comSendCommand并用它发送命令,如果命令行中已经有文字的话,cad会一直等待直到命令行中的文字清空或命令执行,完成前面操作后才执行我们的SendCommand方法。坑爹啊,尤其是在外部启动cad的时候,如果已经打开cad并且命令行有文字,那启动程序会一直等待造成假死现象

    15. 安装多款Autodesk产品注册码失败的问题

      平常我们都是用AutoCAD注册机来激活Autodesk产品,但是如果操作不当就会出现激活不成功的显现。出现这种现象的原因有:1、序列号重复,即两款产品用的是同一个序列号。2、没有断网。

      以上只是简单的列举了注册失败的原因。我们真正要解决的是激活失败了怎么办?有许多人卸载了再安装试了好多次都不行最后重装系统再安装才好,这样的话代价太大还浪费时间。本人亲身经历过这种情况,最后在网上找解决方法再结合实际操作找到了解决方案。下面就详细道来:

    • 打开"我的电脑"进入C盘找到ProgramDataFLEXnet文件夹,把它删除
    • 卸载之前安装过的Autodesk产品(这个比较费时间,但木办法(_)
    • 清理注册表(可以用360
    • 最好重启电脑
    • 开始重新安装Autodesk产品(注意序列号不能再重复了),再用注册机激活就可以了
    1. 有些功能.NET API还没有/完全实现,这时就需要用到COM API

      需要添加的引用

      找到Civil 3D安装目录找到下面的dll

      Autodesk.AEC.Interop.Base

      Autodesk.AEC.Interop.UiBase

      Autodesk.AutoCAD.Interop

      Autodesk.AutoCAD.Interop.Common

      Autodesk.AECC.Interop.<Civil方面的对象>

      Autodesk.AECC.Interop.Ui< Civil方面的对象>

      选择上面的引用后,将引用的"复制本地(Copy Local)"属性设为true

      最后在项目中使用using语句引用就可以了。

      注:为什么要把"复制本地"属性设为true?因为引用的这些dll在运行的时候不需要的。还有Comdll默认情况下"复制本地"属性是不可选的。要让它可选的话,修改"嵌入互操作类型"属性为False就可以了(默认为true)。如果默认"嵌入互操作类型"的值,有可能会引发-无法嵌入互操作类型"……"的异常。解决方法就是"嵌入互操作类型"属性设为False

  • 相关阅读:
    4.父类私有属性和方法
    3.单继承和方法的重写
    2.Python封装练习及私有属性
    1.Python面向对象基础
    6.类与对象、封装、构造方法
    5.数组
    4.方法
    3.流程控制语句
    结构型模式和物理视图,模型管理试图的总结
    创建型模式和关于状态视图、活动视图、交互视图的总结
  • 原文地址:https://www.cnblogs.com/civil/p/10192765.html
Copyright © 2020-2023  润新知