Предыдущая тема :: Следующая тема |
Автор |
Сообщение |
Rus77
Зарегистрирован: 06.03.2006 Сообщения: 53
|
Добавлено: Пт Мар 24, 2006 12:46 pm Заголовок сообщения: Разборка конуса |
|
|
Здравствуйте!
Помогите разобрать конус!
Мне необходимо получить его проекцию на заданную плоскость. Конус состоит из двух эллипсов (в общем случае) - верха и основания. В элементе под VBA AsConeElement есть только координаты центров и радиусы эллипсов. При построении мне необходимы точки на эллипсе для формирования матрицы поворота и пересчета полуосей.
Как вытянуть из конуса данные эллипсы? Пробовал MDL функцией -
int mdlCone_extractDEllipse3ds
(
DEllipse3d* pTop ,
DEllipse3d* pBottom ,
MSElement* pElement
);
однако она возвращает все 0. Странно что и результат =0, ведь по константам MDL SUCCESS=0???
--------------------------------------
с уважением, Руслан |
|
Вернуться к началу |
|
|
Leonid давно здесь сидим
Зарегистрирован: 28.01.2006 Сообщения: 598 Откуда: С.-Петербург
|
Добавлено: Пт Мар 24, 2006 1:46 pm Заголовок сообщения: |
|
|
Как передаются параметры в функцию? |
|
Вернуться к началу |
|
|
Rus77
Зарегистрирован: 06.03.2006 Сообщения: 53
|
Добавлено: Пт Мар 24, 2006 2:01 pm Заголовок сообщения: |
|
|
Использование:
Public Declare Function mdlCone_extractDEllipse3ds Lib "stdmdlbltin.dll" (ByVal pTop As Long, ByVal pBottom As Long, ByVal pElement As Long) As Long
Private Sub T2buildPRJConeElem(welem As element)
' в функцию передается элемент типа Cone (тип==23), этот параметр проверяется до вызова функции
Dim elDescrP As Long, eleTop As Long, eleButtom As Long, rez As Long
Dim curElem As element
elDescrP = welem.AsConeElement.MdlElementDescrP
rez = mdlCone_extractDEllipse3ds(eleTop, eleButtom, elDescrP)
' в результате rez==0, eleTop==0, eleButtom==0
end sub
-------------------------
с надеждой, Руслан... |
|
Вернуться к началу |
|
|
Leonid давно здесь сидим
Зарегистрирован: 28.01.2006 Сообщения: 598 Откуда: С.-Петербург
|
Добавлено: Пт Мар 24, 2006 2:37 pm Заголовок сообщения: |
|
|
int mdlCone_extractDEllipse3ds
(
DEllipse3d* pTop ,
DEllipse3d* pBottom ,
MSElement* pElement
);
MSElement и MSElementDescr - разные вещи
Чтобы получить в MDL элемент из дескриптора, надо всего лишь сделать
elDescrP->el
Как это сделать в VBA:
ElmdscrAccessor_getMSElement(oEl.MdlElementDescrP(False)) |
|
Вернуться к началу |
|
|
Rus77
Зарегистрирован: 06.03.2006 Сообщения: 53
|
Добавлено: Пн Мар 27, 2006 8:51 am Заголовок сообщения: |
|
|
Здравствуйте!
Спасибо за совет, только он не заработал....
В общем случае процедура выглядит так:
'===========================
Public Declare Function ElmdscrAccessor_getMSElement Lib "stdmdlaccessor.dll" (ByVal ElementDescr As Long) As Long
Public Declare Function mdlCone_extractDEllipse3ds Lib "stdmdlbltin.dll" (ByVal pTop As Long, ByVal pBottom As Long, ByVal pElement As Long) As Long
Dim elDescrP As Long, eleTop As Long, eleButtom As Long, rez As Long, valLongDesc As Long
Private Sub T2buildPRJConeElem(welem As element)
elDescrP = welem.AsConeElement.MdlElementDescrP(False)
valLongDesc = ElmdscrAccessor_getMSElement(elDescrP)
rez = mdlCone_extractDEllipse3ds(eleTop, eleButtom, valLongDesc)
' elDescrP = 32842112
' valLongDesc = 32842152
' rez = eleTop = eleButtom = 0
End Sub
Private Sub T2buildPRJConeElem(welem As element)
valLongDesc = ElmdscrAccessor_getMSElement(welem.MdlElementDescrP(False))
rez = mdlCone_extractDEllipse3ds(eleTop, eleButtom, valLongDesc)
' elDescrP = 49180712
' valLongDesc = 49180752
' rez = eleTop = eleButtom = 0
End Sub
'==========================
Все равно возвращает нули. Что неправильно? Как еще разбить конус на элипсы?
-----------------
Руслан |
|
Вернуться к началу |
|
|
Leonid давно здесь сидим
Зарегистрирован: 28.01.2006 Сообщения: 598 Откуда: С.-Петербург
|
Добавлено: Пн Мар 27, 2006 10:05 am Заголовок сообщения: |
|
|
Этот вопрос уже был бы уместен на обычном форуме VB
Функцию для эллипсов надо объявить по другому:
Код: |
Declare Function mdlCone_extractDEllipse3ds Lib "stdmdlbltin.dll" (ByRef el1 As ellipse, ByRef el2 As ellipse, ByVal pElement As Long) As Long
|
Структуру ellipse можно взять из файла jfieldlists.h
Поля этой структуры определены в DELLIPSE3D_FIELDS |
|
Вернуться к началу |
|
|
|