Задание условия колинеарности

Автор Тема: Задание условия колинеарности  (Прочитано 4004 раз)

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

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

  • ADN OPEN
  • ****
  • Сообщений: 453
  • Карма: 1
Здравствуйте!

Есть ли какой-нибудь предусмотренный API способ задания колинеарности прямых при построении геометрии кодом? Встроенного метода для колинеарной прямой я не нашел, может плохо искал? Подскажите, пожалуйста.

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

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Задание условия колинеарности
« Ответ #1 : 14-01-2019, 20:53:29 »
Здравствуйте!

Есть ли какой-нибудь предусмотренныйспособ задания колинеарности прямых при построении геометрии кодом?
Сначала объясни что ты под этим подразумеваешь. И желательно со знаками препинания. ;-)
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN OPEN
  • ****
  • Сообщений: 453
  • Карма: 1
Re: Задание условия колинеарности
« Ответ #2 : 14-01-2019, 21:08:41 »
Смысл такой:
  • Пользователь указывает точку на экране.
    Из этой точки строится прямая фиксированной длины.
    Пользователь указывает вторую точку на экране.
    Из этой точки тоже строится прямая фиксированной длины.
  • Первая и вторая линии должны быть колинеарны. Указанием точки пользователь лишь определяет точку для начала построения второй линии, но не прицеливается, чтобы линии находились на одной прямой.

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

  • ADN Club
  • *****
  • Сообщений: 1658
  • Карма: 366
  • Отец modplus.org
    • ModPlus
Re: Задание условия колинеарности
« Ответ #3 : 14-01-2019, 21:17:14 »
Это все решается через вектора:
Из первого отрезка получаем единичный вектор, отняв от второй точки отрезка (EndPoint) первую точку (StartPoint) и вызвав метод GetNomal()
Из второй точки, указанной пользователем, получаем еще одну точку: pt + normalVector * length, где length - нужная длина отрезка
Строим второй отрезок по указанной и полученной точкам
Как два пальца  :D

Оффлайн avc

  • ADN Club
  • *****
  • Сообщений: 805
  • Карма: 166
    • Мои плагины к Автокаду
Re: Задание условия колинеарности
« Ответ #4 : 14-01-2019, 21:33:33 »
И все это считается чисто математически так же легко, без всяких вызов API. Особенно в 2d. И работает раз в 100 быстрей чем на API (хотя для построения одно линии это не важно)
Чисто для примера вычисление вашей второй точки линии:
Код - C# [Выбрать]
  1.     /// <summary>
  2.     /// Сдвинуть точку в направлении вектора . быстро , без вызовов API
  3.     /// </summary>
  4.     public static Point2d Move(this Point2d pt, Vector2d vector, double distance)
  5.     {
  6.       if (distance == 0) return pt;
  7.       double len = Sqrt(vector.X * vector.X + vector.Y * vector.Y);
  8.       if (len == 0) return pt;
  9.       double k = distance / len;
  10.       return new Point2d(pt.X + vector.X * k, pt.Y + vector.Y * k);
  11.     }

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

  • ADN OPEN
  • ****
  • Сообщений: 453
  • Карма: 1
Re: Задание условия колинеарности
« Ответ #5 : 14-01-2019, 21:47:08 »
С построением понятно, а как сохранить колинеарность впоследствии? Нужно что-то типа constraint.

Оффлайн avc

  • ADN Club
  • *****
  • Сообщений: 805
  • Карма: 166
    • Мои плагины к Автокаду
Re: Задание условия колинеарности
« Ответ #6 : 14-01-2019, 21:49:39 »
С построением понятно, а как сохранить колинеарность впоследствии? Нужно что-то типа constraint.
Вектор направления сохраните

Оффлайн avc

  • ADN Club
  • *****
  • Сообщений: 805
  • Карма: 166
    • Мои плагины к Автокаду
Re: Задание условия колинеарности
« Ответ #7 : 14-01-2019, 21:52:05 »
И потом используйте IsCodirectionalTo или IsParallelTo если вам это надо

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

  • ADN Club
  • *****
  • Сообщений: 1658
  • Карма: 366
  • Отец modplus.org
    • ModPlus
Re: Задание условия колинеарности
« Ответ #8 : 14-01-2019, 21:54:33 »
С построением понятно, а как сохранить колинеарность впоследствии? Нужно что-то типа constraint.
Использовать параллельность из параметризации. Вот только программно, на сколько мне известно, её не установить.
Ну или можно самому реализовать через Overrule

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

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Задание условия колинеарности
« Ответ #9 : 14-01-2019, 21:57:25 »
С построением понятно, а как сохранить колинеарность впоследствии? Нужно что-то типа constraint.
Не нужно. Потом пользователи будут кричать "как от этого избавиться" и почему чертеж "не шевелится".
Но если очень хочется, то изучай: https://adndevblog.typepad.com/autocad/2013/01/a-simplified-net-api-for-accessing-autocad-parameters-and-constraints.html
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN OPEN
  • ****
  • Сообщений: 453
  • Карма: 1
Re: Задание условия колинеарности
« Ответ #10 : 14-01-2019, 22:25:29 »
Спасибо