|
||
| Правила | Регистрация | Пользователи | Поиск | Сообщения за день | Все разделы прочитаны | Справка по форуму | Файлообменник | |
|
![]() |
Поиск в этой теме |
![]() |
#1 | |
Нужна функция импорта блока из файла
инженер (КМ)
Красноярск
Регистрация: 30.10.2004
Сообщений: 3,825
|
||
Просмотров: 11092
|
|
||||
Мои функции. Сделаны на основе ф-ций Алексея из Cadware. Не помню чего менял или нет. Немного поясню. Схема работы у нас организована следующим образом: в путях доступа Автокада прописан путь к корневой папке приложения (например "C:\\Progmas files\\MIP"). Библиотека блоков располагается в подпапке DWG, дальше подпапки разбиваются на отделы и т.п. Поиск библиотеки блоков может осуществляться как по имени блока (например "bibl.dwg"), так и по относительному пути (например "DWG\\DO_ZNAK\\STOJKA_P.DWG").
Если используется полный или относительный путь, то обязательно указывать расширение. Если надо вставить файл как блок, то имя библиотеки и имя файла должны совпадать. Если вставляется библиотека блоков, то проверяется, что поcле ее внедрения в таблице блоков появился блок с требуемым именем. Остальные блоки библиотеки после внедрения не пуржаться. Вот кратенько и все. Код:
__________________
Как использовать код на Лиспе читаем здесь Последний раз редактировалось VVA, 18.01.2017 в 07:11. Причина: орфография |
||||
![]() |
|
||||
Цитата:
Если имя block-lib и block-name совпадает, то загружается блок как файл Если имя block-lib и block-name разные, то загружается блок block-lib и проверяется наличие блока block-name. Цитата:
*** Добавлено Алгоритм работы функции расписан ShaggyDoc №21
__________________
Как использовать код на Лиспе читаем здесь |
||||
![]() |
|
||||
инженер (КМ) Регистрация: 30.10.2004
Красноярск
Сообщений: 3,825
|
Ну вообще-то я хотел чтобы не загружались лишние блоки. Я думал что есть нечто посовершеннее чем "_.-insert".
Прочитал ShaggyDoc №21 из темы "Помогите начинающему разобраться с блоками"... возможно он прав. Что ж если нет других вариантов, то буду прибираться в своей библиотеке. VVA спасибо. |
|||
![]() |
|
||||
А я то о чем говорю? Если вставлять блок из файла с моделью теплового пункта, то вставляется _insert-ом все, что в файле. А зачем это мне надо? Мне надо только один краник, или теплообменник. Я понимаю, что если сделать на каждую деталь свой файл, да еще и разместить в нем блок, чтобы 0,0,0 было на месте точки вставки, то все будет в шоколаде, но что делать, если мне подарили чужую базу? Гигабайты блоков? Я даже не знаю что там есть, а чего там нет. Как мне найти там то, что мне нужно? И имен я не знаю и путей к файлам тоже. Мне бы перелопатить dwg и выписать что там есть за блоки, или хотя бы методом последовательного накопления - открыл файл - он пропесочился и в БД вписался автоматом. Поскольку все файлы мы когда-нибудь, да открываем, то и когда-нибудь будем иметь почти все, что у нас в dwg есть.
Функцию, что krieger заказал, а VVA написал можно использовать только после того, как ты точно знаешь имя и путь к файлу. Лучше было бы так: Нажал кнопку "вставить блок из библиотеки" выпало меню - "по имени блока" "по имени файла" "по назначению". Если выбираешь имя блока - выдает в алфавитном порядке все имена блоков во всех перелопаченных файлах. После указания на блок - выпадает список со всеми файлами, где он есть. Указал на выбранный файл - получил. Выбираешь имя файла - все перелопаченные файлы в алфавитном порядке выдает, а когда выбираешь конкретный - выдает список блоков в нем. Выбираешь "по назначению" - выдает раскрывающееся дерево справки, где спускаясь по ступенькам доходишь до нужного блока и когда его жмешь (ссылка) - список файлов где он есть и выбираешь любой - готово. |
||||
![]() |
|
||||
>Supermax А DBXImportBlock Fatty тебе не подойдет?
__________________
Как использовать код на Лиспе читаем здесь |
||||
![]() |
|
||||
VVA, Вещь безусловно классная. Спасибо!
Одна только загвоздка небольшая, как оказалось, на моем компе чуть больше чем 160000 dwg файлов. До старости можно нужный блок искать. У Kpblc-a чуть больше 40000, да и у тебя, наверное, не меньше. |
||||
![]() |
|
||||
В данной мне VVA ссылке, программа имеет один дефект.
В ней устанавливается путь и имя временного файла на усмотрение машины и если прерывается программа то dcl файл навсегда остается в этой папке. Происходит накопление "брошеных" dcl файлов. Так делать нельзя. Имя должно быть фиксировано и папка указана напрямую типа c:\\templsp\\libris.dcl а перед тем, как создавать новый файл, старый должен быть удален. Хотя W заново все пишет. |
||||
![]() |
|
||||
Если имена блоков осмысленные, то запихать в mdb, excell или текстовый файл все имена созданных в файле блоков не так уж и сложно.
Как пример. На диске образуется файл C:\BlockName.xls Перелопачивает файлы, поочередно открывая их. Через DBX быстрее, но под руками нет готового кода с dbx Код:
__________________
Как использовать код на Лиспе читаем здесь |
||||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,598
|
Посмотри в dwgrulib - там вроде было по ObjectDBX функции открытия и закрытия файлов.
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
VVA, макрос обломился.
Как только он напарывается на ...recover.dwg прога слетает. Колбасит все файлы с полным открытием и конца и края не видно этому процессу. Я писал, что безсмысленно обрабатывать все файлы на предмет создания списка заключенных в них блоков. Поседеете. Только методом накопления. А вот список файлов можно создать и уже выбирая из него выколупывать список блоков. Сейчас попробую что-нибудь не большое. |
||||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,598
|
перед пакетной обработкой файлов ИМХО не помешает прочесть http://www.arcada.com.ua/forum/viewtopic.php?t=1060
Ну и дополнительно - что обсуждалось на caduser.ru по этому вопросу.
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
5 минут одну папку лопатило 857 позиций блоков нашло.
Путь - отдельно, имя файла - отдельно! (надо) Если повторно открывается в той-же папке тот же файл, надо переписывать, однако все, что там было на то, что там теперь есть. И ссылки не гоже переписывать, хоть они и похожи на блоки, но всеж не блоки. А так - верным путем идете товарищи! |
||||
![]() |
|
||||
Кстати, а из 7-го поста прожка без открытия файла все блоки выгребла. Последний перл, когда нарывался на раскрашенную монтажку теплопункта, пока не откроется полностью файл, грузился и грузился. А ту же монтажку из поста 7 за секунду переписало, да еще и временный dcl из найденного сорганизовало.
|
||||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,598
|
Файл все равно открывается, хочешь ты того или нет. Иначе до его потрохов не добраться.
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
>Supermax #14 Я уже писал, что через DBX (что и делает прожка из #7) быстрее. Файл открывается все равно, только не визуализируется и (возможно) не подгружаются вн. вссылки. Примера с DBX под руками не было (пока Алексей не показал где
![]()
__________________
Как использовать код на Лиспе читаем здесь |
||||
![]() |
|
||||
Так что делать с перезаписью повторно открытого?
Может сразу в Access делать? Я знаю, что Алексей сведущ в этом вопросе, но получается, что программа становится трудоемкой и я понимаю, что писать ее "за так" и ломит и крутит. Но без этого, на библиотеке блоков можно ставить крест. Сейчас ни в одной смете не найдешь пункта "амортизация ПО", но после нового года, я прикрываясь новым законом без бабла на сей счет, даже разговаривать с заказчиком не буду. И плевать мне, что в сметных нормах нет этого пункта и экспертиза сметы постоянно подобные попытки под ножницы пускает. Не мои проблемы! Вот тогда и поговорим о библиотеке блоков. До нового года осталось пару-тройка дней. |
||||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,598
|
Внести данные в Access особо не сложно. Вопрос в отображении и опять же - поиске. Вот тут (ИМХО) головняк.
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Сразу не отвечал, оформлял ввиде библиотечных функций [DwgRuLispLib: Функции чтения и установки свойств рисунка (_dwgprops)] Как предложение - в обрабатываемом документе в прочих свойствах (команда _dwgprops) проверять наличине свойства с заданным именем (например "DWGRU_FILE_HANDLE"). Значение по этому ключу - гарантированно уникальное значение строки, которое в mdb может выступать как ключ поиска. Если такового нет - создавать
Функцией _get_uniq_string генерируется строка "DWGRU-20071227-16450528-58" , которая расшифровывается так "DWGRU" - сигнатура (у каждого пользоватеоя может быть своя) 20071227 - 2007 г. 12 месяца 27 дня 16450528 - 16 часов 45 минут 05.28 секунды 58 - случайное число Команда TEST записывает в свойства рисунка в прочие в поле DWGRU_FILE_HANDLE некое значение.
__________________
Как использовать код на Лиспе читаем здесь |
||||
![]() |
![]() |
|
Опции темы | Поиск в этой теме |
|
|
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
структурированный список | Holon | Программирование | 22 | 11.09.2007 14:09 |
Нужна помощь в открытии компасовского файла. | PAKOB | Разное | 4 | 19.04.2007 19:49 |
Нужна программа для раскадровки видео файла в gif анимацию | pyatifan | Разное | 19 | 14.02.2007 08:10 |
Нужна помощь по созданию файла шрифта | fynjy | AutoCAD | 5 | 17.10.2006 12:47 |