|
||
| Правила | Регистрация | Пользователи | Поиск | Сообщения за день | Все разделы прочитаны | Справка по форуму | Файлообменник | |
|
![]() |
Поиск в этой теме |
![]() |
#1 | |
Как повернуть 3dsolid
Регистрация: 05.08.2008
Сообщений: 155
|
||
Просмотров: 3537
|
|
||||
Регистрация: 05.08.2008
Сообщений: 155
|
|
|||
![]() |
|
||||
Продуман Регистрация: 22.02.2007
Питер
Сообщений: 2,839
|
Ихмо это большой гемор - определить куда он выдавлен по простому не получиться, начиная с 2007 автокад позволяет пользователю "играть" с величиной выдавливания, но как до нее програмно добраться? Задача сильно упростится, если это будет не солид, а блок из оного - там специально обученная 210 группа есть.
__________________
Когда в руках молоток все вокруг кажется гвоздями. |
|||
![]() |
|
||||
Регистрация: 05.08.2008
Сообщений: 155
|
Мне не нужно определять куда он выдавлен, я это знаю! Мне нужно выполнить команду align програмно на vba, или через консоль, но после этого удалить ее из списка выполненных команда, а в идеале вообще не записывать в консоль...
Проблема в том, что в VBA у объетка 3dsolid нет метода align... |
|||
![]() |
|
||||
Цитата:
У тебя есть метод TransformBy, осталось на лету создать матрицу поворота в пространстве и поворот готов...
__________________
Чем гениальнее ваш план, тем меньше людей с ним будут согласны. /Сунь Цзы/ |
||||
![]() |
|
||||
КИПиА Регистрация: 21.03.2005
Tyumen
Сообщений: 1,352
![]() |
Матрица поворота в общем случае произведение 3х матриц:
1 - перенос точки относительно которой вращаем в начало координат 2 - собственно повориот 3 - перенос начала координат в точку оносительно которой вращали т.е. move * rotate * (-move), а не move + rotate не учитывать move можно только если вращаем относительно начала координат. Для расчета матрицы поворота не нужно знать никаких углов матрица поворота - комбинация базисных векторов уже известен 1 вектор (oz) - ваша линия для расчета ox и oy - нужно воспользоваться "arbitraly axis algoritm" описаном в хелпе в разделе dxf reference |
|||
![]() |
|
||||
Цитата:
1. переносим тело и его ось на любую точку требуемой прямой. Ось тела и прямая образывает при пересении плоскость. 2.делаем видовой экран на эту плоскость и определяем угол между прямыми 3 Вращаем тело в этой плоскости, таким образом ,чтобы ось тела и прямой совродали. Вот и все (пока нет времени для кода) Кончно, с точки зрения векторнй алгебры, матрицы нужно перемножать.
__________________
С уважением sbi Последний раз редактировалось sbi, 22.04.2009 в 19:59. Причина: уточнение |
||||
![]() |
|
||||
КИПиА Регистрация: 21.03.2005
Tyumen
Сообщений: 1,352
![]() |
>>Проще, для "рабочих и крестьян- все-таки чей-то день рожденья" можно и без матрицы обойтись:
Смотря что понимать под проще)) помоему проще чем несколько векторных умножений и составления из их результатов матрицы трансформации ничего быть не может. видовые экраны - это как из тюмени в тобольск через владивосток. хотя если в хорошей компании, с пивом и на халяву, то почему нет |
|||
![]() |
|
||||
Цитата:
Пример для изменения viewing direction Change the viewing direction of the viewport Dim NewDirection(0 To 2) As Double NewDirection(0) = -1: NewDirection(1) = -1: NewDirection(2) = 1 ThisDrawing.ActiveViewport.direction = NewDirection ThisDrawing.ActiveViewport = ThisDrawing.ActiveViewport ThisDrawing.Regen True
__________________
С уважением sbi Последний раз редактировалось sbi, 22.04.2009 в 21:03. |
||||
![]() |
|
||||
КИПиА Регистрация: 21.03.2005
Tyumen
Сообщений: 1,352
![]() |
>>Тяжелый случай, надо думать, а так не хочется
вот именно, думать не хочется. когда в руках молоток - всё вокруг гвозди)) Зачем крутить вид? чтобы узнать угол между отрезками? Думаю в VB должен быть способ попроще, а если нет, можно применить скалярное произведение векторов >>А попробуй перемнож, может ,что получится. Знаешь что на что умножать? в бейсике я не силен, в общем случае так - получаем еденичный вектор N (направление линии "на которую" надо повернуть, N - чтоб название совпадало с цитатой) далее цитата из хелпа The algorithm does the following (all vectors are assumed to be in 3D space and specified in the world coordinate system): Let the given normal vector be called N. Let the world Y axis be called Wy, which is always (0,1,0). Let the world Z axis be called Wz, which is always (0,0,1). Here we are looking for the arbitrary X and Y axes to go with the normal N. They will be called Ax and Ay. N could also be called Az (the arbitrary Z axis) as follows: If (abs (Nx) < 1/64) and (abs (Ny) < 1/64) then Ax = Wy X N (where “X” is the cross-product operator). Otherwise, Ax = Wz X N. Scale Ax to unit length. где cross-product - векторное произведение в итоге имеем Ax - базисный еденичный вектор 0X поворота Ay - базисный еденичный вектор 0Y поворота N - базисный еденичный вектор 0Z поворота искомая матрица поворота соответственно будет Axх Ayx Nx 0 Axy Ayy Ny 0 Axz Ayz Nz 0 0 0 0 1 либо Axx Axy Axz 0 Ayy Ayy Ayz 0 Nx Ny Nz 0 0 0 0 1 в зависимости от того как в VB принято хранить массивы по строкам или по столбцам ну и еще >>1. переносим тело и его ось на любую точку требуемой прямой. Ось тела и прямая образывает при пересении плоскость. а если они паралельны? Все пропало, Шеф, всё пропало...©)) Последний раз редактировалось zamtmn, 22.04.2009 в 23:05. |
|||
![]() |
![]() |
|
Опции темы | Поиск в этой теме |
|
|
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
на злобу дня !! | zaza-noza | Разное | 63 | 22.05.2009 15:10 |
Как быстро повернуть содержимое видового экрана | Red Nova | AutoCAD | 11 | 30.04.2008 19:45 |
Civil 3D 2008. Как повернуть проектные отметки на плане ? | Valery Brelovsky | Прочее. Отраслевые разделы | 8 | 23.01.2008 12:05 |
Как повернуть не относительно горизонтали | KorPash | AutoCAD | 3 | 11.06.2007 15:17 |
БРЕД СИВОЙ КОБЫЛЫ | Kryaker | Разное | 1876 | 29.12.2006 23:41 |