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二次开发项目.结项后提供源码及开发文档,有需要的 ...
随机推荐
- ASP.NET Web API 2系列(一):初识Web API及手动搭建基本框架
1.导言 随着Web技术的发展,现在各种框架,前端的,后端的,数不胜数.全栈工程师的压力越来越大. PC端,pad端,移动端App(安卓/IOS)的发展,使得前后端一体的开发模式十分笨重.因此,前后端 ...
- bugku web8
打开网站,是一段PHP代码, <?php extract($_GET); if (!empty($ac)) { $f = trim(file_get_contents($fn)); if ($a ...
- 《java编程思想》P140-P160(第七章复部+第八章部分)
1.不用修饰符 修饰的方法或类,它们的修饰符是 默认修饰符,即 包访问权限(包内都可以用)(临时记的) 2. final数据: 对于基本类型,final使数值恒定不变,而对于对象引用,final使引用 ...
- RF读取excel
pip install robotframework-ExcelLibrary (安装ExcelLibrary库) 关键字: Open Excel 打开excel Get Column Count 获 ...
- Fiddle弱网测试
1.打开Fiddler,Rules->Performance->勾选 Simulate Modem Speeds,勾选之后访问网站会发现网络慢了很多: 接下来给大家解释一下这些个都是什么意 ...
- Visual Studio 生成事件这件小事
在上一篇<Visual Studio 调试技巧>中,介绍了一些VS常用的调试操作,今天,聊一聊VS当中一个不太常见,但有时又有妙用的操作——VS生成事件. 一.什么是VS生成事件 简单来说 ...
- java-i++的原理探究
先看例子: package com.test; publick class Auto{ public static void main(String[] args){ Auto inc=new Aut ...
- .NET Core ORM 类库Petapoco中对分页Page添加Order By对查询的影响
最近一直在使用Petapoco+Entity Framework Core结合开发一套系统. 使用EFCore进行Code First编码,使用PMC命令生成数据库表的信息. 使用Petapoco进行 ...
- 算法---ALGO-3 Java K好数 蓝桥杯
package Main; import java.io.InputStream; import java.util.Scanner; public class Main { public stati ...
- C# 结合 Golang 开发
1. 实现方式与语法形式 基本方式:将 Go 程序编译成 DLL 供 C# 调用. 1.1 Go代码 注意:代码中 export 的注释是定义的入口描述不能省略 package main import ...