明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 2837|回复: 4

获取选择集的中心点(包括用程序创建图块对象)

[复制链接]
发表于 2012-7-3 09:07:05 | 显示全部楼层 |阅读模式
本帖最后由 lzx838 于 2012-7-3 09:14 编辑

  1.         public static void FindCenterPoint()
  2.         {
  3.             Database db = HostApplicationServices.WorkingDatabase;
  4.             Editor ed = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument.Editor;
  5.             try
  6.             {
  7.                 using (Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument.LockDocument())
  8.                 {
  9.                     PromptSelectionOptions pso = new PromptSelectionOptions();
  10.                     pso.MessageForAdding = "\n请选取要查找中心点的对象:";
  11.                     PromptSelectionResult ents = ed.GetSelection(pso);
  12.                     if (ents.Status == PromptStatus.OK)
  13.                     {
  14.                         using (Transaction trans = db.TransactionManager.StartTransaction())
  15.                         {
  16.                             BlockTable bt = (BlockTable)trans.GetObject(db.BlockTableId, OpenMode.ForRead, false);
  17.                             BlockTableRecord btr = (BlockTableRecord)trans.GetObject(bt[BlockTableRecord.ModelSpace], OpenMode.ForWrite, false);

  18.                             Extents3d box = new Extents3d();
  19.                             foreach (ObjectId id in ents.Value.GetObjectIds())
  20.                             {
  21.                                 Entity entity = trans.GetObject(id, OpenMode.ForWrite, true) as Entity;
  22.                                 if (entity != null && !(entity is Spline))
  23.                                 {
  24.                                     box.AddExtents(entity.GeometricExtents);
  25.                                 }
  26.                                 else
  27.                                 {
  28.                                     Spline spLineObject = entity as Spline;


  29.                                     box.AddExtents(spLineObject.ToPolyline(1000).GeometricExtents);
  30.                                 }
  31.                             }

  32.                             int intIndex = 0;
  33.                             double douWidth = 0;

  34.                             //创建边界线
  35.                             Polyline polyLineObject = new Polyline();
  36.                             polyLineObject.AddVertexAt(intIndex++, new Point2d(box.MinPoint.X, box.MinPoint.Y), 0, douWidth, douWidth);
  37.                             polyLineObject.AddVertexAt(intIndex++, new Point2d(box.MinPoint.X, box.MaxPoint.Y), 0, douWidth, douWidth);
  38.                             polyLineObject.AddVertexAt(intIndex++, new Point2d(box.MaxPoint.X, box.MaxPoint.Y), 0, douWidth, douWidth);
  39.                             polyLineObject.AddVertexAt(intIndex++, new Point2d(box.MaxPoint.X, box.MinPoint.Y), 0, douWidth, douWidth);
  40.                             polyLineObject.LayerId = LzxLibrary.LzxSymbolTables.LzxLayerTable.LzxLayerTableRecord.CreateLayer("实体边界", 4);
  41.                             polyLineObject.Closed = true;
  42.                             btr.AppendEntity(polyLineObject);
  43.                             trans.AddNewlyCreatedDBObject(polyLineObject, true);

  44.                             //插入中心点图块
  45.                             BlockReference blockObject = new BlockReference(
  46.                                 LzxLibrary.LzxLibraryFunction.Midpoint(box.MinPoint, box.MaxPoint),
  47.                                 COM.LzxCreateBlock.CreateBlock_CenterPoint());
  48.                             btr.AppendEntity(blockObject);
  49.                             trans.AddNewlyCreatedDBObject(blockObject, true);

  50.                             trans.Commit();
  51.                         }
  52.                     }
  53.                 }
  54.             }
  55.             catch (Exception ex)
  56.             {
  57.                 ed.WriteMessage("获取中心点发生错误:" + ex.Message);
  58.             }
  59.         }

评分

参与人数 1明经币 +1 收起 理由
雪山飞狐_lzh + 1

查看全部评分

 楼主| 发表于 2012-7-3 09:12:31 | 显示全部楼层
创建图块
  1.         /// <summary>
  2.         /// 创建图块_中心点
  3.         /// </summary>
  4.         /// <returns>ObjectId</returns>
  5.         public static ObjectId CreateBlock_CenterPoint()
  6.         {
  7.             ObjectId objectId = ObjectId.Null;
  8.             Point3d insPoint = Point3d.Origin;
  9.             List<Entity> entitys = new List<Entity>();

  10.             //创建圆
  11.             Circle circleObject = new Circle(insPoint, Vector3d.ZAxis, 0.2);
  12.             circleObject.ColorIndex = 7;
  13.             entitys.Add(circleObject);

  14.             //创建直线1
  15.             Line lineObject1 = new Line(new Point3d(-0.2, 0, 0), new Point3d(+0.2, 0, 0));
  16.             lineObject1.ColorIndex = 2;
  17.             entitys.Add(lineObject1);

  18.             //创建直线2
  19.             Line lineObject2 = new Line(new Point3d(0, -0.2, 0), new Point3d(0, +0.2, 0));
  20.             lineObject2.ColorIndex = 2;
  21.             entitys.Add(lineObject2);

  22.             objectId = LzxLibrary.LzxSymbolTables.LzxBlockTableClass.AppendEntityToBlockTable("CenterBlock", insPoint, entitys);

  23.             return objectId;
  24.         }
 楼主| 发表于 2012-7-3 09:13:12 | 显示全部楼层
  1.         /// <summary>
  2.         /// 将实体对象加入到块表中,创建图块对象。
  3.         /// </summary>
  4.         /// <param name="BlockName">图块名称</param>
  5.         /// <param name="InsPoint">图块插入点</param>
  6.         /// <param name="entitys">要加入图块的实体对象</param>
  7.         /// <returns>实体对象ObjectId</returns>
  8.         public static ObjectId AppendEntityToBlockTable(string BlockName, Point3d InsPoint, List<Entity> entitys)
  9.         {
  10.             ObjectId blockId = ObjectId.Null;                   //用于返回所创建的块的对象Id
  11.             try
  12.             {
  13.                 if (entitys.Count > 0)
  14.                 {
  15.                     Database db = HostApplicationServices.WorkingDatabase;
  16.                     BlockTableRecord record = new BlockTableRecord();   //创建一个BlockTableRecord类的对象,表示所要创建的块
  17.                     record.Name = BlockName;                            //设置块名            
  18.                     using (Transaction trans = db.TransactionManager.StartTransaction())
  19.                     {
  20.                         //设置块的基点,也就是块的插入点
  21.                         record.Origin = InsPoint;

  22.                         //将实体对象加入到新建的BlockTableRecord对象
  23.                         foreach (var item in entitys)
  24.                         {
  25.                             record.AppendEntity(item);
  26.                         }

  27.                         //以写的方式打开块表
  28.                         BlockTable bt = (BlockTable)trans.GetObject(db.BlockTableId, OpenMode.ForWrite);

  29.                         //判断是否存在相同的块名
  30.                         if (!bt.Has(BlockName))
  31.                         {
  32.                             blockId = bt.Add(record);                   //在块表中加入块
  33.                             trans.AddNewlyCreatedDBObject(record, true);//通知事务处理
  34.                         }
  35.                         else
  36.                         {
  37.                             blockId = bt[BlockName];
  38.                         }
  39.                         trans.Commit();
  40.                     }
  41.                 }
  42.             }
  43.             catch (Exception ex)
  44.             {
  45.                 throw ex;
  46.             }
  47.             return blockId;
  48.         }
发表于 2012-7-3 21:59:16 | 显示全部楼层
支持一个,第一个坐上沙发
发表于 2012-10-14 22:29:10 | 显示全部楼层
本帖最后由 xman00 于 2012-10-14 22:30 编辑

楼主程序在08中测试,返回:no function definition: AUTODESK,
二、三楼程序在08中测试no function definition: INSPOINT
请求确认,正在求教本类问题,两位若看到,请到本版”快速建块的问题,知道的进“贴中进行讨论
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-11-25 16:32 , Processed in 0.179312 second(s), 27 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表