| Правила | Регистрация | Пользователи | Сообщения за день |  Справка по форуму | Файлообменник |

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > VBA узнать центр дуги в полилинии

VBA узнать центр дуги в полилинии

Ответ
Поиск в этой теме
Непрочитано 30.01.2013, 17:13 #1
VBA узнать центр дуги в полилинии
AnteC
 
Регистрация: 01.11.2010
Сообщений: 12

Здравствуйте!
Подскажите можно ли каким-нибудь способом узнать центр дуги находящейся в полилинии. Например команда Список - отображает как прогиб, так и центр дуги.
Конечно прогиб можно узнать через GetBulge, после чего по формулам найти центр как-то так:

Код:
[Выделить все]
 BulgeArc = PLineProfile.GetBulge((UBound(PLineProfile.Coordinates) + 1) / 2 - i - 2)
Arct2A = Atn(BulgeArc) * 2
tanA = Tan(Arct2A)
If CircleSide = True Then
  x0 = (Point1(0) + Point2(0)) / 2 - (Point1(1) - Point2(1)) / (2 * tanA)
  y0 = (Point1(1) + Point2(1)) / 2 + (Point1(0) - Point2(0)) / (2 * tanA)
Else
  x0 = (Point1(0) + Point2(0)) / 2 + (Point1(1) - Point2(1)) / (2 * tanA)
  y0 = (Point1(1) + Point2(1)) / 2 - (Point1(0) - Point2(0)) / (2 * tanA)
End If
Но в некоторых случаях я не могу определить правильно CircleSide (выбор из нужно делать по знаку BulgeArc + еще зависимость с какой стороны идет отсчет точек в полилинии, и на этом я встрял(
Подумалось что если автокад по команде Список выдает центр дуги, может быть ее можно каким-то образом вытащить, а не вычислять?
Просмотров: 3519
 
Непрочитано 30.01.2013, 19:17
#2
Олег (jr.)

специалист по околачиванию грушевых деревьев
 
Регистрация: 14.09.2004
Pietari, Venäjä
Сообщений: 813


Попробуй не проверял написано мастером
Код:
[Выделить все]
          ' by  Bryco 

           'Center of curved polyline segment  a 2d version, add error stuff

Public Function CenterFromBulge(P1, P2, Bulge As Double)
    
    If UBound(P1) = 1 Then
        ReDim Preserve P1(2)
    End If
    If UBound(P2) = 1 Then
        ReDim Preserve P2(2)
    End If
    Dim dblAng As Double, CenPt(2) As Double
    Dim Rad As Double, dblLength As Double
    dblLength = Length(P1, P2) 'Use your length function
    Rad = Abs(0.5 * dblLength / Sin(Atn(Bulge) * 2))
    dblAng = ThisDrawing.Utility.AngleFromXAxis(P1, P2)
    If Bulge > 0 Then
        dblAng = dblAng + ((0.5 * Pi) - (Atn(Bulge) * 2))
    Else
        dblAng = dblAng - ((0.5 * Pi) + (Atn(Bulge) * 2))
    End If
    CenPt(0) = P1(0) + Cos(dblAng) * Rad
    CenPt(1) = P1(1) + Sin(dblAng) * Rad
    CenPt(2) = 0
    CenterFromBulge = CenPt
 
End Function
Олег (jr.) вне форума  
 
Автор темы   Непрочитано 31.01.2013, 08:43
#3
AnteC


 
Регистрация: 01.11.2010
Сообщений: 12


Это практически тоже самое, что и у меня, только другие формулы. Выбор варианта решения происходит тут: If Bulge > 0 Then
Но в моем варианте это не работает т.к. я выбираю координаты точек полилинии по разному - может быть как прямой вариант (те список точек от начала полилинии до конца) так и обратный. В некоторых случаях выбор решения работает неправильно. Понятно, что выбор вариантов я пытался привязать к прямому/обратному выбору точек, но все-равно работает неправильно.
Видимо все-же придется разбираться в этом, т.к. вероятно стандартного метода в акаде для вычисления центра дуги в полилинии нет(

ЗЫ тему можно закрывать, разобрался. Я все усложнил - в моем случае условие If CircleSide = True оказалось лишним т.к. знак tanA уже определял выгнутость/вогнутость.

Последний раз редактировалось AnteC, 31.01.2013 в 10:10.
AnteC вне форума  
 
Непрочитано 02.02.2013, 01:27
#4
Олег (jr.)

специалист по околачиванию грушевых деревьев
 
Регистрация: 14.09.2004
Pietari, Venäjä
Сообщений: 813


Для тех кто не разобрался:
http://www.cad.dp.ua/stats/a_vba/acentity1.php
Олег (jr.) вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > VBA узнать центр дуги в полилинии

Размещение рекламы


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Помогите узнать номер строки в котрой произошла ошибка в программе на VBA МишаИнженер Программирование 3 27.05.2012 23:27
VBA Как узнать предельные размеры контэйнера(прямоугольника) 3dSolid-а ferias Программирование 15 21.03.2012 18:41
VBA Как узнать, какие версии автокада установлены _mikka Программирование 4 01.02.2012 21:02
Как программно на VBA узнать текст последней команды autocada maximiliam Программирование 5 14.01.2010 11:15
Как вставить блоки по направлению полилинии (VBA) dorofei Программирование 5 27.11.2006 06:50