今天是国庆的最后一天了,有点时间,来学习一下AutoCAD关于线型方面的内容。很多关于AutoCAD开发插件都会或多或少的涉及到线型方面的内容。线型存放在AutoCAD线型表中,线型表是AutoCAD几个组成表之一。首先这里去线型表里面找是否有我们对应名字的表,如果没有,来创建我们需要的线型样式。具体的线型样式,可以参考代码里面的注释,样式内容对应着线型表记录属性,设置相应的值即可。AutoCAD中对图形见面的实体线型类型可以通过LineTypeId来设置。经过测试,遇到了一个问题。在创建新的线型时,线型名称(Name)不能设置为空的字符串,否则AutoCAD运行后会报空错误。

这里创建好新的线型后,我们创建了多段线、圆两种实体分别用于展现我们创建新的创建线型。最终的效果如下图所示。

具体实现代码如下所示。

using Autodesk.AutoCAD.ApplicationServices;
using Autodesk.AutoCAD.DatabaseServices;
using Autodesk.AutoCAD.EditorInput;
using Autodesk.AutoCAD.Geometry;
using Autodesk.AutoCAD.Runtime;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;namespace ComplexLinetype
{public class Class1{[CommandMethod("CCL")]public void demo() {Document doc = Application.DocumentManager.MdiActiveDocument;Database db = doc.Database;Editor ed = doc.Editor;Transaction trans = db.TransactionManager.StartTransaction();using (trans){BlockTable bt = (BlockTable)trans.GetObject(db.BlockTableId, OpenMode.ForRead);BlockTableRecord btr = (BlockTableRecord)trans.GetObject(bt[BlockTableRecord.ModelSpace], OpenMode.ForWrite);using (Circle circle = new Circle()){circle.Center = new Point3d(600, 600, 0);circle.Normal = Vector3d.ZAxis;circle.Radius = 50;circle.LinetypeId = GetLineTypeId("yfqhGIS");btr.AppendEntity(circle);trans.AddNewlyCreatedDBObject(circle, true);}using (Polyline acPoly1 = new Polyline()){acPoly1.SetDatabaseDefaults(db);acPoly1.AddVertexAt(0, new Point2d(400, 400), 0, 0, 0);acPoly1.AddVertexAt(1, new Point2d(400, 600), 0, 0, 0);acPoly1.AddVertexAt(2, new Point2d(600, 600), 0, 0, 0);acPoly1.AddVertexAt(3, new Point2d(600, 400), 0, 0, 0);acPoly1.Closed = true;btr.AppendEntity(acPoly1);trans.AddNewlyCreatedDBObject(acPoly1, false);Polyline2d poly21 = acPoly1.ConvertTo(true);poly21.LinetypeGenerationOn = false;poly21.LinetypeId = GetLineTypeId("yfqhGIS");trans.AddNewlyCreatedDBObject(poly21, true);}trans.Commit();}}/// <summary>/// 获取线型的ID/// </summary>/// <param name="lineName"></param>/// <returns></returns>public ObjectId GetLineTypeId(string lineName) {Document doc = Application.DocumentManager.MdiActiveDocument;Database db = doc.Database;Transaction trans = db.TransactionManager.StartTransaction();ObjectId ObjID = ObjectId.Null;using (trans){TextStyleTable tt = (TextStyleTable)trans.GetObject(db.TextStyleTableId, OpenMode.ForRead);LinetypeTable lt = (LinetypeTable)trans.GetObject(db.LinetypeTableId, OpenMode.ForWrite);if (lt.Has(lineName)){ObjID = lt[lineName];}else {LinetypeTableRecord ltr = new LinetypeTableRecord();ltr.Name = lineName;//线型名ltr.AsciiDescription =" ---- 测绘 ---- 测绘 ---- 测绘 ----";//线型描述ltr.PatternLength = 0.9;线型总长度ltr.NumDashes = 3;//组成线型的笔画数目ltr.SetDashLengthAt(0, 0.5);//0.5个单位的画线ltr.SetDashLengthAt(1, -0.2);//0.2个单位的空格ltr.SetShapeStyleAt(1, tt["Standard"]);//设置文字的样式ltr.SetShapeNumberAt(1, 0);//设置空格处包含的图案图形ltr.SetShapeOffsetAt(1, new Vector2d(-0.1, -0.05));//图形在X轴方向上左移0.1个单位,在Y轴方向上下移0.05个单位ltr.SetShapeScaleAt(1, 0.1);//图形的缩放比例ltr.SetShapeIsUcsOrientedAt(1, false);//ltr.SetShapeRotationAt(1, 0);ltr.SetTextAt(1, "测绘");//文字内容ltr.SetDashLengthAt(2, -0.2);//0.2个单位的空格ObjID = lt.Add(ltr);trans.AddNewlyCreatedDBObject(ltr, true);}trans.Commit();}return ObjID;}}
}

更多内容,请关注公众号

AutoCAD二次开发自定义线型相关推荐

  1. cass二次开发vba和lisp_基于VBA的AutoCAD二次开发及应用实例

    1引言本文引用地址:http://www.eepw.com.cn/article/190993.htm AutOCAD2005是AutOdesk公司的系列产品,该软件从其使用和设计思路上都秉承了工程制 ...

  2. autocad型源代码_VB与AUTOCAD二次开发源代码包

    在发个VB与AUTOCAD二次开发源代码包,包括以下内容: 在学校的话,叫计算机辅助设计 第一章 VB开发AotoCAD基础知识 第一节 欢迎进入VB开发AUTOCAD的精彩世界 第二节 VB 开发 ...

  3. AutoCAD 二次开发语言的选择

    因为某些功能的原因,一部份VBA的用户最终选择了NET,又因为某些功能的原因,一部份NET的用户最终选择了C++.最终这部份业余用户走上了专业的二次开发之路,而脱离了原来的专业. 来自 一个CAD群叫 ...

  4. AutoCAD二次开发基础(四):多义线

    AutoCAD二次开发系列 文章目录 前言 一.样条曲线转化为多义线 二.梯形法计算多义线面积及形心坐标 前言 为了便于数据交换,需把样条曲线转换为多义线. 一.样条曲线转化为多义线 思想:将样条曲线 ...

  5. 基于C#进行AutoCAD二次开发初探(二)——C#编写代码直接打开AutoCAD并显示图形

    AutoCAD 2006 Type Library   //我用的是CAD2006版 AutoCAD/ObiectDBX Common 16.0 Type Library 把这两个引用的命名空间引进来 ...

  6. AutoCAD二次开发三种添加插件按钮的方法

    在上一篇关于AutoCAD的文章中,我将很多关于CAD的博客相关资源进行了说明,这一篇文章我将介绍如何在AutoCAD中的ribbon中添加相应的按钮.就是下面这种按钮: PS:在开发中我们最好使用中 ...

  7. AutoCAD二次开发三种添加插件按钮的方法之二

    上一篇相关文章主要借助了cuix配置文件来制作插件按钮,但是对于纯码农来说还是喜欢以代码来说话,今天这篇文章就来讲讲纯代码添加按钮. 开发IDE:VS2010 环境:.Net Framework4.0 ...

  8. 陈伯雄lisp_基于AutoLisp的AutoCAD二次开发自动生成系统图

    龙源期刊网 http://www.qikan.com.cn 基于 AutoLisp 的 AutoCAD 二次开发自动 生成系统图 作者:郎建山 金江 来源:<科技视界> 2013 年第 2 ...

  9. CAD自控lisp_基于AutoLisp的AutoCAD二次开发自动生成系统图

    基于 AutoLisp 的 AutoCAD 二次开发自动生成系统图 [摘 要]本文主要阐述了应用 autolisp 语言二次开发 autocad 自动生成系统图的实现方案. [关键词] autocad ...

最新文章

  1. 一个经典的字母排列算法
  2. 利用Word将连着一起的字符按照自己指定的”字符串或者字换行“自动换行。
  3. mysql启动选项只读_MySQL的启动选项和系统变量该如何配置?
  4. mongodb中的副本集搭建实践(转自:http://www.cnblogs.com/visionwang/p/3290435.html)
  5. AMAP-TECH算法大赛开赛!基于车载视频图像的动态路况分析
  6. ASP.NET 生成唯一不重复的订单号 支持多用户并发、持多数据库的实现参考(C#.NET通用权限管理系统组件源码组成部分)...
  7. mysql连接查询_.net core 里连接mysql查询数据的方法
  8. python turtle绘图
  9. [Python图像处理] .获取图像属性、兴趣ROI区域及通道处理
  10. 杰里695N系列(soundbox)之 1.0 SDK快速入门(1)
  11. 为什么计算机无法打开扫描机,为什么打印机无法扫描 打印机无法扫描是什么原因 - 云骑士一键重装系统...
  12. go 链路追踪_Golang在七牛全链路追踪中的实践
  13. 微信小游戏制作学习笔记
  14. 自定义view仿写今日头条点赞动画
  15. 深度解析:电商直播基地运营及盈利模式
  16. 曾遭周鸿祎全网封杀的360猛将 :草根打工到36岁身家上亿的逆袭!
  17. Python-matplotlib用法
  18. 打开PS是出现“该内存不能为read”是怎么回事?
  19. 【安全知识分享】安全生产责任制培训.pptx(附下载)
  20. windows下 python安装pip 简易教程

热门文章

  1. 聊聊代理ip常见的三大协议。
  2. EasyRecovery15下载量高的恢复率高的数据恢复软件
  3. linux cp 目录大小差几K,Linux - 文件复制后大小不一致的问题
  4. 《 Python List 列表全实例详解系列(九)》__列表反转(6种方法)
  5. Github上传代码菜鸟超详细教程
  6. java 龟兔赛跑观察比赛结果(使用线程)
  7. 大数据和移动互联网的关系
  8. KEGGDrug数据库字段认识
  9. easyuefi只能在基于uefi启动的_UEFI启动下的Windows10 安装 Ubuntu18.04教程
  10. CSS特性 之渐变 (全网最全)