我使用了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. 服务器时间误差导致的google sign-in后台验证错误(远程调试java程序)

    https://developers.google.com/identity/sign-in/web/backend-auth import com.google.api.client.googlea ...

  2. 阿里云服务器ecs + tomcat + 域名解析 部署web页面

    1.购买ecs:https://www.aliyun.com/product/ecs?spm=5176.12825654.eofdhaal5.2.3bf92c4aYOB7gL&aly_as=A ...

  3. 初探内核之《Linux内核设计与实现》笔记上

    内核简介  本篇简单介绍内核相关的基本概念. 主要内容: 单内核和微内核 内核版本号 1. 单内核和微内核   原理 优势 劣势 单内核 整个内核都在一个大内核地址空间上运行. 1. 简单.2. 高效 ...

  4. 洛谷 1552 [APIO2012]派遣

    题目背景 在一个忍者的帮派里,一些忍者们被选中派遣给顾客,然后依据自己的工作获取报偿. 题目描述 在这个帮派里,有一名忍者被称之为Master.除了Master以外,每名忍者都有且仅有一个上级.为保密 ...

  5. Java学习笔记之封装与继承

    封装 1,将属性定义为私有的(private)   不能通过  对象名.属性  来直接访问,但是可以通过方法来间接的访问, 2,封装的意义:公有属性可以被随意修改,并且不能被程序察觉.封装后,别人通过 ...

  6. Redis未授权访问写Webshell和公私钥认证获取root权限

    0x01 什么是Redis未授权访问漏洞 Redis 默认情况下,会绑定在 0.0.0.0:,如果没有进行采用相关的策略,比如添加防火墙规则避免其他非信任来源 ip 访问等,这样将会将 Redis 服 ...

  7. 前端工程师如何理解 TCP/IP 传输层协议?

    网络协议是每个前端工程师都必须要掌握的知识,TCP/IP 中有两个具有代表性的传输层协议,分别是 TCP 和 UDP,本文将介绍下这两者以及它们之间的区别. TCP/IP网络模型 计算机与网络设备要相 ...

  8. [USACO17JAN]Building a Tall Barn建谷仓

    题目描述 Farmer John is building a brand new, NNN -story barn, with the help of his KKK cows ( 1≤N≤K≤101 ...

  9. Flink Connector 深度解析

    作者介绍:董亭亭,快手大数据架构实时计算引擎团队负责人.目前负责 Flink 引擎在快手内的研发.应用以及周边子系统建设.2013 年毕业于大连理工大学,曾就职于奇虎 360.58 集团.主要研究领域 ...

  10. 第三方软件 pcanywhere提权

    pcanywhere 是一个远程管理软件 1.访问pcanywhere默认安装目录 访问 下载打开 利用破解工具直接 选择刚刚下载的软件 点破解 拿到用户密码后去百度下载客户端让后连接