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

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上机实验报告4
暂无评价|0人阅读|0次下载|举报文档CAD 作业 4-35 一、题目 利用 Matlab 程序...'余弦脉冲的谐波分解系数'); 三、程序截图 实验四 第 1 页 实验四2 ...
cad实验报告4
cad实验报告4_调查/报告_表格/模板_实用文档。太原理工大学现代科技学院 课程 实验...二.实验内容 1、 在一个.ddb 文件中建立一个新的 PCB 元件封装库文件,在...
cad实验报告2
cad实验报告2_实习总结_总结/汇报_实用文档。太原理工大学现代科技学院 课程 实验...4.请写出引脚属性对话框中各个引脚电气特性的含义。 答:Electrical Type 引脚...
CAD实验报告4
CAD实验报告4 隐藏>> 实验四 一、实验目的: 电路仿真 1、掌握用 protel 99 se 进行电路仿真的步骤。 2、掌握常用的电路仿真方式及其应用。 3、了解电路元件的...
CAD实验4
CAD实验4_电子/电路_工程科技_专业资料。实验报告 课程名称: 机械 CAD 技术基础...用一个脚本文件组织好,并手写出该脚本文件的具体 内容; (2) 用屏拷截图显示...
AutoCAD二次开发实验四
AutoCAD二次开发实验四_计算机软件及应用_IT/计算机_专业资料 暂无评价|0人阅读|0次下载|举报文档 AutoCAD二次开发实验四_计算机软件及应用_IT/计算机_专业资料。...
机械CAD技术基础实验报告4
机械CAD技术基础实验报告4_机械/仪表_工程科技_专业资料。实验报告 课程名称: 机械...用一个脚本文件组织好,并手写出该脚本文件的具体 内容; (2) 用屏拷截图显示...
CAD实验报告
CAD实验报告_实习总结_总结/汇报_实用文档。物流与工业计算机辅助设计 实验报告学...在矩形的四个角上依次执行绘制直线的命令,绘制出如下图 1-2 所示。 2 图 ...
CAD实验报告_图文
暂无评价|0人阅读|0次下载|举报文档CAD实验报告_实习总结_总结/汇报_实用文档。...6、 在 Protel 的文件夹中建立名为 lx4.ddb 设计数据库文件,将步骤 2 中...
大学本科 CAD实验报告汇总
暂无评价|0人阅读|0次下载|举报文档大学本科 CAD实验报告汇总_工学_高等教育_...4 实验二 实验二: 基本绘图命令 (基本验证性实验、2 学时) 基本验证性实验...
更多相关标签: