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

Вычитание

 
Начать новую тему   Ответить на тему    Список форумов Конференция САПР Bentley MicroStation -> Прикладное
Предыдущая тема :: Следующая тема  
Автор Сообщение
stich



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

СообщениеДобавлено: Пн Dec 01, 2008 9:52 am    Заголовок сообщения: Вычитание Ответить с цитатой

Подскажите, кто знает, как можно реализовать вычитание одного тела из другого.
То есть надо, если два тела пересекаются (находят друг на друга), то из одного тела вырезать этот кусок пересечения.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Leonid
давно здесь сидим


Зарегистрирован: 28.01.2006
Сообщения: 598
Откуда: С.-Петербург

СообщениеДобавлено: Пн Dec 01, 2008 11:47 am    Заголовок сообщения: Ответить с цитатой

В VBA это можно сделать только с использованием MDL функций
например так:
Код:

Private Declare Function mdlKISolid_bodyToElementD _
    Lib "stdkisolid.dll" (ByRef edPP As Long, _
                        ByVal bodyP As Long, _
                        ByVal wireframe As Long, _
                        ByVal nIsoParametrics As Long, _
                        ByVal templateP As Long, _
                        ByVal modelref As Long, _
                        ByVal threeD As Long) As Long
Private Declare Function mdlKISolid_subtract _
    Lib "stdkisolid.dll" (ByVal B2 As Long, _
                            ByVal B1 As Long) As Long
Private Declare Function mdlKISolid_elementToBody _
    Lib "stdkisolid.dll" (ByRef bodyPP As Long, _
                            ByVal edP As Long, _
                            ByVal modelref As Long) As Long
Private Declare Sub mdlKISolid_endCurrTrans _
    Lib "stdkisolid.dll" ()
Private Declare Sub mdlKISolid_beginCurrTrans _
    Lib "stdkisolid.dll" (ByVal modelRef As Long)
Private Declare Sub mdlKISolid_freeBody _
    Lib "stdkisolid.dll" (ByVal bodyP As Long)


    Dim bodyP1 As Long
    Dim bodyP2 As Long
    Dim elem1 As Element
    Dim elem2 As Element
    Dim elemResult As Element
    Dim lngEldscrP As Long
    Dim ret As Long
   
    Dim oEnumerator As ElementEnumerator

    Set oEnumerator = ActiveModelReference.GetSelectedElements

    ' должны быть выделены два элемента Solid
    oEnumerator.MoveNext
    Set elem1 = oEnumerator.Current
    oEnumerator.MoveNext
    Set elem2 = oEnumerator.Current

    mdlKISolid_beginCurrTrans ActiveModelReference.MdlModelRefP
   
    mdlKISolid_elementToBody bodyP1, elem1.MdlElementDescrP, ActiveModelReference.MdlModelRefP
    mdlKISolid_elementToBody bodyP2, elem2.MdlElementDescrP, ActiveModelReference.MdlModelRefP

    ret = mdlKISolid_subtract(bodyP1, bodyP2)
   
    mdlKISolid_bodyToElementD lngEldscrP, bodyP1, False, -1, 0, ActiveModelReference.MdlModelRefP, True
   
    mdlKISolid_endCurrTrans
   
    Set elemResult = MdlCreateElementFromElementDescrP(lngEldscrP)
   
    elem1.Redraw msdDrawingModeErase
    elem2.Redraw msdDrawingModeErase
   
    ActiveModelReference.RemoveElement elem1
    ActiveModelReference.RemoveElement elem2
    ActiveModelReference.AddElement elemResult
   
    elemResult.Redraw msdDrawingModeNormal
   
    mdlKISolid_freeBody (bodyP1)

Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail
stich



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

СообщениеДобавлено: Пн Dec 01, 2008 12:35 pm    Заголовок сообщения: Ответить с цитатой

Классно!
Большое спасибо!
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
stich



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

СообщениеДобавлено: Вт Dec 02, 2008 11:58 am    Заголовок сообщения: Ответить с цитатой

А как можно сохранить все атрибуты редактируемого тела? У меня изначально это элемент металлоконструкции, а получается что вся инфа теряется.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Leonid
давно здесь сидим


Зарегистрирован: 28.01.2006
Сообщения: 598
Откуда: С.-Петербург

СообщениеДобавлено: Вт Dec 02, 2008 1:12 pm    Заголовок сообщения: Ответить с цитатой

stich писал(а):
А как можно сохранить все атрибуты редактируемого тела? У меня изначально это элемент металлоконструкции, а получается что вся инфа теряется.

Теряется, потому что оба элемента удаляются:
Код:

    ActiveModelReference.RemoveElement elem1
    ActiveModelReference.RemoveElement elem2

Нужно перед удалением скопировать атрибуты на новый элемент elemResult
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail
stich



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

СообщениеДобавлено: Пт Dec 05, 2008 6:18 am    Заголовок сообщения: Ответить с цитатой

Ни как не получаетcя новый элемент сделать металлоконструкцией. Подскажите как?
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Leonid
давно здесь сидим


Зарегистрирован: 28.01.2006
Сообщения: 598
Откуда: С.-Петербург

СообщениеДобавлено: Пт Dec 05, 2008 10:34 am    Заголовок сообщения: Ответить с цитатой

Что это значит - "Сделать металлоконструкцией"? Shocked
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail
Юра



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

СообщениеДобавлено: Пт Dec 05, 2008 10:47 am    Заголовок сообщения: Ответить с цитатой

видать имеется ввиду что бы не терялись атрибуты .... надеюсь они в тэгах ...
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail
Leonid
давно здесь сидим


Зарегистрирован: 28.01.2006
Сообщения: 598
Откуда: С.-Петербург

СообщениеДобавлено: Пт Dec 05, 2008 11:08 am    Заголовок сообщения: Ответить с цитатой

Вероятно, "элемент металлоконструкции" генерируется каким-то приложением?
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail
stich



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

СообщениеДобавлено: Пт Dec 05, 2008 11:21 am    Заголовок сообщения: Ответить с цитатой

Когда в Structural рисуешь различные балки, они и есть металлоконструкции. Там в линейных манипуляциях есть такое, обновление/редактирование выреза, мне надо тоже самое и чтобы данные не потерялись.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Leonid
давно здесь сидим


Зарегистрирован: 28.01.2006
Сообщения: 598
Откуда: С.-Петербург

СообщениеДобавлено: Пт Dec 05, 2008 2:40 pm    Заголовок сообщения: Ответить с цитатой

Я не программировал для Structural и не в курсе - какие там используются аттрибуты.
Да и переписывать Structural заново - неблагодарная задача...
Все что я здесь представил - код для чистого MS
Возможное решение задачи:
в Structural целесообразно использовать Structural VBA API
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail
Показать сообщения:   
Начать новую тему   Ответить на тему    Список форумов Конференция САПР Bentley MicroStation -> Прикладное Часовой пояс: GMT + 3
Страница 1 из 1

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


Powered by phpBB © 2001, 2005 phpBB Group