Системы координат. Работа с WCS и UCS.

Автор Тема: Системы координат. Работа с WCS и UCS.  (Прочитано 16040 раз)

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

Оффлайн Дмитрий Загорулькин

  • ADN
  • *
  • Сообщений: 2531
  • Карма: 737
Re: Системы координат. Работа с WCS и UCS.
« Ответ #15 : 17-08-2017, 17:25:17 »
А какой смысл в строках с 19 по 29? Еще раз, но более сложным способом получить то, что и так получено в 18 строке? :)

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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Системы координат. Работа с WCS и UCS.
« Ответ #16 : 17-08-2017, 17:27:55 »
Вместо
Код - C# [Выбрать]
  1. Matrix3d curWCSMatrix = Matrix3d.AlignCoordinateSystem(
  2.                 Point3d.Origin,
  3.                 Vector3d.XAxis,
  4.                 Vector3d.YAxis,
  5.                 Vector3d.ZAxis,
  6.                 curUCS.Origin,
  7.                 curUCS.Xaxis,
  8.                 curUCS.Yaxis,
  9.                 curUCS.Zaxis
  10.                 );
достаточно
Код - C# [Выбрать]
  1. Matrix3d curWCSMatrix = curUCSMatrix.Inverse();
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Системы координат. Работа с WCS и UCS.
« Ответ #17 : 17-08-2017, 17:31:13 »
А какой смысл в строках с 19 по 29? Еще раз, но более сложным способом получить то, что и так получено в 18 строке? :)
Это он обратную матрицу получает. Зачем - я не смотрел.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Дмитрий Загорулькин

  • ADN
  • *
  • Сообщений: 2531
  • Карма: 737
Re: Системы координат. Работа с WCS и UCS.
« Ответ #18 : 17-08-2017, 17:54:27 »
Это он обратную матрицу получает. Зачем - я не смотрел.
Да, невнимательно посмотрел.
Дмитриий, надо внимательнее читать статью.
Сперва там идет громоздкий и сложный код. А ниже (гугл поможет в переводе, если что):
Цитировать
Checking the code there more times, got more confused about why the simple task had to be done that way, which is redundant, inefficient, and error prone. In fact, as demonstrated hundreds of times before in our posts, a single line of code can transform the picked point, ppr.Value, from the current UCS to the WCS so easily and reliably.
И еще ниже - более простой код преобразования точки из UCS в WCS.

Оффлайн ДмитриийАвтор темы

  • ADN OPEN
  • Сообщений: 9
  • Карма: 0
Re: Системы координат. Работа с WCS и UCS.
« Ответ #19 : 18-08-2017, 10:27:39 »

И еще ниже - более простой код преобразования точки из UCS в WCS.
Да действительно, не полностью разобрался. Спасибо еще раз за разъяснения, постараюсь все учесть и быть внимательнее!

Оффлайн nolte

  • ADN OPEN
  • **
  • Сообщений: 53
  • Карма: 0
  • Skype: leoleo3172
Re: Системы координат. Работа с WCS и UCS.
« Ответ #20 : 24-08-2017, 18:30:00 »


Код - C# [Выбрать]
  1.  [CommandMethod("OffsetObject")]
  2.  
  3.         public static void OffsetObject()
  4.         {
  5.  
  6.             Point3d pt;
  7.             PromptPointResult ppr;
  8.             PromptPointOptions ppo = new PromptPointOptions("");
  9.             using (Transaction tr = db.TransactionManager.StartTransaction())
  10.             {
  11.                 ppo = new PromptPointOptions("");
  12.                 ppo.Message = "\nEnter start point :";
  13.                 ppr = ed.GetPoint(ppo);
  14.                 if (System.Convert.ToInt32(Application.GetSystemVariable("WORLDUCS")) == 1)
  15.                     pt = ppr.Value;
  16.                 else
  17.                     pt = ppr.Value.TransformBy(ed.CurrentUserCoordinateSystem);
  18.                 tr.Commit();
  19.             }
  20.             Point2d ptstart = new Point2d(pt.X, pt.Y);
  21.             ppo = new PromptPointOptions("");
  22.             ppo.Message = "\nEnter end point :";
  23.             ppo.UseBasePoint = true;
  24.             ppo.BasePoint = pt;
  25.             ppr = ed.GetPoint(ppo);
  26.             if (System.Convert.ToInt32(Application.GetSystemVariable("WORLDUCS")) == 1)
  27.                 pt = ppr.Value;
  28.             else
  29.                 pt = ppr.Value.TransformBy(ed.CurrentUserCoordinateSystem);
  30.             Point2d ptend = new Point2d(pt.X, pt.Y);
  31.             using (Transaction acTrans = db.TransactionManager.StartTransaction())
  32.             {
  33.                 BlockTable acBlkTbl;
  34.                 acBlkTbl = acTrans.GetObject(db.BlockTableId,
  35.                                              OpenMode.ForRead) as BlockTable;
  36.                 BlockTableRecord acBlkTblRec;
  37.                 acBlkTblRec = acTrans.GetObject(acBlkTbl[BlockTableRecord.ModelSpace],
  38.                                                 OpenMode.ForWrite) as BlockTableRecord;
  39.  
  40.                 Polyline acPoly = new Polyline();
  41.                 acPoly.SetDatabaseDefaults();
  42.                 acPoly.AddVertexAt(0, ptstart, 0, 0, 0);
  43.                 acPoly.AddVertexAt(1, ptend, 0, 0, 0);
  44.  
  45.                 acBlkTblRec.AppendEntity(acPoly);
  46.                 acTrans.AddNewlyCreatedDBObject(acPoly, true);
  47.  
  48.                 DBObjectCollection acDbObjColl = acPoly.GetOffsetCurves(12);
  49.                
  50.                 foreach (Entity acEnt in acDbObjColl)
  51.                 {
  52.  
  53.                     acBlkTblRec.AppendEntity(acEnt);
  54.                     acTrans.AddNewlyCreatedDBObject(acEnt, true);
  55.                     acEnt.Layer = "3";
  56.                 }
  57.  
  58.                 acPoly.Layer = "4";
  59.                 acPoly.ConstantWidth = 6;
  60.  
  61.                 acTrans.Commit();
  62.                
  63.             }
  64.         }


в одном слове 2 ошибки.
первая по теме. если я черчу линию в ПСК, то первая точка убегает(как я понимаю получает координаты МСК). Это видно на видео. Возможно ли это побороть, подумал что заключив получение 1 точки в using решу проблему ан нет.
и второй вопрос.
сделать OFFSET еще одной линии, на видео зеленая, следует просто повторить код OFFSET, либо есть более красивый ход.
« Последнее редактирование: 24-08-2017, 19:50:51 от Александр Ривилис »
Лень - двигатель прогресса.

Оффлайн Дмитрий Загорулькин

  • ADN
  • *
  • Сообщений: 2531
  • Карма: 737
Re: Системы координат. Работа с WCS и UCS.
« Ответ #21 : 24-08-2017, 18:52:02 »
Спойлер с кода можно снять - код не такой уж и длинный.
Транзакцию из выбора точек можно убрать - она там лишняя.
Для решения первой проблемы, в строке 24 пишем так:
Код - C# [Выбрать]
  1. ppo.BasePoint = ppr.Value;
То есть, точка, полученная в выборе без всяких преобразований.

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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Системы координат. Работа с WCS и UCS.
« Ответ #22 : 24-08-2017, 19:52:52 »
nolte
1. Используй спойлер только если код длиннее 300 строк или его следует спрятать от незарегистрированных пользователей.
2. Как вставлять видео на форум написано у меня в подписи. Изучи и пользуйся.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Системы координат. Работа с WCS и UCS.
« Ответ #23 : 24-08-2017, 20:02:51 »
сделать OFFSET еще одной линии, на видео зеленая, следует просто повторить код OFFSET, либо есть более красивый ход.
Вопрос не понял.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн nolte

  • ADN OPEN
  • **
  • Сообщений: 53
  • Карма: 0
  • Skype: leoleo3172
Re: Системы координат. Работа с WCS и UCS.
« Ответ #24 : 24-08-2017, 21:43:52 »
линия должна состоять из 3 линий по центру одного слоя и по бокам линии на другом слое. то есть офсет 2 раза основной линии.
что то типа
Код - C# [Выбрать]
  1. DBObjectCollection acDbObjColl;
  2. acDbObjColl.Add(acPoly.GetOffsetCurves(12));
  3. acDbObjColl.Add(acPoly.GetOffsetCurves(-12));
  4.  

но это выдает ошибку.
Лень - двигатель прогресса.

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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Системы координат. Работа с WCS и UCS.
« Ответ #25 : 24-08-2017, 22:00:19 »
но это выдает ошибку.
Какую?
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн nolte

  • ADN OPEN
  • **
  • Сообщений: 53
  • Карма: 0
  • Skype: leoleo3172
Re: Системы координат. Работа с WCS и UCS.
« Ответ #26 : 24-08-2017, 22:06:15 »
наличие недопустимых аргументов
Лень - двигатель прогресса.

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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Системы координат. Работа с WCS и UCS.
« Ответ #27 : 24-08-2017, 22:52:27 »
наличие недопустимых аргументов
Всё правильно. DBObjectCollection.Add  добавляет элементы по одному. Т.е. добавить DBObjectCollection в DBObjectCollection при помощи метода Add  ты не можешь. Добавляй их по одному элементу:
Код - C# [Выбрать]
  1. foreach (DBObject obj in acPoly.GetOffsetCurves(12))
  2.    acDbObjColl.Add(obj);
  3. foreach (DBObject obj in acPoly.GetOffsetCurves(-12))
  4.    acDbObjColl.Add(obj);
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн nolte

  • ADN OPEN
  • **
  • Сообщений: 53
  • Карма: 0
  • Skype: leoleo3172
Re: Системы координат. Работа с WCS и UCS.
« Ответ #28 : 25-08-2017, 00:00:42 »
Дима, Александр спасибо все сработало.
Лень - двигатель прогресса.