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

Копирование асс. файлов из другого файла

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



Зарегистрирован: 01.02.2006
Сообщения: 215
Откуда: Москва

СообщениеДобавлено: Чт Ноя 28, 2013 9:35 am    Заголовок сообщения: Копирование асс. файлов из другого файла Ответить с цитатой

Собственно суть задачи состоит в том что бы выбрать какой-нибудь dgn файл и подключить его асс. файлы к открытому файлу со всеми-всеми настройками начиная от видимости и заканчивая масштабами стилей линий слоев символики и обрезкой.

Казалось бы что тут сложного? открывай файлик с помощью mdlWorkDgn_openFile читай референсы да подключай. Ан нет, очень критично ВРЕМЯ подключения. На 250 файлах это становится до безобразия долго. Мне во всяком случае это не нравится.

И тут пришла мне в голову забавная мысль а что если попробовать скопировать элементы type 100 Reference Attach Element из одного файла в другой. И чудо свершилось!!! Скорость подключения полутысячи файлов доли секунды!!!!! Но как всегда без проблем не обходится Sad Видны эти файлы в окне референсов становятся только если файл заново открыть и даже mdlRefFile_getRefCount их не видит даже после mdlModelRef_loadReferenceModels

Я так понимаю что тупо копируя элементы стейшен не разбирает это что за элементы. И разбор их происходит только после открытия файла.

И теперь вопрос. Как бы заставить стейшен увидеть эти референсы без переоткрытия файла? При чем желательно что бы он их не прогружал целиком в кеш (а то эфект от скорости подключения теряется), мне их видеть на чертеже поначалу совсем не обязательно, потом можно будет прогрузить
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail
Leonid
давно здесь сидим


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

СообщениеДобавлено: Чт Ноя 28, 2013 1:34 pm    Заголовок сообщения: Ответить с цитатой

Тебе нужно чтобы они просто оказались в списке референсов?

попутно тупой вопрос... на всякий случай...
зачем подключать референсы референса, если есть параметр Nesting Depth?
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail
beer



Зарегистрирован: 01.02.2006
Сообщения: 215
Откуда: Москва

СообщениеДобавлено: Чт Ноя 28, 2013 1:41 pm    Заголовок сообщения: Ответить с цитатой

Leonid писал(а):
Тебе нужно чтобы они просто оказались в списке референсов?

ага

Leonid писал(а):
попутно тупой вопрос... на всякий случай...
зачем подключать референсы референса, если есть параметр Nesting Depth?

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


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

СообщениеДобавлено: Чт Ноя 28, 2013 4:06 pm    Заголовок сообщения: Ответить с цитатой

а через ModelRefIteratorP эти элементы тоже не видны?
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail
beer



Зарегистрирован: 01.02.2006
Сообщения: 215
Откуда: Москва

СообщениеДобавлено: Пт Ноя 29, 2013 8:03 am    Заголовок сообщения: Ответить с цитатой

Цитата:
а через ModelRefIteratorP эти элементы тоже не видны?


неа!

Я тут в справке наткнулся


Цитата:
When MicroStation loads a Model, it searches for its Reference Attachment elements, and creates a corresponding data object in memory to hold the information about the attachment. These objects are called DgnModelRef's and their lifetimes are controlled by the model from which they loaded


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



Зарегистрирован: 01.02.2006
Сообщения: 215
Откуда: Москва

СообщениеДобавлено: Вт Dec 03, 2013 2:41 pm    Заголовок сообщения: Ответить с цитатой

Копая библиотеку ustation.dll нашел функцию mdlRefFile_rebuildModelRefTree
методом тыка она заработала в следующем варианте

Код:

int mdlRefFile_rebuildModelRefTree(ModelRefP rootModel);


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


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

СообщениеДобавлено: Ср Dec 04, 2013 7:19 am    Заголовок сообщения: Ответить с цитатой

Недокументированные функции - это сила Very Happy
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail
beer



Зарегистрирован: 01.02.2006
Сообщения: 215
Откуда: Москва

СообщениеДобавлено: Ср Dec 04, 2013 7:48 am    Заголовок сообщения: Ответить с цитатой

Это вообще убийственная вещь! Только вот не знаю как объяснить их существование, потому что если посмотреть сколько их на самом деле и когда по названиям догадываешься что они делают, то скулы сводит от вожделения Very Happy и почему их не документируют не понятно. Толи по раздолбайству, толи не уверены что они в дальнейшем останутся в том же виде
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail
Leonid
давно здесь сидим


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

СообщениеДобавлено: Ср Dec 04, 2013 1:15 pm    Заголовок сообщения: Ответить с цитатой

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



Зарегистрирован: 01.02.2006
Сообщения: 215
Откуда: Москва

СообщениеДобавлено: Пт Dec 06, 2013 9:17 am    Заголовок сообщения: Ответить с цитатой

Ну собственно чего я добился.

Поскольку я извращенец и пишу на C# а не как все белые люди на c++, то пришлось несколько поизвращаться. Повторил описание структуры элемента type 100; Из дескриптора получил указатель на элемент, в unsafe режиме привел его к указателю на повторенную структуру у брал флаг отображения и только потом скопировал этот элемент. Результат получился выше всяких похвал, время подключения 250 файлов составило чуть больше секунды. Ура товарищи!!!!
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail
vikk



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

СообщениеДобавлено: Ср Апр 29, 2015 11:07 am    Заголовок сообщения: Ответить с цитатой

Добрый день
beer, все очень интересно и позновательно.
А rootModel - это MASTERFILE, или какой-то начальный корень существует в иерархии REF файлов. Как тогда его получить
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
beer



Зарегистрирован: 01.02.2006
Сообщения: 215
Откуда: Москва

СообщениеДобавлено: Вт Май 19, 2015 2:40 pm    Заголовок сообщения: Ответить с цитатой

rootModel - это модель, дерево асс. файлов которой мы строим. MASTERFILE - это все же из области семерки, но на сколько я помню для восьмерки где-то прописано что MASTERFILE=ACTIVEMODEL
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail
vikk



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

СообщениеДобавлено: Пт Май 22, 2015 3:20 pm    Заголовок сообщения: Ответить с цитатой

В восьмерке MASTER и ACTIV выглядят так, да, это одно и то же

Код:

#define       MASTERFILE             (mdlModelRef_getActive ())
#define     ACTIVEMODEL             (mdlModelRef_getActive ())
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Показать сообщения:   
Начать новую тему   Ответить на тему    Список форумов Конференция САПР Bentley MicroStation -> Профессиональное Часовой пояс: GMT + 3
Страница 1 из 1

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


Powered by phpBB © 2001, 2005 phpBB Group