Список форумов Конференция САПР Bentley MicroStation Конференция САПР Bentley MicroStation
www.ustation.ru
 
 FAQFAQ   ПоискПоиск   ПользователиПользователи   ГруппыГруппы   РегистрацияРегистрация 
 ПрофильПрофиль   Войти и проверить личные сообщенияВойти и проверить личные сообщения   ВходВход 

Разборка конуса

 
Начать новую тему   Ответить на тему    Список форумов Конференция САПР Bentley MicroStation -> Прикладное
Предыдущая тема :: Следующая тема  
Автор Сообщение
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    Заголовок сообщения: Ответить с цитатой

Как передаются параметры в функцию?
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail
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))
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail
Rus77



Зарегистрирован: 06.03.2006
Сообщения: 53

СообщениеДобавлено: Пн Мар 27, 2006 8:51 am    Заголовок сообщения: Ответить с цитатой

Здравствуйте!
Спасибо за совет, только он не заработал....SadSad
В общем случае процедура выглядит так:
'===========================
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 Wink
Функцию для эллипсов надо объявить по другому:
Код:

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
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail
Показать сообщения:   
Начать новую тему   Ответить на тему    Список форумов Конференция САПР Bentley MicroStation -> Прикладное Часовой пояс: GMT + 3
Страница 1 из 1

 
Перейти:  
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах


Powered by phpBB © 2001, 2005 phpBB Group