Координата вершины Polyline BlockReference в WCS Paper Space средствами Net.API?

Автор Тема: Координата вершины Polyline BlockReference в WCS Paper Space средствами Net.API?  (Прочитано 2377 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Онлайн pavka_97Автор темы

  • ADN OPEN
  • ***
  • Сообщений: 150
  • Карма: 3
Добрый день. С помощью кода получаем: 1. WCS координату точки вставки блока в Layout, 2. "Original"  координату точки вставки блока в ее внутреннем пространстве (MCS-?). 3.  Координату одной вершины полилинии вставки блока в ее внутреннем пространстве.
Требуется найти WCS координату этой вершины полилинии в Paper Space средствами Net.API? Через геометрию в принципе можно ее высчитать, но хотелось бы через Api. Подходящий метод(матрица трансформации) найти не удалось.
Код - C# [Выбрать]
  1. using System;
  2. using Autodesk.AutoCAD.Runtime;
  3. using Autodesk.AutoCAD.ApplicationServices;
  4. using Autodesk.AutoCAD.DatabaseServices;
  5. using Autodesk.AutoCAD.EditorInput;
  6. using System.Collections.Generic;
  7. using System.Linq;
  8. using System.Text;
  9. using System.Runtime.InteropServices;
  10. using Autodesk.AutoCAD.Geometry;
  11. using Autodesk.AutoCAD.GraphicsInterface;
  12. using System.IO;
  13. using System.Collections;
  14.  
  15. namespace pavpp
  16. {
  17.     public class pavpp
  18.     {
  19.         [CommandMethod("PAVPP")]
  20.         public void Run()
  21.         {
  22.             Document doc = Application.DocumentManager.MdiActiveDocument;
  23.             Database db = doc.Database;
  24.             Editor ed = doc.Editor;
  25.             LayoutManager layoutMgr = LayoutManager.Current;
  26.             ObjectId psid = db.CurrentSpaceId;
  27.             Point2d pd;
  28.             Point3d pd3;
  29.             //Point2d pd02;
  30.             //Point3d pd03;
  31.             using (Transaction tr = db.TransactionManager.StartTransaction())
  32.             {
  33.                 Layout lt = tr.GetObject(layoutMgr.GetLayoutId(layoutMgr.CurrentLayout), OpenMode.ForRead) as Layout;
  34.                 BlockTableRecord btr = tr.GetObject(psid, OpenMode.ForRead) as BlockTableRecord;
  35.                 foreach (ObjectId id in btr)
  36.                 {
  37.                     if (id.ObjectClass.IsDerivedFrom(RXClass.GetClass(typeof(BlockReference))))
  38.                     {
  39.                         BlockReference br = tr.GetObject(id, OpenMode.ForRead) as BlockReference;
  40.                         BlockTableRecord acBlkTblRec = tr.GetObject(br.BlockTableRecord, OpenMode.ForRead) as BlockTableRecord;
  41.                         pd3 = br.Position;
  42.                         Point3d Position = acBlkTblRec.Origin;
  43.                         ed.WriteMessage("\n" + pd3);
  44.                         ed.WriteMessage("\n" + Position);
  45.                         foreach (ObjectId id1 in acBlkTblRec)
  46.                         {
  47.                             if (id1.ObjectClass.IsDerivedFrom(RXClass.GetClass(typeof(Autodesk.AutoCAD.DatabaseServices.Polyline))))
  48.                             {
  49.                                 Autodesk.AutoCAD.DatabaseServices.Polyline pln = tr.GetObject(id1, OpenMode.ForRead) as Autodesk.AutoCAD.DatabaseServices.Polyline;
  50.                                 pd = pln.GetPoint2dAt(1);
  51.                                 //pd03 = pln.GetPoint3dAt(1);
  52.                                 //Matrix3d wcs2ucs = doc.Editor.CurrentUserCoordinateSystem.Inverse();
  53.                                 //Point3d Position1 = pd03.TransformBy(wcs2ucs);
  54.                                 ed.WriteMessage("\n" + pd);
  55.                             }
  56.                         }
  57.                     }
  58.                 }
  59.                 tr.Commit();
  60.             }
  61.         }
  62.     }
  63. }
  64.  

Отмечено как Решение pavka_97 05-02-2019, 14:13:53

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Если я правильно понял о чем ты (а у тебя в тексте очень всё запущено), то тебя должна интересовать матрица br.BlockTransform
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение