AUTOCAD二次开发C#自学实例:Jig在分集水器中的应用代码

软件: AUTOCAD
全方位数据报表
许可分析

许可分析

免费体验
识别闲置、及时回收
许可优化

许可优化

免费体验
多维度智能分析
许可分析

许可分析

免费体验
减少成本、盘活许可
许可优化

许可优化

免费体验

使用Jig的拖放技术在AUTOCAD中绘制多实例分集水器的二次开发详解


摘要

本文介绍了在AUTOCAD的C二次开发环境中,如何利用Jig(拾取与拖放方法)技术动态生成和放置多个实例的分集水器(Jig Example)。具体而言,本示例通过从用户输入分支数目出发,设计生成一系列结合中心圆、路径和连线的几何图形集合,然后利用`Jig`类的`Drag`方法完成引用位置的选择与放置,并通过自定义事件处理逻辑实现基本的空间变换动作(旋转、水平与垂直翻转)。

一、环境与基础概念

欢迎浏览: AUTOCAD-二次开发-C#-自学-实例12-Jig的使用(分集水器)代码


在AUTOCAD二次开发中,利用C集成API,可实现高度定制化的绘图与设计功能。Jig是一种非常强大的ARK插件,允许用户通过拖放操作自定义化多个实体的复制与布局。本文示例中的`Jig`类提供了一系列功能,包括:

复制实体:实时复制选定实体到拖放位置。

用户交互控制:允许用户通过选择关键字(如“旋转90°”、“水平翻转”、“垂直翻转”)进行冗余选择变换。

自定义逻辑:开发者可以通过接口进行事件监听与处理逻辑的扩展。


二、代码解读与技术实现


1. 准备工作

在实现我们的自动化分集水器生成流程前,确保初始化了必要的数据库服务组件,并为图纸配置正确的调用方法:

```csharp

using Autodesk.AutoCAD.DatabaseServices;

using Autodesk.AutoCAD.EditorInput;


using Autodesk.AutoCAD.Geometry;


using Autodesk.AutoCAD.Runtime;


using DYH.Tools;


using IFoxCAD.Cad;


using System;


using System.Collections.Generic;


namespace DYH.Action


{


public class FenJiShuiQi


{


// 简单例子演示使用Jig的拖放实现分集水器的自动化生成与布局


///




/// 示例方法,使用Jig自定义分集水器生成与放置逻辑


///


[CommandMethod("FJSQ")]


public void FJSQ()


{


// 建立事务管理


using var tr = new DBTrans();


// 讨论层设置与重命名(需要为分集水器创造新的图层)


var layerName = "分集水器";

if (!tr.LayerTable.Has(layerName)) tr.LayerTable.Add(layerName, 7);

// 用户输入分支数

var r1 = Env.Editor.GetInteger("\n输入分支数");

if (r1.Status != PromptStatus.OK) return;

var num = r1.Value;


if (num <= 0) return; // 增加分支数的限制检查


// 创建初始的核心图形实体:圆形与路径


// 使用randomNumber来为每个分支生成特定的路径点与线长度

var c1 = getRandomCircle();// 生成原点为中心的第一环状区

var c2 = getRandomCircleAtOffset(new Vector3d(0, 100, 0));// 生成偏离第一环状区的第二环状区

for (int i = 0; i < num; i++)


{


// 自动生成连接路径点的线

var pathPoint = getRandomPathPoint(i, num);

var line = new Line(getLineStartPoint(i), getPathEndPoint(i, num));

c1.AppendChild(line);


c2.AppendChild(line);


}


// 实体列表初始化与更新层设置


var entList = GetEntityList(c1, c2);


// 数量扩展(在这个示例中保持一致)


for (int i = 0; i < num 2; i++)


{

entList.Add(new Line(new Vector3d(75, 285 + i  30, 0), new Vector3d(375, 285 + i  30, 0)));

}

entList.ForEach(e => e.Layer = layerName);

JigEx j2 = new JigEx((mp, de) =>


{


foreach (var ent in entList)


{

de.Enqueue(ent.GetTransformedCopy(Matrix3d.Displacement(new Vector3d(mp.Z20().ToArray()))));

}

}) { SetOptions: "\n选择放置的位置或[旋转90°(A)/左右翻转(F)/上下翻转(S)]",

SetKeyword: "A", "S", "F", " "


}


.Drag();// 开始拖放操作


// 结果处理逻辑,根据用户的选择动作反馈与执行相应的实体变换


// 逻辑结构与原文相符,此处已省略实现细节


}


}


}


```


三、操作细节与扩展性


1. 引入逻辑处理原点及位置的随机性是关键,以增加整体布局的多样性与智能性。

2. 实现自定义的`getRandomCircle`、`getRandomCircleAtOffset`、`getRandomPathPoint`及操作参数函数可以进一步调整元素的生成规则。

3. 分集水器的布局逻辑与最终的`eventHandler`及其相关参数提供了实现可拓展性的框架,允许开发者根据具体设计需求定制更多功能或优化现有行为。


武汉格发信息技术有限公司,格发许可优化管理系统可以帮你评估贵公司软件许可的真实需求,再低成本合规性管理软件许可,帮助贵司提高软件投资回报率,为软件采购、使用提供科学决策依据。支持的软件有: CAD,CAE,PDM,PLM,Catia,Ugnx, AutoCAD, Pro/E, Solidworks ,Hyperworks, Protel,CAXA,OpenWorks LandMark,MATLAB,Enovia,Winchill,TeamCenter,MathCAD,Ansys, Abaqus,ls-dyna, Fluent, MSC,Bentley,License,UG,ug,catia,Dassault Systèmes,AutoDesk,Altair,autocad,PTC,SolidWorks,Ansys,Siemens PLM Software,Paradigm,Mathworks,Borland,AVEVA,ESRI,hP,Solibri,Progman,Leica,Cadence,IBM,SIMULIA,Citrix,Sybase,Schlumberger,MSC Products...

index-foot-banner-pc index-foot-banner-phone

点击一下 免费体验万千客户信任的许可优化平台

与100+大型企业一起,将本增效

与100+大型企业一起,将本增效

申请免费体验 申请免费体验