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

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实验报告完整版
四次CAD实验报告格式 暂无评价 4页 1财富值 CAD实验报告 19页 1财富值 CAD实验报告 12页 2财富值 实验报告cad 13页 10财富值 cad 实验报告 14页 5财富值...
CAD二次实验报告2
CAD 开发实验(二) 实验二 AutoCAD 基本图形对象创建与编辑 一、主要内容 1、 创建直线 2、 创建圆 3、 创建圆弧 4、 创建多段线 5、 创建椭圆 6、 样条...
cad实验报告4
cad实验报告4_调查/报告_表格/模板_实用文档。太原理工大学现代科技学院 课程 实验...二.实验内容 1、 在一个.ddb 文件中建立一个新的 PCB 元件封装库文件,在...
CAD二次实验报告3
CAD二次实验报告3_调查/报告_表格/模板_实用文档 暂无评价|0人阅读|0次下载|举报文档 CAD二次实验报告3_调查/报告_表格/模板_实用文档。CAD 开发实验(四) ...
CAD实验报告
4页 免费C​A​D​实​验​报​告 暂无评价|0人阅读|0次下载|举报...三、实验数据与结果分析 1、原理图 《电子线路 CAD 设计》实验报告 2、PCB ...
CAD实验报告4
CAD实验报告4 隐藏>> 实验四 一、实验目的: 电路仿真 1、掌握用 protel 99 se 进行电路仿真的步骤。 2、掌握常用的电路仿真方式及其应用。 3、了解电路元件的...
cad实验报告2
cad实验报告2_实习总结_总结/汇报_实用文档。太原理工大学现代科技学院 课程 实验...4.请写出引脚属性对话框中各个引脚电气特性的含义。 答:Electrical Type 引脚...
实验报告CAD_图文
实验报告CAD_工学_高等教育_教育专区。西华大学 实验报告 CAD/CAE软件理论与...(4)在“设置坐标类型”菜单管理器中单击 “笛卡尔” ,系统弹出一个记事本窗口...
CAD实验报告二
CAD实验报告二 隐藏>> 太原理工大学现代科技学院 电路 CAD 课程 实验报告 专业班级 学姓号名 通信 10- 4 班 2010101791 刘思宇 指导教师 太原理工大学现代科技学...
CAD实验报告
CAD实验报告_实习总结_总结/汇报_实用文档。物流与工业计算机辅助设计 实验报告学...在矩形的四个角上依次执行绘制直线的命令,绘制出如下图 1-2 所示。 2 图 ...
更多相关标签:
cad实验报告 | 电子线路cad实验报告 | cad实验报告总结 | cad上机实验报告 | 电子电路cad实验报告 | 控制系统cad实验报告 | cad 综合实验报告 | cad实验报告心得 |