EndPoint и Curve(Polyline2d)

Автор Тема: EndPoint и Curve(Polyline2d)  (Прочитано 12258 раз)

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

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

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

  • ADN OPEN
  • ****
  • Сообщений: 393
  • Карма: 21
EndPoint и Curve(Polyline2d)
« : 04-09-2020, 10:42:39 »
Всех приветствую. Кто-то может подсказать, почему мне выдаёт исключение "The method or operation is not implemented", когда я пытаюсь провернуть вот такую операцию с Polyline2d?

Код - C# [Выбрать]
  1. curve.EndPoint = new Point3d(curve.EndPoint.X - range, curve.EndPoint.Y, 0);

У меня в коде используются 2 типа линий: Line и Polyline2d, чтобы не париться с преобразованием типов я использую Curve. И укорачивание/удлинение с Line происходит нормально, а с Polyline2d выдаёт ошибку. И даже если использовать явное преобразование, то так же выдаёт ошибку.

UPD
Использование метода Extend, тоже не помогает, выдаёт ошибку "eInvalidInput"

Код - C# [Выбрать]
  1. curve.Extend(false, new Point3d(curve.EndPoint.X - range, curve.EndPoint.Y, 0));

Хотя вот в этой теме всё работает
https://forums.autodesk.com/t5/net/curve-extend/td-p/6589653

Оффлайн avc

  • ADN Club
  • *****
  • Сообщений: 839
  • Карма: 168
    • Мои плагины к Автокаду
Re: EndPoint и Curve(Polyline2d)
« Ответ #1 : 04-09-2020, 10:58:42 »
Раз написано, что метод не реализован, значит он не реализован :) Возможно вы используете старый Автокад, а в новом уже реализован. Но я думаю, методы Polyline2d уже никто никогда не будет реализовывать, так как это старье сохраняется только для совместимости. Соответственно возникает вопрос, а почему собственно не нормальный Polyline ?

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

  • Administrator
  • *****
  • Сообщений: 13898
  • Карма: 1790
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: EndPoint и Curve(Polyline2d)
« Ответ #2 : 04-09-2020, 11:01:02 »
Хотя вот в этой теме всё работает
https://forums.autodesk.com/t5/net/curve-extend/td-p/6589653
Код из этой темы у тебя работает нормально с Polyline2d?
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN OPEN
  • ****
  • Сообщений: 393
  • Карма: 21
Re: EndPoint и Curve(Polyline2d)
« Ответ #3 : 04-09-2020, 11:09:36 »
Раз написано, что метод не реализован, значит он не реализован  Возможно вы используете старый Автокад, а в новом уже реализован. Но я думаю, методы Polyline2d уже никто никогда не будет реализовывать, так как это старье сохраняется только для совместимости. Соответственно возникает вопрос, а почему собственно не нормальный Polyline ?
Я тестирую на 2020. Polyline2d идёт из того, что первый вариант моего САПРа был написан на LISPe, и LISP строит вот такие полилинии. Новая версия версия САПРа строит уже Polyline, но она только разрабатывается и полных чертежей, сделанных в новой версии, нет, поэтому отрабатываю на старой.

Код из этой темы у тебя работает нормально с Polyline2d?
Сейчас сделаю тестовый проект и скажу результаты.

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

  • Administrator
  • *****
  • Сообщений: 13898
  • Карма: 1790
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: EndPoint и Curve(Polyline2d)
« Ответ #4 : 04-09-2020, 11:12:43 »
и LISP строит вот такие полилинии.
Lisp строит и работает с Polyline2d/Polyline3d и с Polyline. Так что это не причина.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Отмечено как Решение Lemieux 04-09-2020, 11:25:36

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

  • Administrator
  • *****
  • Сообщений: 13898
  • Карма: 1790
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: EndPoint и Curve(Polyline2d)
« Ответ #5 : 04-09-2020, 11:13:05 »
Только сейчас сообразил, что ты пытаешься изменить curve.EndPoint. Далеко не для всех наследников Curve это допустимая операция. В твоём же случае нужно найти последнюю вершину  Polyline2d и изменить её координату.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN OPEN
  • ****
  • Сообщений: 393
  • Карма: 21
Re: EndPoint и Curve(Polyline2d)
« Ответ #6 : 04-09-2020, 11:25:14 »
Lisp строит и работает с Polyline2d/Polyline3d и с Polyline. Так что это не причина.
Ну, у меня строил в Polyline2d  :)

Только сейчас сообразил, что ты пытаешься изменить curve.EndPoint. Далеко не для всех наследников Curve это допустимая операция. В твоём же случае нужно найти последнюю вершину  Polyline2d и изменить её координату.
Интересная фича :)

Если сделать вот такой код, то метод Extend работает
Код - C# [Выбрать]
  1. curve.Extend(false, new Point3d(curve.EndPoint.X + range, curve.EndPoint.Y, 0));

UPD
Что интересно "-" с линиями работает.

В твоём же случае нужно найти последнюю вершину  Polyline2d и изменить её координату.
Я так и думал, но надеялся, что можно сделать более изящно.

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

  • Administrator
  • *****
  • Сообщений: 13898
  • Карма: 1790
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: EndPoint и Curve(Polyline2d)
« Ответ #7 : 04-09-2020, 11:35:32 »
Интересная фича
Это не фича. Это основной способ для изменения положения последней вершины для Polyline2d/Polyline3d.
Кстати, использование Polyline2d - достаточно опасная вещь. Обрати внимание на системную переменную PLINETYPE. Если значение 2, то в старых чертежах (или сохраненных в формате старых версий) при их открытии происходит конвертация из Polyline2d в Polyline и похоже весь код у тебя работать не будет.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • Administrator
  • *****
  • Сообщений: 13898
  • Карма: 1790
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: EndPoint и Curve(Polyline2d)
« Ответ #8 : 04-09-2020, 11:42:33 »
Что интересно "-" с линиями работает.
А с Polyline2d после "-" вершина остаётся в пределах между последней и предпоследней вершиной? В противном случае AutoCAD не сможет понять что ему делать. Не убирать же вершину (или несколько вершин) - это отдельный примитив...
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN OPEN
  • ****
  • Сообщений: 393
  • Карма: 21
Re: EndPoint и Curve(Polyline2d)
« Ответ #9 : 04-09-2020, 11:45:19 »
А с Polyline2d после "-" вершина остаётся в пределах между последней и предпоследней вершиной? В противном случае AutoCAD не сможет понять что ему делать. Не убирать же вершину (или несколько вершин) - это отдельный примитив...
Неа, какое бы число после "-" не стояло, не работает. Но это не работает и с Polyline, а не только с Polyline2d.

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

  • Administrator
  • *****
  • Сообщений: 13898
  • Карма: 1790
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: EndPoint и Curve(Polyline2d)
« Ответ #10 : 04-09-2020, 11:48:51 »
Но это не работает и с Polyline, а не только с Polyline2d.
Тут можешь попробовать Curve.GetSplitCurves.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN OPEN
  • ****
  • Сообщений: 393
  • Карма: 21
Re: EndPoint и Curve(Polyline2d)
« Ответ #11 : 04-09-2020, 12:06:38 »
Вот это засада. Polyline2d реализует метод GetEnumerator, но не имеет свойства, которое отображает количество вершин, а Polyline наоборот  ;D Спасибо всем за помощь!

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

  • ADN
  • *
  • Сообщений: 2531
  • Карма: 738
Re: EndPoint и Curve(Polyline2d)
« Ответ #12 : 04-09-2020, 13:20:56 »
Кто-то может подсказать, почему мне выдаёт исключение "The method or operation is not implemented", когда я пытаюсь провернуть вот такую операцию с Polyline2d?
Потому что AutoCAD API разрабатывалось с грубейшими нарушениями одного из SOLID-принципов.

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

  • Administrator
  • *****
  • Сообщений: 13898
  • Карма: 1790
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: EndPoint и Curve(Polyline2d)
« Ответ #13 : 04-09-2020, 13:28:32 »
Кто-то может подсказать, почему мне выдаёт исключение "The method or operation is not implemented", когда я пытаюсь провернуть вот такую операцию с Polyline2d?
Потому что AutoCAD API разрабатывалось с грубейшими нарушениями одного из SOLID-принципов.
Когда разрабатывались примитивы AutoCAD - тогда про наследование в программировании только начинали задумываться и про абстрактный класс, производными от которого будут линии/полилинии/окружности/эллипсы/дуги и т.д. никто не думал. Тогда еще С/C++ использовались без классов (ADS/ARX), а про появление .NET никто и думать не мог...
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN
  • *
  • Сообщений: 2531
  • Карма: 738
Re: EndPoint и Curve(Polyline2d)
« Ответ #14 : 04-09-2020, 13:40:39 »
Это не "наезд", это просто констатация факта  :)
Да, раньше не подумали. Сейчас уже некогда-затратно-неохота что-то изменять в устоявшемся API.