AutoCad 二次开发 .net 之创建Table
我使用了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的更多相关文章
- AutoCAD二次开发-使用ObjectARX向导创建应用程序(HelloWorld例子)
AutoCAD2007+vs2005 首先自己去网上搜索下载AutoCAD2007的ARX开发包. 解压后如下 打开后如下 classmap文件夹为C++类和.net类的框架图,是一个DWG文件. d ...
- AutoCAD二次开发——AutoCAD.NET API开发环境搭建
AutoCAD二次开发工具:1986年AutoLisp,1989年ADS,1990年DCL,1993年ADS-RX,1995年ObjectARX,1996年Active X Automation(CO ...
- 1,下载和部署开发环境--AutoCAD二次开发
环境需求为: AutoCAD 2020版 ObjectARX SDK 下载地址:https://www.autodesk.com/developer-network/platform-technolo ...
- AutoCad 二次开发 .net 之层表的增加 删除 修改图层颜色 遍历 设置当前层
AutoCad 二次开发 .net 之层表的增加 删除 修改图层颜色 遍历 设置当前层 AutoCad 二次开发 .net 之层表的增加 删除 修改图层颜色 遍历 设置当前层我理解的图层的作用大概是把 ...
- AutoCad 二次开发 文字镜像
AutoCad 二次开发 文字镜像 参考:https://adndevblog.typepad.com/autocad/2013/10/mirroring-a-dbtext-entity.html 在 ...
- AutoCad 二次开发 jig操作之标注跟随线移动
AutoCad 二次开发 jig操作之标注跟随线移动 在autocad当中,我认为的jig操作的意思就是即时绘图的意思,它能够实时的显示出当前的操作,以便我们直观的感受到当前的绘图操作是什么样子会有什 ...
- Autocad中使用命令来调用python对Autocad二次开发打包后的exe程序
在Autocad中直接调用Python二次开发程序是有必要的,下面介绍一种方法来实现这个功能: 其基本思路是:先将二次开发的程序打包为可执行程序exe,然后编写lsp文件,该文件写入调用exe程序的语 ...
- 我的AutoCAD二次开发之路 (一)
原帖地址 http://379910987.blog.163.com/blog/static/33523797201011184552167/ 今天在改代码的时候,遇到了AddVertexAt方法的用 ...
- 承接 AutoCAD 二次开发 项目
本人有多年的CAD开发经验,独立完成多个CAD二次开发项目.熟悉.net及Asp.net开发技术,和Lisp开发技术. 现在成立了工作室,独立承接CAD二次开发项目.结项后提供源码及开发文档,有需要的 ...
随机推荐
- vue项目引入bootstrap正确姿势
vue如何引入bootstrap 最近在玩全栈,自然少不了vue的使用.使用vue-cli生成的项目想引入bootstrap,需要先安装相应的npm包,然后在代码中显示引入. 1.安装依赖包: cnp ...
- springmvc中将servlet api对象作为处理方法的入参使用
在springmvc中,控制器不依赖任何servlet api对象,也可以将servlet api对象作为处理方法的入参使用,非常方便,比如需要使用HttpSession对象,那么就可以直接将Http ...
- maven在线自动更新太慢怎么办?
使用IDEA和Eclipse开发maven项目时,maven在添加一项新的依赖时,如果发现本地仓库没有,就会向位于国外服务器的中央仓库下载.如果所处网络没有翻墙,下载速度会慢到你想原地爆炸. 这个时候 ...
- web安全之XSS基础-常见编码科普
0x01常用编码 html实体编码(10进制与16进制): 如把尖括号编码[ < ] -----> html十进制: < html十六进制:< javascript的八进制 ...
- Python3之多线程学习
这里做一个自己复习多线程的笔记 Python中使用线程有两种方式:函数或者用类来包装线程对象. 函数式:调用 _thread 模块中的start_new_thread()函数来产生新线程.语法如下: ...
- PHP 组件注册的例子
<?php namespace Test; abstract class Plugin { protected $pluginName = null; abstract public funct ...
- 理解JavaScript中的堆和栈
这里先说两个概念:1.堆(heap)2.栈(stack)堆 是堆内存的简称.栈 是栈内存的简称.说到堆栈,我们讲的就是内存的使用和分配了,没有寄存器的事,也没有硬盘的事.各种语言在处理堆栈的原理上都大 ...
- Python爬取散文网散文
配置python 2.7 bs4 requests 安装 用pip进行安装 sudo pip install bs4 sudo pip install requests 简要说明一下bs4的使用因为是 ...
- 数据结构c语言
这篇博客是为了对数据结构进行一系列的学习整理,包括线性表,栈和队列,串,数组和广义表,树和二叉树,图,动态储存管理,查找,内部排序,外部排序文件进行部分笔记的记录. 基本概念和术语 数据:是对客观事物 ...
- Hive On HBase实战
1.概述 HBase是一款非关系型.分布式的KV存储数据库.用来存储海量的数据,用于键值对操作.目前HBase是原生是不包含SQL操作,虽然说Apache Phoenix可以用来操作HBase表,但是 ...