Тема: Угол поворота 3dSolid'а

Возможно ли узнать угол поворота вытянутого 3d solida, вокруг оси, в доль которой его вытянули?

Re: Угол поворота 3dSolid'а

ты напиши точно - чё ты пытаешься получить!!!
выдавить профиль, например уголок или швелер про произвольной кривой и узнать какой длины был путь выдавливания???

Re: Угол поворота 3dSolid'а

нет, существует выдавленный вдоль прямой швеллер или уголок! В процессе создания этого солида, он мог быть повернут вокруг совоей оси(прямой в доль которой он выдавливался) на определенный угол! так вот как мне узнать этот угол?

Re: Угол поворота 3dSolid'а

Михаил пишет:

так вот как мне узнать этот угол?[/q
Эту информацию AutoCAD нигде не хранит. Посмотри в сторону метода PrincipalDirections, хотя это не совсем то, что тебе нужно.

Re: Угол поворота 3dSolid'а

а я вот всё равно не понял...
прямая остаётся на месте - а выдавленный region может быть повёрнут???
чё рисуем то??? чёта странное выходит...

Re: Угол поворота 3dSolid'а

> todesengel
Считай что уголок выдавлен вдоль оси Z, а затем повернут относительно этой оси (в плоскости X0Y) на некоторый угол. Вот этот угол Михаила и интересует.

Re: Угол поворота 3dSolid'а

афтокад какой??? 2005 или выше???

Re: Угол поворота 3dSolid'а

acad 2006 и выше

Re: Угол поворота 3dSolid'а

значит давленный объект с историей
можно попробывать написать вставочку на лиспе
для выдергивания из солида исходного профиля
и попытатся оценить уго его поворота
но это будет изврат....

Re: Угол поворота 3dSolid'а

можно, я даже дастал все его координаты, через vba! но вот угол найти не могу, покрейней мере так, что бы работало для всех профилей!

Re: Угол поворота 3dSolid'а

все его координаты???
струдом улавливаю о чём речь уже...
выложи кусочег..

Re: Угол поворота 3dSolid'а

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

Re: Угол поворота 3dSolid'а

Не уверен, что подойдет, около пяти лет назад, я решал подобную задачу, но не выдавливал профиль из региона, а использовал блок с солидом, уже выдавленным на 1мм. Далее, я вставлял этот блок с необходимым масштабом, вдоль оси выдавливания...
В итоге, на старых акадах, легко решалось изменение длинны профиля, программное отслеживание местоположения и угла поворота и еще много всего, в том числе подсчеты, спецификации и.т.д...

Re: Угол поворота 3dSolid'а

Я могу выложить свою разработку, но при условии грамотной критики...
Я беру описание профиля из базы, и риусу его каждый раз заново!
Я тоже думал про блоки, но у них есть ряд минусов(поправьте меня если я не прав):
1. Большой размер чертежа
2. Захламляется база чертежа

Сообщения 14

Тему читают: 1 гость

Страницы 1

Чтобы отправить ответ, вы должны войти или зарегистрироваться

Форумы CADUser → Программирование → VBA → Угол поворота 3dSolid'а