Тема: Угол поворота 3dSolid'а
Возможно ли узнать угол поворота вытянутого 3d solida, вокруг оси, в доль которой его вытянули?
Информационный портал для профессионалов в области САПР
Вы не вошли. Пожалуйста, войдите или зарегистрируйтесь.
Форумы CADUser → Программирование → VBA → Угол поворота 3dSolid'а
Страницы 1
Чтобы отправить ответ, вы должны войти или зарегистрироваться
Возможно ли узнать угол поворота вытянутого 3d solida, вокруг оси, в доль которой его вытянули?
ты напиши точно - чё ты пытаешься получить!!!
выдавить профиль, например уголок или швелер про произвольной кривой и узнать какой длины был путь выдавливания???
нет, существует выдавленный вдоль прямой швеллер или уголок! В процессе создания этого солида, он мог быть повернут вокруг совоей оси(прямой в доль которой он выдавливался) на определенный угол! так вот как мне узнать этот угол?
так вот как мне узнать этот угол?[/q
Эту информацию AutoCAD нигде не хранит. Посмотри в сторону метода PrincipalDirections, хотя это не совсем то, что тебе нужно.
а я вот всё равно не понял...
прямая остаётся на месте - а выдавленный region может быть повёрнут???
чё рисуем то??? чёта странное выходит...
> todesengel
Считай что уголок выдавлен вдоль оси Z, а затем повернут относительно этой оси (в плоскости X0Y) на некоторый угол. Вот этот угол Михаила и интересует.
значит давленный объект с историей
можно попробывать написать вставочку на лиспе
для выдергивания из солида исходного профиля
и попытатся оценить уго его поворота
но это будет изврат....
можно, я даже дастал все его координаты, через vba! но вот угол найти не могу, покрейней мере так, что бы работало для всех профилей!
все его координаты???
струдом улавливаю о чём речь уже...
выложи кусочег..
Sub GetSolidPoints(solid As Acad3DSolid, ByRef StartPoint, ByRef EndPoint) ' возвращает начальную и конечную точку солида Dim ss As AcadSelectionSet Dim sat As String Dim i As Long Dim line As AcadLine Dim objs(0) As AcadEntity Dim col As Collection Dim LnCentr As Variant Dim sldCentr As Variant Dim delta As Variant While ThisDrawing.SelectionSets.Count > 0 ThisDrawing.SelectionSets.Item(0).Delete Wend ' Set ss = ThisDrawing.SelectionSets.Add("$BOX$") ' ss.SelectOnScreen Set objs(0) = solid ss.AddItems (objs) sat = GetTrmpDir & "\Box" ThisDrawing.Export sat, "sat", ss ss.Delete ' заполняем список точек Set col = New Collection Set col = ReadPoints(GetTrmpDir & "\Box.sat") ' MsgBox "Box size is:" & vbCr & _ ' "Length: " & vbTab & GetDistance(col.Item(1), col.Item(5)) & vbCr & _ ' "Width: " & vbTab & GetDistance(col.Item(2), col.Item(3)) & vbCr & _ ' "Height: " & vbTab & GetDistance(col.Item(1), col.Item(2)) ' Set line = ThisDrawing.ModelSpace.AddLine(col.Item(1), col.Item(5)) ' задаем начальные и конечные точки StartPoint = col.Item(5) EndPoint = col.Item(1) ' получаем центр линии LnCentr = getLineCentr(StartPoint, EndPoint) sldCentr = solid.Centroid delta = getDxDyDz(LnCentr, sldCentr) Call MoveDxDyDZ(StartPoint, delta) Call MoveDxDyDZ(EndPoint, delta) ' Set line = ThisDrawing.ModelSpace.AddLine(StartPoint, EndPoint) End Sub Public Function ReadPoints(fname As String) As Collection Dim fn As Variant Dim sr As String Dim fs As Variant Dim ForReading As Variant Dim col As New Collection Dim tmp(1) As String Dim vr As Variant ForReading = 1 Set fs = CreateObject("Scripting.FileSystemObject") Set fn = fs.OpenTextFile(fname, ForReading, False) ''<--full path Do While Not fn.AtEndOfStream sr = fn.Read(0) sr = fn.ReadLine If sr Like "point*" Then sr = Trim(Mid$(sr, 17, Len(sr) - 18)) vr = ParsePoint(sr) col.Add vr End If Loop fn.Close Set fn = Nothing Set fs = Nothing Set ReadPoints = col End Function Private Function ParsePoint(s As String) As Variant Dim x() As String Dim v(2) As Double Dim i As Integer x = Split(s, Chr(32)) For i = 0 To 2 v(i) = StrToNoom(x(i)) Next ParsePoint = v End Function
Не уверен, что подойдет, около пяти лет назад, я решал подобную задачу, но не выдавливал профиль из региона, а использовал блок с солидом, уже выдавленным на 1мм. Далее, я вставлял этот блок с необходимым масштабом, вдоль оси выдавливания...
В итоге, на старых акадах, легко решалось изменение длинны профиля, программное отслеживание местоположения и угла поворота и еще много всего, в том числе подсчеты, спецификации и.т.д...
Я могу выложить свою разработку, но при условии грамотной критики...
Я беру описание профиля из базы, и риусу его каждый раз заново!
Я тоже думал про блоки, но у них есть ряд минусов(поправьте меня если я не прав):
1. Большой размер чертежа
2. Захламляется база чертежа
Страницы 1
Чтобы отправить ответ, вы должны войти или зарегистрироваться
Форумы CADUser → Программирование → VBA → Угол поворота 3dSolid'а
Форум работает на PunBB, при поддержке Informer Technologies, Inc