AutoCAD .Net EntityJig – Dynamic Dimension and Line Jig
来源:互联网 发布:淘宝店铺客服如何联系 编辑:程序博客网 时间:2024/06/03 15:14
本实例展示使用 EntityJig 技术,动态交互模式创建直线并同时显示动态尺寸。
如下图所示:
翻译自: AutoCAD .NET: EntityJig – Dynamic Dimension and Line Jig
using Autodesk.AutoCAD.Runtime;using Autodesk.AutoCAD.ApplicationServices;using Autodesk.AutoCAD.DatabaseServices;using Autodesk.AutoCAD.Geometry;using Autodesk.AutoCAD.EditorInput;[CommandMethod("JigLineWithDynDim")]public static void JigLineWithDynDim(){ Document doc = Application.DocumentManager.MdiActiveDocument; if (DynDimLineJigger.Jig()) { doc.Editor.WriteMessage("\nSuccess\n"); } else { doc.Editor.WriteMessage("\nFailure\n"); }}public class DynDimLineJigger : EntityJig{ public int step = 1; public Point3d _startPnt; public Point3d _endPnt; private DynamicDimensionDataCollection dddCollection = new DynamicDimensionDataCollection(); public DynDimLineJigger(Line line) : base(line) { Entity.SetDatabaseDefaults(); Dimension dim1 = new AlignedDimension(); dim1.SetDatabaseDefaults(); dddCollection.Add(new DynamicDimensionData(dim1, true, true)); dddCollection[0].Focal = false; dddCollection[0].Editable = false; } private Editor Editor { get { return Application.DocumentManager.MdiActiveDocument.Editor; } } public Line line { get { return base.Entity as Line; } } protected override bool Update() { switch (step) { case 1: line.StartPoint = line.EndPoint = _startPnt; break; case 2: line.EndPoint = _endPnt; AlignedDimension dim1 = (AlignedDimension)dddCollection[0].Dimension; dim1.XLine1Point = _startPnt; dim1.XLine2Point = _endPnt; dim1.DimLinePoint = _endPnt.RotateBy(Math.PI / 10, Vector3d.ZAxis, _startPnt); break; default: return false; } return true; } protected override SamplerStatus Sampler(JigPrompts prompts) { switch (step) { case 1: JigPromptPointOptions prOptions1 = new JigPromptPointOptions("\nStart point:"); prOptions1.UseBasePoint = false; PromptPointResult prResult1 = prompts.AcquirePoint(prOptions1); if (prResult1.Status != PromptStatus.OK) return SamplerStatus.Cancel; if (prResult1.Value.Equals(_startPnt)) { return SamplerStatus.NoChange; } else { _startPnt = prResult1.Value; return SamplerStatus.OK; } case 2: JigPromptPointOptions prOptions2 = new JigPromptPointOptions("\nEnd point:"); prOptions2.BasePoint = line.StartPoint; prOptions2.UseBasePoint = true; PromptPointResult prResult2 = prompts.AcquirePoint(prOptions2); if (prResult2.Status != PromptStatus.OK) return SamplerStatus.Cancel; if (prResult2.Value.Equals(_endPnt)) { return SamplerStatus.NoChange; } else { _endPnt = prResult2.Value; return SamplerStatus.OK; } default: break; } return SamplerStatus.OK; } protected override DynamicDimensionDataCollection GetDynamicDimensionData(double dimScale) { base.GetDynamicDimensionData(dimScale); return dddCollection; } public static bool Jig() { Document doc = Application.DocumentManager.MdiActiveDocument; Database db = doc.Database; DynDimLineJigger jigger = null; try { Editor ed = Application.DocumentManager.MdiActiveDocument.Editor; jigger = new DynDimLineJigger(new Line()); PromptResult pr; do { pr = ed.Drag(jigger); if (pr.Status == PromptStatus.Keyword) { // Add keyword handling code below } else { jigger.step++; } } while (pr.Status == PromptStatus.OK && jigger.step <= 2); if (pr.Status == PromptStatus.OK) { using (Transaction tr = db.TransactionManager.StartTransaction()) { BlockTable bt = tr.GetObject(db.BlockTableId, OpenMode.ForRead) as BlockTable; BlockTableRecord btr = tr.GetObject( bt[BlockTableRecord.ModelSpace], OpenMode.ForWrite) as BlockTableRecord; btr.AppendEntity(jigger.Entity); tr.AddNewlyCreatedDBObject(jigger.Entity, true); tr.Commit(); } } else { return false; } return true; } catch { if (jigger != null && jigger.Entity != null) jigger.Entity.Dispose(); return false; } }}
阅读全文
0 0
- AutoCAD .NET: EntityJig – Dynamic Dimension and Line Jig
- AutoCAD .Net EntityJig – Dynamic Dimension and Line Jig
- AutoCAD .Net EntityJig – Jig Line by Start and End Points
- AutoCAD .Net EntityJig – Jig Circle by Center and Radius
- Creating a multileader in AutoCAD using a jig from .NET
- AutoCAD .Net 创建直线Line
- JIG(即时绘图)-直线即时绘图-EntityJig(单实体即时绘图)
- Dynamic two-dimension array
- 转自AutoCAD .NET 开发人员手册——Dimension各参数含义
- Fact dimension and degenerate dimension
- Dimension and Fact
- Previewing and plotting a single sheet in AutoCAD using .NET
- Previewing and plotting multiple sheets in AutoCAD using .NET
- dynamic allocation of two dimension array
- auto CAD 二次开发 c#.net 之JIG画多段线(polyline)
- AutoCAD.NET:第一章 AutoCAD.NET二次开发概述
- Mastering AutoCAD 2007 and AutoCAD LT 2007
- AutoCAD 2006 and AutoCAD LT 2006 Bible
- (转)CIDR(Classless Inter-Domain Routing,无类域间路由)
- Method Not Allowed 405
- _STORAGE_WRITE_ERROR_:./Runtime/Cache/Home/
- Faster-RCNN代码+理论——1
- Leetcode题解-30. Substring with Concatenation of All Words
- AutoCAD .Net EntityJig – Dynamic Dimension and Line Jig
- 关于JavaScript的浅拷贝和深拷贝
- vscode调试c++配置
- XP 2003系统--虚拟连接教程
- 梯度原理
- AutoCAD .Net 使用 DrawJig 来动态地移动、旋转、缩放多个图元
- poj_1679_判断最小生成树是否唯一
- 《JAVA编程技巧1001条》第340条:数学函数 ARCSIN;
- 梆梆加固之防内存dump分析