我使用了COM对象来在cad2018中创建table表格,需要的ObjectArx开发包可以在官网上下载,并且需要使用.netframework4.6的库才行。

项目里除了引用常规的Cad开发dll,还要引用COM组件: Autodesk.AutoCAD.Interop.dll和Autodesk.AutoCAD.Interop.Common.dll

ObjectArx下载地址:

https://www.autodesk.com/developer-network/platform-technologies/autocad/objectarx-license-download

需要先填表并同意条款,才能跳入下载地址,下载页面可见的有2018到2020三个版本可供下载。

历史的版本的下载可参考:

https://blog.csdn.net/flyfun2000/article/details/7065446

如果要参考COM对象的API可到网址:

https://help.autodesk.com/view/OARX/2018/ENU/?guid=GUID-35CC52D6-03C1-48EE-90A3-97DFBBAC33C3

先放出代码运行的结果图:

这里我只试了几种方法:

创建table:doc.ActiveLayout.Block.AddTable(vertices, 4, 2, 3, 10);

设置文字高度: myTable.SetTextHeight(1, 0.5);

合并单元格:myTable.MergeCells(1, 2, 0, 0);

设置列宽: myTable.SetColumnWidth(0, 5);

设置文字颜色:myTable.SetContentColor(2, color);

设置文字对齐方式: myTable.SetAlignment(1, AcCellAlignment.acMiddleCenter);

插入文字:myTable.SetText(0, 0, "我的表格测试");

插入块引用:myTable.SetBlockTableRecordId(3, 0, br.BlockTableRecord.OldIdPtr.ToInt64(), true);

后面会给出完整的代码。

需要注意的是:在设置这些单元格时,分成了通过 row和coloum来定位一个单元格,和根据枚举类型RowType来确定: AcRowType acRowType = new AcRowType();按F12查看定义可见这个类有4个值如图:

另外在插入块定义的时候,不能直接插入实体的ObjectId,要插入的实体必须得是块参照,见代码:

其中oId就是getEntity得到得ObjectId。

这个AcadTable有很多的方法见:

https://help.autodesk.com/view/OARX/2018/ENU/?guid=GUID-7B82400C-53D0-4D1A-94FA-66BB3040F0AA

using Autodesk.AutoCAD.Runtime;
using Autodesk.AutoCAD.DatabaseServices;
using Autodesk.AutoCAD.EditorInput;
using Autodesk.AutoCAD.ApplicationServices;
using Autodesk.AutoCAD.Interop.Common;
using Autodesk.AutoCAD.Interop;
using System.Runtime.InteropServices; namespace CreateExcelTable
{
public class CreateTable
{ Document AcadDoc = Application.DocumentManager.MdiActiveDocument;
Editor AcadEd = Application.DocumentManager.MdiActiveDocument.Editor;
Database AcadDb = Application.DocumentManager.MdiActiveDocument.Database; [CommandMethod("ECDCreate")]
public void Create()
{
AcadApplication acadApp = null;
AcadDocument doc = null;
AcadTable myTable = null; acadApp = (AcadApplication)Marshal.GetActiveObject("AutoCAD.Application");
doc = acadApp.ActiveDocument; PromptPointOptions ppOps = new PromptPointOptions("请选择表格插入位置\n"); PromptPointResult ppRes = AcadEd.GetPoint(ppOps); double[] vertices = new double[];
vertices[] = ;
vertices[] = ;
vertices[] = ; if (ppRes.Status == PromptStatus.OK)
{ vertices[] = ppRes.Value[];
vertices[] = ppRes.Value[];
vertices[] = ppRes.Value[]; }
AcRowType acRowType = new AcRowType();
/*acUnknownRow = 0,
acDataRow = 1,
acTitleRow = 2,
acHeaderRow = 4*/ myTable = doc.ActiveLayout.Block.AddTable(vertices, , , , );
//设置文字高度
myTable.SetTextHeight(, 0.5);
myTable.SetTextHeight(, 1.5);
myTable.SetTextHeight(, );
//合并单元格
myTable.MergeCells(, , , );
//设置列宽
myTable.SetColumnWidth(, );
myTable.SetColumnWidth(, );
//插入数据
myTable.SetText(, , "我的表格测试");
myTable.SetText(, , "Data1");
myTable.SetText(, , "这是一条数据");
myTable.SetText(, , "这是一条测试数据");
myTable.SetText(, , "左边是个块定义"); //设置文字颜色
AcadAcCmColor color = new AcadAcCmColor();
color.ColorIndex = AcColor.acYellow; myTable.SetContentColor(, color); //设置单元格中文字颜色
AcadAcCmColor color2 = new AcadAcCmColor();
color2.ColorIndex = AcColor.acGreen; myTable.SetContentColor2(, , , color2); //设置单元格对其方式
myTable.SetAlignment(, AcCellAlignment.acMiddleCenter); PromptEntityOptions propEnt = new PromptEntityOptions("请选择实体\n"); PromptEntityResult propRes = AcadEd.GetEntity(propEnt); if (propRes.Status == PromptStatus.OK)
{
try
{ //错误
// myTable.SetBlockTableRecordId(3, 0, propRes.ObjectId.OldIdPtr.ToInt64(), true); ObjectId oId = propRes.ObjectId;
AcadEd.WriteMessage(oId.IsValid.ToString()); BlockReference br;
using (var trans = AcadDb.TransactionManager.StartTransaction())
{ br = trans.GetObject(oId, OpenMode.ForRead) as BlockReference; if (br == null)
{
Application.ShowAlertDialog("请选择块定义"); trans.Commit(); return;
} trans.Commit();
} //错误
//br = (BlockReference)oId.GetObject(OpenMode.ForRead); //设置单元格块引用
myTable.SetBlockTableRecordId(, , br.BlockTableRecord.OldIdPtr.ToInt64(), true); }
catch (System.Exception e)
{ AcadEd.WriteMessage(e.ToString());
}
}
}
}
}

AutoCad 二次开发 .net 之创建Table的更多相关文章

  1. AutoCAD二次开发-使用ObjectARX向导创建应用程序(HelloWorld例子)

    AutoCAD2007+vs2005 首先自己去网上搜索下载AutoCAD2007的ARX开发包. 解压后如下 打开后如下 classmap文件夹为C++类和.net类的框架图,是一个DWG文件. d ...

  2. AutoCAD二次开发——AutoCAD.NET API开发环境搭建

    AutoCAD二次开发工具:1986年AutoLisp,1989年ADS,1990年DCL,1993年ADS-RX,1995年ObjectARX,1996年Active X Automation(CO ...

  3. 1,下载和部署开发环境--AutoCAD二次开发

    环境需求为: AutoCAD 2020版 ObjectARX SDK 下载地址:https://www.autodesk.com/developer-network/platform-technolo ...

  4. AutoCad 二次开发 .net 之层表的增加 删除 修改图层颜色 遍历 设置当前层

    AutoCad 二次开发 .net 之层表的增加 删除 修改图层颜色 遍历 设置当前层 AutoCad 二次开发 .net 之层表的增加 删除 修改图层颜色 遍历 设置当前层我理解的图层的作用大概是把 ...

  5. AutoCad 二次开发 文字镜像

    AutoCad 二次开发 文字镜像 参考:https://adndevblog.typepad.com/autocad/2013/10/mirroring-a-dbtext-entity.html 在 ...

  6. AutoCad 二次开发 jig操作之标注跟随线移动

    AutoCad 二次开发 jig操作之标注跟随线移动 在autocad当中,我认为的jig操作的意思就是即时绘图的意思,它能够实时的显示出当前的操作,以便我们直观的感受到当前的绘图操作是什么样子会有什 ...

  7. Autocad中使用命令来调用python对Autocad二次开发打包后的exe程序

    在Autocad中直接调用Python二次开发程序是有必要的,下面介绍一种方法来实现这个功能: 其基本思路是:先将二次开发的程序打包为可执行程序exe,然后编写lsp文件,该文件写入调用exe程序的语 ...

  8. 我的AutoCAD二次开发之路 (一)

    原帖地址 http://379910987.blog.163.com/blog/static/33523797201011184552167/ 今天在改代码的时候,遇到了AddVertexAt方法的用 ...

  9. 承接 AutoCAD 二次开发 项目

    本人有多年的CAD开发经验,独立完成多个CAD二次开发项目.熟悉.net及Asp.net开发技术,和Lisp开发技术. 现在成立了工作室,独立承接CAD二次开发项目.结项后提供源码及开发文档,有需要的 ...

随机推荐

  1. 【Visual Studio】关于vs 打开网站时报错 配置iis express失败 无法访问IIS元数据库...

    关于vs 打开网站时报错 配置iis express失败 无法访问IIS元数据库... 我安装了vs2015,一开始创建项目,网站都没问题,有一次突然打开项目时报错,瞬间懵逼,我啥都没干啊!!! 网上 ...

  2. Linux修改屏幕分辨率至2K

    使用命令:cvt,与 xrandr 使用cvt命令查看分辨率配置: Modeline后边分别是 modeName 以及 详细的配置 linklee@linklee-270E5G-270E5U:~$ c ...

  3. Cheapest Palindrome POJ - 3280

    Keeping track of all the cows can be a tricky task so Farmer John has installed a system to automate ...

  4. 【Python3爬虫】我爬取了七万条弹幕,看看RNG和SKT打得怎么样

    一.写在前面 直播行业已经火热几年了,几个大平台也有了各自独特的“弹幕文化”,不过现在很多平台直播比赛时的弹幕都基本没法看的,主要是因为网络上的喷子还是挺多的,尤其是在观看比赛的时候,很多弹幕不是喷选 ...

  5. Spring源码分析之IOC的三种常见用法及源码实现(一)

    1.ioc核心功能bean的配置与获取api 有以下四种 (来自精通spring4.x的p175) 常用的是前三种 第一种方式 <?xml version="1.0" enc ...

  6. Java的Object类

    (1)Object是类层次结构的根类,所有的类都直接或者间接的继承自Object类. (2)Object类的构造方法有一个,并且是无参构造 这其实就是理解当时我们说过,子类构造方法默认访问父类的构造是 ...

  7. TCP Traffic Analyzer

    TCP Traffic Analyzer 工具yahoo 发布的一款开源网络分析工具,可以分析网络应用在服务器端与客户端之间的运行状态Yconalyzer保持与tcpdump兼容,两者生成的抓取文件能 ...

  8. php反序列化漏洞复现

    超适合小白的php反序列化漏洞复现 写在前头的话 在OWASP TOP10中,反序列化已经榜上有名,但是究竟什么是反序列化,我觉得应该进下心来好好思考下.我觉得学习的时候,所有的问题都应该问3个问题: ...

  9. sudo权限造成的故障

    公司服务器故障: [chengsir@yinwucheng ~]$ sudo mkdir /opt/nginx sudo: /usr/bin/sudo must be owned by uid 0 a ...

  10. VMware安装和linux(centos7)系统安装

    下载centos系统ISO镜像 安装linux系统和winsdows安装系统一样,需要系统文件.浏览器访问centos官网进行下载,http://www.centos.org,因为是国外网站所有下载速 ...