当前位置:首页 >> 机械/仪表 >>

CAD二次实验报告4


实验四
一、主要内容

用户交互、选择集及扩展属性

1、基于用户交互式的信息输入 2、创建选择集 3、给图形实体添加扩展属性

二、学时安排 三、预习内容
回顾用户交互命令的使用、选择集创建的几种方式,

四、实验步骤
4.1 用户交互
Editor ed =

Application.DocumentManager.MdiActiveDocument.Editor; //提示输入圆心坐标 PromptPointOptions fristpoint = new PromptPointOptions("\n请输入圆心:"); …… //提示输入半径 PromptDoubleOptions r = new PromptDoubleOptions("\n请输入圆半径:"); ……

4.1.1 读入字符串
//获取提示框输入的或点选的坐标 PromptPointResult result = ed.GetPoint(fristpoint); Point3d p = result.Value;

4.1.2 读入 Double 型数据
//获取输入半径,并转换为double类型 PromptDoubleResult Temp_radius = ed.GetDouble(r); //通过PromptDoubleResult下的属性Value转换为.NET下的Double类型 double radius = Temp_radius.Value;

4.1.3 读入 Point
//声明圆对象 Circle c = new Circle(); c.Center = p; c.Radius = radius;

4.1.4 拾取实体
Entity ent = (Entity)acTrans.GetObject(id, OpenMode.ForRead, false);

4.1.5 打开 dwg 文件

//打开并插入dwg文件 [CommandMethod("insertdwg")] static public void insertdwg() { OpenFileDialog pOpenFileDialog = new OpenFileDialog("打开地形图", null, "dwg", "openfile", OpenFileDialog.OpenFileDialogFlags.DefaultIsFolder); pOpenFileDialog.ShowDialog(); string fname = pOpenFileDialog.Filename; Document doc = Application.DocumentManager.MdiActiveDocument; Editor ed = doc.Editor; if (!File.Exists(fname))

fname = HostApplicationServices.Current.FindFile(fname, doc.Database, FindFileHint.Default); using (Database db = new Database(false, false)) { db.ReadDwgFile(fname, FileShare.ReadWrite, true, null); using (Transaction t = doc.TransactionManager.StartTransaction()) { int n = fname.LastIndexOf("\\"); ObjectId idBTR = doc.Database.Insert(fname.Substring(n + 1, fname.Length n - 5), db, false); BlockTable bt = (BlockTable)t.GetObject(doc.Database.BlockTableId, OpenMode.ForWrite); BlockTableRecord btr = (BlockTableRecord)t.GetObject(bt[BlockTableRecord.ModelSpace], OpenMode.ForWrite); using (BlockReference bref = new BlockReference(Point3d.Origin, idBTR)) { DBObjectCollection pbrefColl = new DBObjectCollection(); bref.Explode(pbrefColl); int num = pbrefColl.Count; for (int i = 0; i < num; i++) { btr.AppendEntity(pbrefColl[i] as Entity); t.AddNewlyCreatedDBObject(pbrefColl[i], true); } } t.Commit(); } } }

4.2 选择集
4.2.1 获得 PickFirst 选择集

//选择集 [CommandMethod("PickFirst", CommandFlags.UsePickSet)]

public void CheckForPickfirstSelection() { // 获得当前文档 Editor acDocEd = Application.DocumentManager.MdiActiveDocument.Editor; // 获得 PickFirst 选择集 PromptSelectionResult acSSPrompt; acSSPrompt = acDocEd.SelectImplied(); SelectionSet acSSet; // 如果提示状态是 OK,那么对象在命令启动前已经被选择了 if (acSSPrompt.Status == PromptStatus.OK) { acSSet = acSSPrompt.Value; Application.ShowAlertDialog("您选择到的对象个数为: " + acSSet.Count.ToString()); } else { Application.ShowAlertDialog("您选择到的对象个数为: 0"); } // 清除 PickFirst 选择集 ObjectId[] idarrayEmpty = new ObjectId[0]; acDocEd.SetImpliedSelection(idarrayEmpty); // 要求在图形区域中选择对象 acSSPrompt = acDocEd.GetSelection(); // 如果提示状态是 OK,对象就被选择了 if (acSSPrompt.Status == PromptStatus.OK) { acSSet = acSSPrompt.Value; Application.ShowAlertDialog("您移除的对象个数为:" +acSSet.Count.ToString()); } else { Application.ShowAlertDialog("您移除的对象个数为:0"); } }

4.2.2 在图形区域中选择对象

//在图形区域中选择对象 [CommandMethod("SelectObjectsOnscreen")] public void SelectObjectsOnscreen()

{ // 获得当前文档和数据库 Document acDoc = Application.DocumentManager.MdiActiveDocument; Database acCurDb = acDoc.Database; // 要求在图形区域中选择对象 PromptSelectionResult acSSPrompt = acDoc.Editor.GetSelection(); SelectionSet acSSet = null; // 如果提示状态是 OK,对象就被选择了 if (acSSPrompt.Status == PromptStatus.OK) { acSSet = acSSPrompt.Value; } // 启动一个事务 using (Transaction acTrans = acCurDb.TransactionManager.StartTransaction()) { // 遍历选择集中的对象 foreach (SelectedObject acSSObj in acSSet) { // 检查以确定返回的 SelectedObject 对象是有效的 if (acSSObj != null) { // 以写的方式打开选择的对象 Entity acEnt = acTrans.GetObject(acSSObj.ObjectId, OpenMode.ForWrite) as Entity; if (acEnt != null) { // 修改对象的颜色为绿色 acEnt.ColorIndex = 3; } } } // 保存新对象到数据库中 acTrans.Commit(); } }

4.2.3 添加或合并多个选择集

#region 合并选择集 [CommandMethod("MergeSelectionSets")] public static void MergeSelectionSets() { // 获得当前文档的编辑器 Editor acDocEd = Application.DocumentManager.MdiActiveDocument.Editor; PromptSelectionResult acSSPrompt; acSSPrompt = acDocEd.GetSelection(); SelectionSet acSSet1; ObjectIdCollection acObjIdColl = new ObjectIdCollection(); // 如果提示状态是 OK,对象就被选择了 if (acSSPrompt.Status == PromptStatus.OK) { acSSet1 = acSSPrompt.Value; // 添加选择的对象到 ObjectIDCollection 中 acObjIdColl = new ObjectIdCollection(acSSet1.GetObjectIds()); } // 要求在图形区域中选择对象 acSSPrompt = acDocEd.GetSelection(); SelectionSet acSSet2; // 如果提示状态是 OK,对象就被选择了 if (acSSPrompt.Status == PromptStatus.OK) { acSSet2 = acSSPrompt.Value; // 检查 ObjectIDCollection 的大小,如果为 0 就重新初始化它 if (acObjIdColl.Count == 0) { acObjIdColl = new ObjectIdCollection(acSSet2.GetObjectIds()); } else { // 遍历第二个选择集 foreach (ObjectId acObjId in acSSet2.GetObjectIds()) { // 添加每个对象 ID 到 ObjectIDCollection 中 acObjIdColl.Add(acObjId); } } } Application.ShowAlertDialog("Number of objects selected: " +acObjIdColl.Count.ToString()); } #endregion

4.2.4 定义选择集过滤规则

#region 使用过滤器创建选择集 [CommandMethod("FilterSelectionSet")] public void FilterSelectionSet() { // 获得当前文档的编辑器 Editor acDocEd = Application.DocumentManager.MdiActiveDocument.Editor; // 创建一个 TypedValue 数组,用于定义过滤条件 TypedValue[] acTypValAr = new TypedValue[1]; acTypValAr.SetValue(new TypedValue((int)DxfCode.Start, "CIRCLE"), 0); // 赋值过滤条件给 SelectionFilter 对象 SelectionFilter acSelFtr = new SelectionFilter(acTypValAr); // 要求在图形区域中选择对象 PromptSelectionResult acSSPrompt; acSSPrompt = acDocEd.GetSelection(acSelFtr); // 如果提示状态是 OK,对象就被选择了 if (acSSPrompt.Status == PromptStatus.OK) { SelectionSet acSSet = acSSPrompt.Value; Application.ShowAlertDialog("所选择对象个数: " + acSSet.Count.ToString()); } else { Application.ShowAlertDialog("所选择对象个数:0"); } } #endregion

4.2.5 从选择集中移除对象
// 清除 PickFirst 选择集 ObjectId[] idarrayEmpty = new ObjectId[0]; acDocEd.SetImpliedSelection(idarrayEmpty);

// 要求在图形区域中选择对象 acSSPrompt = acDocEd.GetSelection(); // 如果提示状态是 OK,对象就被选择了 if (acSSPrompt.Status == PromptStatus.OK) { acSSet = acSSPrompt.Value; Application.ShowAlertDialog("您移除的对象个数为: " +acSSet.Count.ToString()); } else { Application.ShowAlertDialog("您移除的对象个数为: 0"); }

4.3 扩展属性
#region 创建扩展属性过滤器建立选择集 [CommandMethod("FilterXdata")] public void FilterXdata() {// 获得当前文档的编辑器 Editor acDocEd = Application.DocumentManager.MdiActiveDocument.Editor; // 创建一个 TypedValue 数组,用于定义过滤条件 TypedValue[] acTypValAr = new TypedValue[2]; acTypValAr.SetValue(new TypedValue((int)DxfCode.Start, "Circle"), 0); acTypValAr.SetValue(new TypedValue((int)DxfCode.ExtendedDataRegAppName, "MY_APP"), 1); SelectionFilter acSelFtr = new SelectionFilter(acTypValAr); // 要求在图形区域中选择对象 PromptSelectionResult acSSPrompt; acSSPrompt = acDocEd.GetSelection(acSelFtr); // 如果提示状态是 OK,对象就被选择了 if (acSSPrompt.Status == PromptStatus.OK) { SelectionSet acSSet = acSSPrompt.Value; Application.ShowAlertDialog("您选择到的对象个数为: " + acSSet.Count.ToString()); } else { Application.ShowAlertDialog("您选择到的对象个数为: 0"); } } #endregion


相关文章:
CAD二次开发实验报告
CAD二次开发实验报告_计算机软件及应用_IT/计算机_专业资料。江西理工大学 ...4 using Autodesk.AutoCAD.EditorInput; [assembly: CommandClass(typeof(HelloWorld...
cad实验报告4
暂无评价|0人阅读|0次下载|举报文档 cad实验报告4_调查/报告_表格/模板_实用...二.实验内容 1、 在一个.ddb 文件中建立一个新的 PCB 元件封装库文件,在该...
CAD实验报告4
CAD实验报告4 隐藏>> 实验四 一、实验目的: 电路仿真 1、掌握用 protel 99 se 进行电路仿真的步骤。 2、掌握常用的电路仿真方式及其应用。 3、了解电路元件的...
CAD二次实验报告3
CAD二次实验报告3_调查/报告_表格/模板_实用文档 暂无评价|0人阅读|0次下载|举报文档 CAD二次实验报告3_调查/报告_表格/模板_实用文档。CAD 开发实验(四) ...
CAD实验报告
4页 免费C​A​D​实​验​报​告 暂无评价|0人阅读|0次下载|举报...三、实验数据与结果分析 1、原理图 《电子线路 CAD 设计》实验报告 2、PCB ...
吴玉文CAD实验四
暂无评价|0人阅读|0次下载|举报文档吴玉文CAD实验四_学习总结_总结/汇报_实用文档。武夷学院实验报告 课程名称:_计算机绘图_ 项目名称:__装配图的绘制_ 姓名:_ ...
机械CAD技术基础实验报告4
机械CAD技术基础实验报告4_机械/仪表_工程科技_专业资料。实验报告 课程名称: 机械...1、有一组实验数据如下表,它有 7 个点,现要求用 Matlab 语言进行二次多项...
CAD实验报告
暂无评价|0人阅读|0次下载|举报文档 CAD实验报告_化学_自然科学_专业资料。金陵...(2) 线型、图形块和块的属性。 (3) 图形的外部引用及尺寸标注。 (4) 图形...
CAD实验报告二
CAD实验报告二 隐藏>> 太原理工大学现代科技学院 电路 CAD 课程 实验报告 专业班级 学姓号名 通信 10- 4 班 2010101791 刘思宇 指导教师 太原理工大学现代科技学...
cad实验报告2
暂无评价|0人阅读|0次下载|举报文档 cad实验报告2_实习总结_总结/汇报_实用文档...答:第一步 第二步 第三步 第四步 第五步 新建电路原理图元件库文件 设置...
更多相关标签:
cad实验报告 | 电子线路cad实验报告 | cad实验报告总结 | cad上机实验报告 | 控制系统cad实验报告 | 电子电路cad实验报告 | cad实验报告心得 | cad基础实验报告 |