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

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、基于用户交互式的信息输入 2、创建选择集 3、给图形实体...
CAD二次实验报告2
CAD 开发实验(二) 实验二 AutoCAD 基本图形对象创建与编辑 一、主要内容 1、 创建直线 2、 创建圆 3、 创建圆弧 4、 创建多段线 5、 创建椭圆 6、 样条...
计算方法实验报告4版
暂无评价|0人阅读|0次下载|举报文档 计算方法实验报告4版_理学_高等教育_教育...[A2,y'] 2)运行 CA4=CAdams4PC(f,a,b,N,ya); y=solvef3(a:(b-a...
cad实验报告4
暂无评价|0人阅读|0次下载|举报文档 cad实验报告4_调查/报告_表格/模板_实用...二.实验内容 1、 在一个.ddb 文件中建立一个新的 PCB 元件封装库文件,在该...
cad-4实验报告完整版
四次CAD实验报告格式 暂无评价 4页 1财富值 CAD实验报告 19页 1财富值 CAD实验报告 12页 2财富值 实验报告cad 13页 10财富值 cad 实验报告 14页 5财富值...
CAD二次实验报告3
CAD二次实验报告3_调查/报告_表格/模板_实用文档 暂无评价|0人阅读|0次下载|举报文档 CAD二次实验报告3_调查/报告_表格/模板_实用文档。CAD 开发实验(四) ...
CAD实验报告4
CAD实验报告4 隐藏>> 实验四 一、实验目的: 电路仿真 1、掌握用 protel 99 se 进行电路仿真的步骤。 2、掌握常用的电路仿真方式及其应用。 3、了解电路元件的...
第四次CAD实验报告格式
134页 2财富值 素描 35页 免费如要投诉违规内容,请到百度文库投诉中心;如要提出功能问题或意见建议,请点击此处进行反馈。 第四次CAD实验报告格式 隐藏>> 物理 学...
CAD上机实验报告4
暂无评价|0人阅读|0次下载|举报文档CAD 作业 4-35 一、题目 利用 Matlab 程序...'余弦脉冲的谐波分解系数'); 三、程序截图 实验四 第 1 页 实验四2 ...
cad实验报告2
暂无评价|0人阅读|0次下载|举报文档 cad实验报告2_实习总结_总结/汇报_实用文档...答:第一步 第二步 第三步 第四步 第五步 新建电路原理图元件库文件 设置...
更多相关标签:
cad实验报告 | cad实验报告总结 | cad上机实验报告 | 电子线路cad实验报告 | 电子电路cad实验报告 | cad实验报告心得 | 广州大学cad实验报告 | cadcam实验报告 |