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

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

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

Тема содержит сообщение с Решением. Нажмите здесь чтобы посмотреть его.

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

  • ADN OPEN
  • Сообщений: 9
  • Карма: 0
Здравствуйте. Пишу программу по добавлению координат на чертеже. Столкнулся с проблемой получения координат, при выборе пользовательской системы координат.
Мне нужно что бы при выборе ПСК у меня выводились координаты в МСК, но в точке где я делаю выбор, она же смещается относительно ПСК и выводит координаты не мировой а пользовательской. Смог сделать так что бы все выводилось или в ПСК или в МСК, но скомбиноровать как мне надо(точка ставится в пск, но выводит данные в мск) пока не получается.

Код прилагаю:

Извините, вам запрещён просмотр содержимого спойлеров.

Извините, вам запрещён просмотр содержимого спойлеров.

В принципе, буду благодарен если просто скинете пару ссылок где можно почитать про системы координат и как с ними взаимодействовать правильно через C#.

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

  • Administrator
  • *****
  • Сообщений: 13830
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Системы координат. Работа с WCS и UCS.
« Ответ #1 : 17-08-2017, 11:39:19 »
Мне нужно что бы при выборе ПСК у меня выводились координаты в МСК, но в точке где я делаю выбор, она же смещается относительно ПСК и выводит координаты не мировой а пользовательской. Смог сделать так что бы все выводилось или в ПСК или в МСК, но скомбиноровать как мне надо(точка ставится в пск, но выводит данные в мск) пока не получается.
Извини, но это какой-то бред. Если в двух словах, то что ты получаешь через Editor.GetPoint возвращается в ПСК(UCS). Если тебе нужно эту точку преобразовать в МСК(WCS), то нужно получить матрицу преобразования UCS->WCS при помощи Editor.CurrentUserCoordinateSystem и преобразовать по ней.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Александр Пекшев aka Modis

  • ADN Club
  • *****
  • Сообщений: 1658
  • Карма: 366
  • Отец modplus.org
    • ModPlus
Re: Системы координат. Работа с WCS и UCS.
« Ответ #2 : 17-08-2017, 11:40:42 »
Может пригодиться - код Александра Ривилиса, которым я успешно пользуюсь уже очень давно:
Код - C# [Выбрать]
  1. /// <summary>Перевод точки из пользовательской системы координат в мировую</summary>
  2.         public static Point3d UcsToWcs(Point3d pt)
  3.         {
  4.             var m = GetUcsMatrix(HostApplicationServices.WorkingDatabase);
  5.             return pt.TransformBy(m);
  6.         }
  7.         private static bool IsPaperSpace(Database db)
  8.         {
  9.             if (db.TileMode) return false;
  10.             var ed = AcApp.DocumentManager.MdiActiveDocument.Editor;
  11.             return db.PaperSpaceVportId == ed.CurrentViewportObjectId;
  12.         }
  13.         private static Matrix3d GetUcsMatrix(Database db)
  14.         {
  15.             Point3d origin;
  16.             Vector3d xAxis, yAxis;
  17.             if (IsPaperSpace(db))
  18.             {
  19.                 origin = db.Pucsorg; xAxis = db.Pucsxdir; yAxis = db.Pucsydir;
  20.             }
  21.             else
  22.             {
  23.                 origin = db.Ucsorg; xAxis = db.Ucsxdir; yAxis = db.Ucsydir;
  24.             }
  25.             var zAxis = xAxis.CrossProduct(yAxis);
  26.             return Matrix3d.AlignCoordinateSystem(
  27.                 Point3d.Origin, Vector3d.XAxis, Vector3d.YAxis, Vector3d.ZAxis,
  28.                 origin, xAxis, yAxis, zAxis);
  29.         }

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

  • Administrator
  • *****
  • Сообщений: 13830
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Системы координат. Работа с WCS и UCS.
« Ответ #3 : 17-08-2017, 11:46:24 »
Может пригодиться - код Александра Ривилиса, которым я успешно пользуюсь уже очень давно:
Это не мой код. Этот код из MGDDBG если мне не изменяет память.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN
  • *
  • Сообщений: 2531
  • Карма: 735
Re: Системы координат. Работа с WCS и UCS.
« Ответ #4 : 17-08-2017, 12:33:54 »
Все примеры, которые я встречал в интернете, использовали транзакцию по такой схеме:
Код - C# [Выбрать]
  1. using (Transaction tr = db.TransactionManager.StartTransaction())
  2. {
  3.     // Тут открытие объектов и работа с ними
  4.  
  5.     tr.Commit(); // <-- ВСЕГДА ПЕРЕД ЗАКРЫВАЮЩЕЙ ФИГУРНОЙ СКОБКОЙ
  6. }
  7.  
Вот скажите мне: откуда у Вас этот новаторский подход, когда транзакция коммитится где-то в середине блока?  :)

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

  • ADN OPEN
  • Сообщений: 9
  • Карма: 0
Re: Системы координат. Работа с WCS и UCS.
« Ответ #5 : 17-08-2017, 13:05:31 »
Вот скажите мне: откуда у Вас этот новаторский подход, когда транзакция коммитится где-то в середине блока? 
Новаторский подход, в том и заключается что он новаторский, извиняюсь, уже поправил). Пытаюсь во всем разобраться сам , поэтому могу допустить много ошибок, есть моменты которые не до конца сам могу улавливать или знать. Тут закрыл ее в середине блока, так как подумал что получил то что мне надо в этой транзакции и можно ее закрыть, ошибок в программе не вылезало, соответственно продолжил писать дальше. Запомню на будущее как надо делать. :)
Хотя вспомнил, почему так, у меня получается транзакция внутри другой транзакции, если закрываю ее перед закрывающей скобкой, то не вижу где у меня происходит вставка примитивов, в процессе выполнения программы, только по ее завершению, а если ставлю закрывающую скобку перед циклом, то теряю ссылку на TextSt1. Возможно мне следует организовать работу программы в данном случае подругому, но пока я хотел разобраться с системами координат.
Извини, но это какой-то бред. Если в двух словах, то что ты получаешь через Editor.GetPoint возвращается в ПСК(UCS). Если тебе нужно эту точку преобразовать в МСК(WCS), то нужно получить матрицу преобразования UCS->WCS при помощи Editor.CurrentUserCoordinateSystem и преобразовать по ней.
Я плохо объяснил наверное). Может конечно сам неправильно понимаю, но я хочу чтобы точка получаемая через GetPoint оставалась в UCS, и выводилась где пользователь кликает мышью, а подписи координат выводили в текстовый примитив значение WCS по X и Y в этом месте. Спасибо за наводку с Editor.CurrentUserCoordinateSystem постараюсь разобраться.
Александр Пекшев aka Modis
Спасибо за код, постараюсь понять как мне лучше выполнить преобразования )

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

  • ADN
  • *
  • Сообщений: 2531
  • Карма: 735
Re: Системы координат. Работа с WCS и UCS.
« Ответ #6 : 17-08-2017, 13:20:33 »
Тут закрыл ее в середине блока, так как подумал что получил то что мне надо в этой транзакции и можно ее закрыть
Мысль верная, а вот исполнение - нет. Надо ее тут же и закрывать, т.е. ставить закрывающую скобку.

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

  • ADN OPEN
  • Сообщений: 9
  • Карма: 0
Re: Системы координат. Работа с WCS и UCS.
« Ответ #7 : 17-08-2017, 13:23:43 »
Мысль верная, а вот исполнение - нет. Надо ее тут же и закрывать, т.е. ставить закрывающую скобку.
В ответе выше добавил почему там размещаю Commit ) так-то это не оправдание конечно)

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

  • Administrator
  • *****
  • Сообщений: 13830
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Системы координат. Работа с WCS и UCS.
« Ответ #8 : 17-08-2017, 13:23:50 »
я хочу чтобы точка получаемая через GetPoint оставалась в UCS
Если ты не будешь её менять, то она останется в UCS.
и выводилась где пользователь кликает мышью
Что значит выводилась? Точка никуда не выводится. Или ты имеешь в виду добавить примитив Точка (DBPoint) в базу чертежа? Тогда добавлять нужно с координатами в WCS.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN
  • *
  • Сообщений: 2531
  • Карма: 735
Re: Системы координат. Работа с WCS и UCS.
« Ответ #9 : 17-08-2017, 13:27:46 »
Ладно, заканчиваю оффтоп.
В принципе, буду благодарен если просто скинете пару ссылок где можно почитать про системы координат и как с ними взаимодействовать правильно через C#.
http://spiderinnet1.typepad.com/blog/2013/05/autocad-net-transform-picked-point-from-current-ucs-to-wcs.html
https://knowledge.autodesk.com/ru/search-result/caas/CloudHelp/cloudhelp/2015/RUS/AutoCAD-NET/files/GUID-0EFA65CC-C1AB-4B99-8159-C31602C1A5E8-htm.html

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

  • ADN OPEN
  • Сообщений: 9
  • Карма: 0
Re: Системы координат. Работа с WCS и UCS.
« Ответ #10 : 17-08-2017, 14:01:51 »
Ладно, заканчиваю оффтоп.
Спасибо! Надеюсь разберусь! )
Или ты имеешь в виду добавить примитив Точка (DBPoint) в базу чертежа? Тогда добавлять нужно с координатами в WCS.
Нет, программа должна вставлять 2 текстовых примитива в место клика мышью(получаем через GetPoint), в одном примитиве отображается Х клика, в другом У клика, но оба примитива всегда выводят значение координат в WCS, вне зависимости от того какая система координат установлена. Может в данном случае лучше всего при начале выполнения программы устанавливать в чертеже WCS а по завершении возвращать пользовательскую UCS. Вообщем сейчас постараюсь разобраться с ссылками что дал Дмитрий, а как что-то сделаю еще раз выложу сюда готовый вариант того что получится.

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

  • Administrator
  • *****
  • Сообщений: 13830
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Системы координат. Работа с WCS и UCS.
« Ответ #11 : 17-08-2017, 14:19:52 »
Может в данном случае лучше всего при начале выполнения программы устанавливать в чертеже WCS а по завершении возвращать пользовательскую UCS.
Зачем? GetPoint тебе даёт точку в UCS. Преобразовываешь её в WCS и записываешь в текстовые примитивы X и Y преобразованной точки. Я не понимаю в чем проблема?
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • Administrator
  • *****
  • Сообщений: 13830
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Системы координат. Работа с WCS и UCS.
« Ответ #12 : 17-08-2017, 14:24:06 »
Заметил, что в твоём коде идёт преобразование примитивов текстов из UCS в WCS. Зачем? Тебе достаточно было точку вставки преобразовать из UCS в WCS и от этого плясать.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Отмечено как Решение Дмитриий 18-08-2017, 10:28:13

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

  • ADN OPEN
  • Сообщений: 9
  • Карма: 0
Re: Системы координат. Работа с WCS и UCS.
« Ответ #13 : 17-08-2017, 17:07:53 »
Все, вроде как разобрался, по крайней мере все работает так как мне надо.
Как я понял метод GetPoint получает данные в UCS а создание текстового примитива происходит в WCS, отсюда у меня и получалось непонимание конечного результата, так как я думал что создание текстового примитива идет в UCS так же, как и получение данных через GetPoint.
Изменив строку:
Код - C# [Выбрать]
  1. Text_coord_X.Position = CoordTextX.TransformBy(curUCSMatrix);
получаю создаваемый текст там где мне нужно.
А для вывода в текстовый примитив координат в WCS использую:
Код - C# [Выбрать]
  1. Point3d pointCoordWCS = pointCoord.TransformBy(curWCSMatrix);
  2. Text_coord_X.TextString = pointCoordWCS.X.ToString("#");
Хотел только уточнить, создание всех примитивов автокада происходит в WCS? А GetPoint и GetEntity получают в свою очередь результат в UCS правильно я понимаю?

Код получившейся программы прилагаю ниже, вдруг кому пригодится, ну или какие-то ошибки кто заметит...  :)

Извините, вам запрещён просмотр содержимого спойлеров.

Хочу еще раз сказать спасибо Дмитрию, ссылка:
http://spiderinnet1.typepad.com/blog/2013/05/autocad-net-transform-picked-point-from-current-ucs-to-wcs.html
очень помогла разобраться с работой с системами координат!

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

  • Administrator
  • *****
  • Сообщений: 13830
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Системы координат. Работа с WCS и UCS.
« Ответ #14 : 17-08-2017, 17:24:01 »
Хотел только уточнить, создание всех примитивов автокада происходит в WCS?
Почти. Во всяком случае точно не в UCS. Есть еще понятие OCS (система координат объекта). Её использует полилиния.
А GetPoint и GetEntity получают в свою очередь результат в UCS правильно я понимаю?
Да. Если конечно речь идёт о полученной от пользователя точке, так как GetEntity возвращает не только точку, но и ObjectId примитива, который от системы координат не зависит.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

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

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

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

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

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

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

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

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

  • Administrator
  • *****
  • Сообщений: 13830
  • Карма: 1784
  • Рыцарь 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
  • *****
  • Сообщений: 13830
  • Карма: 1784
  • Рыцарь 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
  • *****
  • Сообщений: 13830
  • Карма: 1784
  • Рыцарь 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 »
Дима, Александр спасибо все сработало.
Лень - двигатель прогресса.