|
||
| Правила | Регистрация | Пользователи | Сообщения за день | | Поиск | | Справка по форуму | Файлообменник | |
|
![]() |
Поиск в этой теме |
![]() |
#1 | |
Помогите начинающему разобраться с блоками
промышл проектант
Изовсехщелей
Регистрация: 26.05.2005
Сообщений: 323
|
||
Просмотров: 9855
|
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,450
|
Тебе именно через dxf надо? Если через activex покатит, см. http://www.arcada.com.ua/forum/viewtopic.php?t=981
А так-то можно добираться примерно так, наверное: Код:
Код:
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
промышл проектант Регистрация: 26.05.2005
Изовсехщелей
Сообщений: 323
|
Спасибо - буду разбираться дальше.
Через activex не покатит - так как не разобрался в простом а более сложное еще впереди. А нельзя ли в 2-х словах описать принцип получения значений атрибутов? Т.е описать что механизм действия вашего примера? Если не сложно конечно ![]() |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,450
|
Ну в общем-то сначала проверяется, является ли block блоком с атрибутами:
Код:
Код:
Код:
Код:
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Армспорт Регистрация: 18.07.2006
Ейск
Сообщений: 355
|
Можно и одним словом - команда (tblobjname "block" "<Имя блока>") - на выходе получаем имя примитива блока (ename), потом как обычно можно использовать (entnext ename) получая имена примитивов внутри блока, пока не вернёт nil.
А Крыс - молоток, именно эту команду и пропустил!!! ![]() Нехватает перед (while... такой строки Код:
(Кстати Крысу совет - append в таком варианте тоже будет сильно тормозить программу) |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,450
|
> Евгений А.: Я не люблю dxf, кроме тех случаев, когда его использование удобно (в частности, получение наборов). Все остальное я настолько давно делаю через vla, что dxf вспоминается с трудом (особливо под BricsCAD).
В любом варианте сорри за хреновый код.
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Инженер-теплотехник Регистрация: 17.08.2006
Смоленск
Сообщений: 311
|
Помогите начинающему разобраться с удалением блоков.
AutoCAD 2006, без довесков. В новом пустом файле создаем два простейших блока "а" и "b", невзрываемых, сохраняем этот файл под именем 1.dwg в любое удобное место. Получается файл-библиотека блоков. Далее вставляем блоком эту библиотеку в другой новый файл, и удаляем блоки следующим методом: Код:
Что такое нужно сделать, чтобы все блоки убирались с первого захода? Только не предлагайте использовать _PURGE, от него-то и пытаюсь избавиться. |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,450
|
А блок а случаем не входит в блок b (ну или наоборот)?
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Инженер-теплотехник Регистрация: 17.08.2006
Смоленск
Сообщений: 311
|
Еслибы.
А почему он тогда удаляется после закрытия-открытия файла? И пургенится? Прицеплю тестовый файл заодно |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,450
|
У меня кад сошел с ума сегодня, поэтому без проверок:
Код:
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. Последний раз редактировалось Кулик Алексей aka kpblc, 20.12.2007 в 17:00. Причина: Добавил (vl-load-com) |
|||
![]() |
|
||||
Инженер LISP Регистрация: 11.05.2005
Минск
Сообщений: 6,996
|
Можно копировать блоки через objectDBX
Как пример DBXImportBlock Fatty
__________________
Как использовать код на Лиспе читаем здесь |
|||
![]() |
|
||||
Инженер-теплотехник Регистрация: 17.08.2006
Смоленск
Сообщений: 311
|
Алексей, с небольшими поправками программа работает, вот только блоки не удаляет. При пошаговом выполнении выдает ошибку в строке (lambda () ....), все то же "Object is referenced".
Свойство effectivename стоит проверять для всех блоков или только для динамических или с атрибутами? Пока пытался выяснить куда еще информация о вставленных блоках пишется, нашел решение проблемы. Самое идиотское, еслиб случайно не получилось, никогда не догадался бы. В файле-библиотеке у меня есть не только записи о блоках, но и вхождения этих блоков (в модели, чтобы знать какие блоки есть в файле). Удалил один блок из библиотеки и забыл выполнить зачистку. Так после вставки файла-библиотеки в другой файл именно этот блок удалился без вопросов. В принципе решение найдено, только неудобно, что в библиотеке не видно входящих в неё блоков. Да и вопрос, что куда пишется при вставке, остается открытым. И что происходит при закрытии-открытии файла, после чего ранее "неубиваемые" блоки спокойно удаляются? |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,450
|
Чертовщина какая-то. Я ж удаляю вставку библиотеки... В качестве уточнения: "тестовый пример" в #13 это библиотека или "результат вставки"? Если второе - выложи саму библиотеку. Тогда смогу погонять код более какчественно )
effectivename требуется для дин.блоков (у них (vla-get-name) вернет нечто типа "*Uxxx").
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Инженер LISP Регистрация: 11.05.2005
Минск
Сообщений: 6,996
|
Вот еще ссылочка
Копирование блоков из чертежа в чертеж
__________________
Как использовать код на Лиспе читаем здесь |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,450
|
VVA, ObjectDBX очень удобен, но не гарантирует 100% работы
![]()
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Инженер-теплотехник Регистрация: 17.08.2006
Смоленск
Сообщений: 311
|
>> Кулик Алексей aka kpblc
Вот и я о том же - фигня какая-то наблюдается ![]() Файл "1.dwg"из №13 это именно библиотека. В нем два блока "а" и "b" находящиеся в модели. Также там присутствуют описания этих блоков в символьной таблице BLOCK, назовем их "a_i" и "b_i". Вставляем этот файл-библиотеку как блок в другой файл (ну хоть в "Drawing1"): Код:
Удаляем блок "1" и его описание "1_i" из "Drawing1": Код:
Действие №полтора: сохраняем "Drawing1", закрываем, открываем снова. Записи "a_i" и "b_i" спокойно удаляются vla-Delete'ом. Вот что, спрашивается, исправил автокад во время закрытия файла? Действие №2. В исходном файле-библиотеке удаляем блоки "а" и "b" из модели, остаются только их описания "a_i" и "b_i". Пусть теперь этот файл зовется "2.dwg". Вставляем его в новый файл "Drawing2" - теперь в нем есть блок "2" и описания блоков "2_i", "a_i", "b_i". Так вот в этом случае функцией vla-Delete можно удалять "a_i" и "b_i", не удаляя перед этим "2" и "2_i"! В принципе я разобрался что делать, код тестировать наверное больше не нужно. Вот если сможешь сказать какие еще записи остаются в первом случае... >> VVA Спасибо за ссылки. Программы пригодятся. Жаль только в ObjectDBX не разбираюсь, с ходу понять не получится ![]() |
|||
![]() |
|
||||
Thượng Tá Quân Đội Nhân Dân Việt Nam Регистрация: 14.03.2005
44d32'44"С, 33d26'51"В
Сообщений: 13,372
|
Да не надо мучиться с попытками постоянно удалять неиспользуемые блоки!
Вот уже 18 лет успешно использую простую схему: 1. В библиотеки собираются маленькие блоки однотипного назначения. В одной библиотеки - трубопроводная арматура для схем, в другой - топографические знаки и т.п. Если пользователю понадобилась, например, задвижка, то через минуту может понадобиться вентиль из этой же библиотеки. 2. Имеется функция проверки наличия определения блока в чертеже. Ей передается имя библиотеки (относительное) и имя блока. Если этого блока нет, вставляется вся библиотека. Теперь все определения блоков из нее имеются в чертеже. 3. В момент вставки библиотеки функцией command на этапе запроса точки вставки выполняется автоматическое прерывание. Теперь все определения блоков есть, но вставок нет. В чертеже при этом куча "лишних", пока не использованных блоков. 4. "Лишние" блоки лежат, никого не трогают. Да, занимают некоторое место, но это мелочь. 5. Команда PURGE может выполняться или не выполняться в любой момент.Но уже независимо от вставок. 6. Для "больших" блоков, например 3D моделей, где каждый блок может весить по 1Мб и более использование библиотек нецелесообразно. А вот для маленьких "блочишек" очень даже хорошо. Некоторые библиотеки у меня живут еще с AutoCAD-10. В одной из библиотек 150 блочков общим весом 200 Кб. Если эти блоки разложить в отдельные файлы, то в сумме они потянут около 5Мб, так как в каждый отдельный файл записывается больше общей информации, чем описания примитивов. 7. Вставка конкретного одного блока из другого файла через DBX возможна, но ненадежна. Работать будет, но в присутствии автора. А нужны абсолютные гарантии, так как именно на работе с маленькими библиотечными блочками очень многое держится. Сами вставки блоков реализуются во множестве вариантов (однократная, многократная, с привязкой к линиям и т.п.). |
|||
![]() |
|
||||
Инженер LISP Регистрация: 11.05.2005
Минск
Сообщений: 6,996
|
+1 К посту №21 Функцию можно посмотреть здесь
> Олег К #20 А потом появяться в библиотеке динамические блоки. Отгребешь гемора еще больше. ИМХО лучше оставить их в покое до окончания работы, а потом сделать пурже.
__________________
Как использовать код на Лиспе читаем здесь |
|||
![]() |
|
||||
Инженер-теплотехник Регистрация: 17.08.2006
Смоленск
Сообщений: 311
|
Ну конечно же я читал "САПР на базе...". И программа составлена именно по такому принципу. Просто понадобилось подробнее разобраться с определенным куском кода, вот и отделил его от остального. Началось все здесь создание собственной подписи???, где-то с середины страницы.
Для чего это понадобилось: По требованию начальства в dwg-файлах в форматках проставляются подписи исполнителей (dwg остаются только в нашем архиве, заказчикам - картинки с них). Надоело блоки вставлять вручную, написал программу, которая в нужные места вставляет нужные подписи. Поскольку все блоки подписей хранятся в одном файле (показалось нецелесообразным делать их отдельными), в обрабатываемом файле оказывается много ненужных блоков. Вот их то и зачищаю в конце работы программы. Ведь в данном файле они никогда уже не понадобятся. Блоки не динамические и без атрибутов. В первом варианте вставка/удаление были реализованы через command, сейчас переделываю под vla-функции. |
|||
![]() |
|
||||
Thượng Tá Quân Đội Nhân Dân Việt Nam Регистрация: 14.03.2005
44d32'44"С, 33d26'51"В
Сообщений: 13,372
|
Если уж кому-то, как выражаются в определенных кругах, "хочется самому себе срок подписать", то делайте так.
А вообще-то именно для таких "подписей" библиотека и не нужна. Пусть каждый лично свою личную подпись ставит. Это дело легко автоматизировать - один щелчок, и подпись на месте. Причем лучше, если она вставляется как XREF только с компьютера владельца. Ушел DWG "налево" - и подписей не будет, а на момент делания "картинки" - подпись на месте. Иначе будет как у незабвенной Серны Михайловны - "факсимиле", которые кто угодно и куда угодно будет ставить. Универсальная "роспись" за любого человека. |
|||
![]() |
|
||||
Инженер-теплотехник Регистрация: 17.08.2006
Смоленск
Сообщений: 311
|
Да понимаю я что так не делается. Осталось убедить в этом начальство, хотя скорее сами убедятся, когда вляпаются. Ссылки на подписи уже лучше, но ведь нужно каждому исполнителю объяснить как этим пользоваться. Ну допустим, если использовать кнопку, никто даже не догадается как это делается. НО! На чертеже бывает до 10-ти разных подписей, получается каждый должен открыть этот файл на своем компе и вставить личную подпись, да еще на каждом листе. Честное слово, вручную подписывать быстрее оказывается. Если каждая подпись находится только на компе подписывающегося, да еще вставляется с относительным путем, то с какого компа, спрашивается, распечатывать этот файл?
Чертежи все равно хранятся на файловом сервере. Мне кажется, банк подписей стоит хранить там же и вставлять ссылками. А пока работаю с тем что есть. Нет у меня права заставлять делать так, как лучше, могу только рекомендовать. Большинству же эти рекомендации до ... ![]() И второй момент. Подобная "электронная подпись" не имеет юридической силы. Ну вот, теперь обсуждение можно продолжить в теме с которой и начались мои вопросы ![]() Впрочем, по подписям уже много тем было, нечего повторяться. |
|||
![]() |
|
||||
Thượng Tá Quân Đội Nhân Dân Việt Nam Регистрация: 14.03.2005
44d32'44"С, 33d26'51"В
Сообщений: 13,372
|
Порекомендуйте "начальству" заранее натиражировать своих подписей с печатью на чистых листах. Типа, чтобы потом не перетрудиться. Лучше если совместная подпись с бухгалтером.
Да, подобная подпись силы не имеет. Но тогда зачем выдаете документацию, не имеющей юридической силы? Впрочем, это все равно не доходит до сознания пока жареный петух не клюнет. |
|||
![]() |