Тема: Закатывание радиусов

Проблема в следующем:
есть два отрезка [ на самом деле их конечно боьше :o) ]
расположенные под углом друг к другу, необходимо закатать между ними радиус, акад делает это с помощью команды _fillet , как это выполнить средствами vba.
То есть как выбрать отрезки программно и закатать радиус между ними.
отрезки отрисовываны командой addline
p.s. заранее благодарен, и извиняюсь за плохой стиль изложения проблемы.

Re: Закатывание радиусов

> Андрей
Не знаю есть-ли в VBA такие возможности к сожалению. Первое что приходит на ум - найти точку пересечения. А потом .....
Надо долго думать и вспоминать геометрию и аналитическую геометрию на плоскости. Думать надо.

Re: Закатывание радиусов

Исходить из того, что центр окружности будет лежать на бисектрисе.

Re: Закатывание радиусов

Задача решена. Прямоугольный треугольник. Один угол известен (половина угла между отрезками). Сторона (катет) извесна - радиус окружности. Из этого находим все остальное. Берите учеьники и дерзайте.

Re: Закатывание радиусов

это все хорошо, спасибо за ответы, но все таки хотелось бы узнать как это делается с помощью vba, ведь если акад это делает то и vba должен ?

Re: Закатывание радиусов

Вот не факт что должен стандартными VB средствами. Может в связке с Lisp?

Re: Закатывание радиусов

Андрей пишет:

ведь если акад это делает то и vba должен

С чего это Вы взяли? VBA не делает многое из того, что делает ACAD.
На исходный вопрос ответ такой: использовать метод SetBulge

Re: Закатывание радиусов

Очень хороший совет. Я посмотрел. Действительно - рисуем полилинию и закругляем (закатываем) радиус. Если примитивы потом нужны то взрываем полилинию. Красивое решение.

Re: Закатывание радиусов

тогда встречный вопрос:
подскажите метод объединеия отрезков в полилинию?

Re: Закатывание радиусов

А не надо отрезки в полилинию объеденять. Точку пересечения прямых, содержащие эти отрезки найти можно. Координаты концов отрезков - не проблема. Рисуешь полилинию и закатываешь радиус. Отрезки удаляешь.

Re: Закатывание радиусов

ну что ж спасибо за ответы, постораюсь воплотить их в жизнь

Re: Закатывание радиусов

Для нахождения точки пересечения используй "интерсектвиз" - "пересечениеС". Акада под рукой нет. Попробуй поищи сам.

Re: Закатывание радиусов

извиняюсь, что сразу не попробавал ваши советы, просто принял их к сведению, сейчас же когда пришло время воплощать их в жизнь, возникли ряд проблем, во первых
нужен оператор разбиения полилинии на примитивы, заказчику нужно что бы объект состоял из отдельных частей отрезков,дуг и т.д.
и второе при использовании метода  setbulge i,rad  происходит изменение участка полилинии, то есть отрезок с  индексом i закругляется, требуется же что бы закругление происходило в вершинах. например, если есть квадрат начерченый полилинией, то закруглятся должны не его стороны и а вершины с заданным радиусом, то есть поставленная задача не решена, хотелось бы услышать еще варианты ее решения!!!
З.Ы. еще раз извиняюсь за эти глупые вопросы, но работа требует их решения, заранее спасибо всем кто откликнется!!!

Re: Закатывание радиусов

Смотри то что я тебе написал в самом начале. Реши задачу так. Т.е. находить центра дуг и пр. По поводу того что надо примитивы то я писал - взорвать - Explode.

Re: Закатывание радиусов

Андрей пишет:

второе при использовании метода setbulge i,rad происходит изменение участка полилинии, то есть отрезок с индексом i закругляется

Это не так. Цитата из Help'a

The bulge is the tangent of 1/4 of the included angle for the arc between the selected vertex and the next vertex in the polyline's vertex list. A negative bulge value indicates that the arc goes clockwise from the selected vertex to the next vertex. A bulge of 0 indicates a straight segment, and a bulge of 1 is a semicircle.

Результат выполнения нижеследующей программы аналогичен скруглению полилинии с вершинами (0,0,0), (0,10,0), (10,10,0) радиусом 2 ед-цы (во второй вершине) с последующим разбиением на составные примитивы. Если есть желание, то разберетесь.

Sub qq()
Dim plineObj As AcadLWPolyline
Dim points(0 To 7) As Double
points(0) = 0#: points(1) = 0#
points(2) = 0#: points(3) = 8#
points(4) = 2#: points(5) = 10#
points(6) = 10#: points(7) = 10#
Set plineObj = ThisDrawing.ModelSpace.AddLightWeightPolyline(points)
plineObj.SetBulge 1, -(Sqr(2) - 1)
plineObj.Explode
Set plineObj = Nothing
End Sub

Re: Закатывание радиусов

> bender
ну дык, а я что говорил, закругляется  участок  полилинии (0,8,0)
... (2,10,0) а не вершина (0,10,0) вот этого приметива (0,0,0), (0,10,0), (10,10,0), если я знаю координаты (0,8,0)
... (2,10,0) то зачем мне строить полилинию потом ее закруглять, я посторю два отрезка и дугу между ними.