Сообщество программистов Autodesk в СНГ

ADN Club => AutoCAD .NET API => Тема начата: Алексей (IdeaSoft) от 27-11-2016, 13:29:42

Название: Сопряжение
Отправлено: Алексей (IdeaSoft) от 27-11-2016, 13:29:42
Подскажите, есть ли метод API c
помощью которого можно сделать
сопряжение  2 отрезков.
В результате получить либо объект дуги либо 3 точки дуги
 
Подойдут оба варианта передачи аргументов в функцию :
1) передать 2 отрезка Line
2) передать 4 точки point3d (p1 и p2 - точки первого отрезка
                                                p3 и p4 - точки первого отрезка)



 

 
Название: Re: Сопряжение
Отправлено: Алексей (IdeaSoft) от 27-11-2016, 13:39:25
Для задачи может быть вполне и 3 аргументов-точек хватит
p1, p2 точки двух отрезков p3- точка пересечения отрезков.


Да и еще забыл про радиус дуги R его тоже нужно передать в функцию.

Код - vb.net [Выбрать]
  1. Public function GetArc(Byval R as Double, Byval p1 as point3d, _
  2.                          Byval p2 as point3d, Byval p3 as point3d) as Arc
  3.  
  4. End function
Название: Re: Сопряжение
Отправлено: Александр Ривилис от 27-11-2016, 18:08:58
Подскажите, есть ли метод API c
помощью которого можно сделать
сопряжение  2 отрезков.
Метода API такого нет. Нужна чистая аналитическая геометрия.
Название: Re: Сопряжение
Отправлено: Алексей (IdeaSoft) от 27-11-2016, 19:59:46
Ясно, тогда буду использовать геометрию.
Название: Re: Сопряжение
Отправлено: Дмитрий Загорулькин от 28-11-2016, 08:07:40
Вот тут получали полилинию со скругленными углами: http://through-the-interface.typepad.com/through_the_interface/2012/09/overriding-the-grips-of-an-autocad-polyline-to-maintain-fillet-segments-using-net.html. Можно попробовать вытащить код для скругления.
Название: Re: Сопряжение
Отправлено: Александр Ривилис от 28-11-2016, 11:39:41
Ясно, тогда буду использовать геометрию.
Вот такой алгоритм:
(https://adn-cis.org/forum/proxy.php?request=http%3A%2F%2Fimg-fotki.yandex.ru%2Fget%2F195518%2F7842324.7%2F0_1460a7_69aca22c_orig.png&hash=c5890f6f3856807858616edb8078711b)
Название: Re: Сопряжение
Отправлено: Алексей (IdeaSoft) от 29-11-2016, 00:47:04
Спасибо большое за ответ!
Название: Re: Сопряжение
Отправлено: Владимир Шу от 29-11-2016, 08:05:45
ИМХО, код опубликованный тут будет интересен
http://www.acadnetwork.com/index.php?PHPSESSID=843b94a2f86a2fcd72c4b0959b7781a7&topic=250.0
Название: Re: Сопряжение
Отправлено: Алексей (IdeaSoft) от 29-11-2016, 09:17:22
ИМХО, код опубликованный тут будет интересен
Проверил этот код
 (по ссылке http://www.acadnetwork.com/index.php?PHPSESSID=843b94a2f86a2fcd72c4b0959b7781a7&topic=250.0)
Все OK работает.
В строке кода на VB первый аргумент pLine забыли написать 
Код - vb.net [Выбрать]
  1. i += 1 + pline.FilletAt(? , i , radius)




(https://s15.postimg.org/dqmgly6dz/pl_r.jpg) (https://postimg.org/image/dqmgly6dz/)
Название: Re: Сопряжение
Отправлено: Дима_ от 29-11-2016, 09:44:22
Вот такой алгоритм:
Александр - для такой задачи использовать Offset а затем видимо еще IntersectWith с окружностью - это халтура:

см. рис

после чего вытащить центр и крайние точки или углы дуги...
Название: Re: Сопряжение
Отправлено: Александр Ривилис от 29-11-2016, 09:56:21
Дима_
Алексей просил через API. :) А если серьёзно, то я просто показал картинку - набросок идеи.
Название: Re: Сопряжение
Отправлено: Дима_ от 29-11-2016, 10:02:07
Неправда, он спросил
Цитировать
Подскажите, есть ли метод API

з.ы. Мы уже по моему с Вами обсуждали как "честнее" решать геометрию...
Название: Re: Сопряжение
Отправлено: Алексей (IdeaSoft) от 29-11-2016, 10:04:52
для такой задачи использовать Offset а затем видимо еще IntersectWith с окружностью
В реальной задаче я не использую offset и IntersectWith.
У меня просто координаты точек в памяти.
Я геометрически вычисляю все что мне нужно, а потом вывожу результат в AutoCAD.
Название: Re: Сопряжение
Отправлено: Дима_ от 29-11-2016, 10:08:48
Ну тогда формулы "что ни на есть те". Или у Вас еще третий метод?
з.ы. я собственно за то, что если это возможно в "разумных пределах" - считать математически.