- UID
- 303232
- 积分
- 0
- 精华
- 贡献
-
- 威望
-
- 活跃度
-
- D豆
-
- 在线时间
- 小时
- 注册时间
- 2005-8-3
- 最后登录
- 1970-1-1
|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
×
DOTNETARX helps the .net programmers write the ObjectARX programs more easily!!
[B]所附文件包括[/B] dotnetarx
dotnetarx_src
DOTNETARXHelp
适用环境:Win2K, WinXP, Microsoft Windows Server 2003
语言:C#
具体使用请参考DOTNETARX参考文档。
下面转贴一篇别人的教学文章
- [FONT=courier new]
- 本文将向你介绍一些DOTNETARX的例子。要运行文中的例子,你必须创建一个新的工程并加入DOTNETARX2.0组件,然后在代码文件中加入"using DOTNETARX;"。关于DOTNETARX的详细说明,请大家参考DOTNETARX参考文档。
- 多重选择集
- 在ObjectARX托管封装类中有一个bug,你不能使用多重选择集。例如,你不能使用选择集来同时选择圆和直线。但有了DOTNETARX2.0,你就可以使用多重选择集了。
- 下面的例子在选择集中加入半径为1.0的圆和在层ABC上的直线。
- void test()
- {
- TypedValue[] values=new TypedValue[]{
- new TypedValue(-4,"<or"),
- new TypedValue(-4,"<and"),
- new TypedValue(0,"CIRCLE"),
- new TypedValue((int)DxfCode.Real,1.0),
- new TypedValue(-4,"and>"),
- new TypedValue(-4,"<and"),
- new TypedValue(0,"Line"),
- new TypedValue((int)DxfCode.LayerName,"ABC"),
- new TypedValue(-4,"and>"),
- new TypedValue(-4,"or>")
- };
- int n=Tools.GetSelection(values).Count;//在选择集中加入对象
- Tools.Editor.WriteMessage(n.ToString());
- }
- 加入多个实体
- 在DOTNETARX1.0(也就是原来的zhfarx),如果你多次使用Tools.AddEntity来加入多个实体,那么效率将非常的低。所以在2.0中,我加入了AddEntities()函数来解决这个问题。
- 下面的例子使用AddEntities()在AutoCAD图形中加入直线和圆。
- void AddLineCircle()
- {
- Point3d pt1=new Point3d(0,0,0);
- Point3d pt2=new Point3d(50,50,0);
- Lines line=new Lines(pt1,pt2);
- Point3d center=new Point3d(50,0,0);
- Circles circle=new Circles(center,50);
- Tools.AddEntities(new Entity[]{line,center});
- }
- 组
- 下面的例子在AutoCAD中加入一个组。
- void MakeGroup()
- {
- PromptSelectionResult res=Tools.Editor.GetSelection();//选择对象
- SelectionSet ss=res.Value; //获取选择集
- ObjectId[] ids=ss.GetObjectIds(); //获取表示所选对象的objectId数组
- Group gp=new Group("grouptest",true);//创建名为grouptest的组对象
- gp.Append(new ObjectIdCollection(ids));// 加入上面的所选对象到组中
- Tools.AddDictionaryObject("ASDK_GROUPTEST",gp,Tools.Database.GroupDictionaryId);
- //使用AddDictionaryObject()函数把组加入到AutoCAD中。
- }
- 扩展记录
- 下面的例子在AutoCAD中加入一个扩展记录。
-
-
- void MakeXRecord()
- {
- Xrecord rec=new Xrecord();//创建一个扩展记录对象
- rec.Data=new ResultBuffer(
- new TypedValue((int)DxfCode.Text,"This is a test"),
- new TypedValue((int)DxfCode.Int8,0),
- new TypedValue((int)DxfCode.UcsOrg,new Point3d(0,0,0))
- );//使用Xreord的Data属性来设置Xreord的内容
- Tools.AddDictionaryObject("test",rec,Tools.Database.NamedObjectsDictionaryId);
- //使用AddDictionaryObject()函数把扩展记录加入到AutoCAD中。
- foreach (TypedValue rb in rec.Data) //输出刚才加入的条目
- {
- Tools.Editor.WriteMessage(string.Format("TypedCode={0},Value={1}\n",rb.TypeCode,rb.Value));
- }
- }
- 扩展数据
- 下面的例子在AutoCAD中加入扩展数据。
- void MakeXData()
- {
- Lines line=new Lines(new Point3d(0,0,0),new Point3d(100,100,0));
- //创建直线
- RegAppTableRecord app=new RegAppTableRecord();
- //加入扩展数据到直线,首先注册程序
- app.Name="MyApp";
- Tools.AddSymbolTableRecord(app,Tools.Database.RegAppTableId);
- //使用AddSymbolTableRecord 函数把app加入到RegAppTable。
-
- line.XData=new ResultBuffer(new TypedValue((int)DxfCode.ExtendedDataRegAppName,"MyApp"),
- new TypedValue((int)DxfCode.ExtendedDataAsciiString,"This is some xdata string"));
- //设置直线的XData属性
- Tools.AddEntity(line);//加入直线到数据库中
- foreach (TypedValue rb in line.XData)// 输出刚才加入的条目
- {
- Tools.Editor.WriteMessage(string.Format("TypedCode={0},Value={1}\n",rb.TypeCode,rb.Value));
- }
- }
- 复制和移动
- 下面的例子先使用Copy()获取所选实体的拷贝,然后使用Move()来移动这个拷贝。
- void test()
- {
- PromptEntityResult res = Tools.Editor.GetEntity("please select an entity to copy:\n");
- ObjectId id= Tools.Copy(res.ObjectId);
- Tools.Move(id,res.PickedPoint,res.PickedPoint.Add(new Vector3d(20,20,0)));
- }
- 镜像拷贝
- 下面的例子镜像拷贝所选的实体。
- void test()
- {
- Editor ed=Tools.Editor;
- PromptEntityResult res =ed.GetEntity("please select an entity:\n");
- Point3d pt1=ed.GetPoint("Select the first point of the mirror axis:\n").Value;
- Point3d pt2=ed.GetPoint("Select the second point of the mirror axis:\n").Value;
- Tools.Mirror(res.ObjectId,pt1,pt2,false);
- }
- 偏移
- 下面的例子偏移所选的实体。
- void test()
- {
- Editor ed=Tools.Editor;
- PromptEntityResult res =ed.GetEntity("please select an entity:\n");
- Tools.Offset(res.ObjectId,20);
- }
- 旋转
- 下面的例子旋转所选的实体45度角。
- void test()
- {
- Editor ed=Tools.Editor;
- PromptEntityResult res =ed.GetEntity("please select an entity:\n");
- Point3d pt1=ed.GetPoint("Select the base point of rotation:\n").Value;
- Tools.Rotate(res.ObjectId,pt1,45);//注意:是角度而不是弧度
- }
- 缩放
- 下面的例子放大所选的实体2倍。
- void test()
- {
- Editor ed=Tools.Editor;
- PromptEntityResult res =ed.GetEntity("please select an entity:\n");
- Point3d pt1=ed.GetPoint("Select the base point of scaling:\n").Value;
- Tools.Scale(res.ObjectId,pt1,2);
- }
- 加入符号表记录
- 下面的例子加入一个名为Test的层
- void CreateLayer()
- {
- LayerTableRecord ltr=new LayerTableRecord();
- ltr.Name="Test";
- Tools.AddSymbolTableRecord(ltr,Tools.Database.LayerTableId);
- }
- 获取符号表遍历器
- 下面的例子使用GetIteratorForSymbolTable()来遍历层表,并输出层的名字。
- void test()
- {
- DBObjectCollection objs= Tools.GetIteratorForSymbolTable(Tools.Database.LayerTableId);
- foreach (DBObject obj in objs)
- {
- LayerTableRecord ltr=(LayerTableRecord)obj;
- Tools.Editor.WriteMessage(ltr.Name+"\n");
- }
- }
- 选择过一个点的所有实体
- void test()
- {
- PromptPointResult res=Tools.Editor.GetPoint("Please select a point:\n");
- Point3d pt=res.Value;
- int n=Tools.SelectAtPoint(pt).Count;
- Tools.Editor.WriteMessage(n.ToString());
- }
- [/FONT]
|
|