C#语言有很多值得学习的地方,这里我们主要介绍C# CreateEmployee()函数,包括介绍 测试C# CreateEmployee()函数。加入一个Test命令来测试CreateEmployee等方面。
修改C# CreateEmployee()函数以重用
1)让我们来修改C# CreateEmployee()函数,以让它可以接收名字、薪水、部门和职位并返回创建的雇员块索引的ObjectId。函数的形式如下(你可以改变参数顺序)
- public ObjectId CreateEmployee
(string name, string division, double salary, Point3d pos)
2) 移除上面函数中的CommandMethod属性”CREATE”,这样它就不再是用来创建雇员的命令。
3) 修改函数的代码,这样就可以正确地设置块索引的名字、职位、部门和薪水和它的扩展字典。
- //替换
- BlockReference br = new BlockReference
(new Point3d(10, 10, 0), CreateEmployeeDefinition());- //为
- BlockReference br = new BlockReference
(pos, CreateEmployeeDefinition());
- //替换
- xRec.Data = new ResultBuffer(
- new TypedValue((int)DxfCode.Text, "Earnest Shackleton"),
- new TypedValue((int)DxfCode.Real, 72000),
- new TypedValue((int)DxfCode.Text, "Sales"));
- //为
- xRec.Data = new ResultBuffer(
- new TypedValue((int)DxfCode.Text, name),
- new TypedValue((int)DxfCode.Real, salary),
- new TypedValue((int)DxfCode.Text, division));
4) 因为我们把雇员的名字从MText替换成块的属性定义,因此我们要创建一个相应的属性索引来显示雇员的名字。属性索引将使用属性定义的属性。
- //替换:
- btr.AppendEntity(br);//加入索引到模型空间
- trans.AddNewlyCreatedDBObject(br,true);//让事务处理知道
- //为
- AttributeReferenceattRef=newAttributeReference();
- //遍历雇员块来查找属性定义
- BlockTableRecordempBtr=(BlockTableRecord)trans.
GetObject(bt["EmployeeBlock"],OpenMode.ForRead);- foreach(ObjectIdidinempBtr)
- {
- Entityent=(Entity)trans.GetObject(id,OpenMode.ForRead,false);
- //打开当前的对象!
- if(entisAttributeDefinition)
- {
- //设置属性为属性索引中的属性定义
- AttributeDefinitionattDef=((AttributeDefinition)(ent));
- attRef.SetPropertiesFrom(attDef);
- attRef.Position=newPoint3d(attDef.Position.X+br.Position.X,
attDef.Position.Y+br.Position.Y,attDef.Position.Z+br.Position.Z);- attRef.Height=attDef.Height;
- attRef.Rotation=attDef.Rotation;
- attRef.Tag=attDef.Tag;
- attRef.TextString=name;
- }
- }
- //把索引加入模型空间
- btr.AppendEntity(br);
- //把属性索引加入到块索引
- br.AttributeCollection.AppendAttribute(attRef);
- //让事务处理知道
- trans.AddNewlyCreatedDBObject(attRef,true);
- trans.AddNewlyCreatedDBObject(br,true);
5)不要忘记返回雇员块索引的ObjectId,但要在提交事务处理之后才能返回:
- trans.Commit();
- return br.ObjectId;
6) 测试C# CreateEmployee()函数。加入一个Test命令来测试CreateEmployee:
- [CommandMethod("Test")]
- public void Test()
- {
- CreateEmployee("Earnest Shackleton", "Sales", 10000, new Point3d(10, 10, 0));
- }
【编辑推荐】