|
  |
Создание спецификации автоматически (Дубль2), Рассматриваются технология и ее реализация по автоматическому создани |
|
|
Гость_Supermax_*
|
25.10.2007, 13:09
|
Guest Forum

|
Kpblc, вот файл с безимянным блоком. Его редактором не откроешь. Есть два вопроса. Первый - можно ли ему присвоить имя и всетаки открыть редактором? Второй - хочу динамический блок с виртуальным изделием сделать безимянным. КАК? Это очень хорошая защита от ламеров. Я готов пожертвовать содержимым блока (в смысле вложенных pdf файлов, инструкций и рекламы) Рекламу я просто доп. свойством сделаю типа свойства "Представление" а служебную инфоримацию ссылкой.
Сообщение отредактировал Supermax - 25.10.2007, 13:10
|
|
|
|
|
25.10.2007, 16:10
|
CAD Developer
Группа: Участники форума
Сообщений: 409
Регистрация: 6.2.2006
Из: C.-Петербург, Россия
Пользователь №: 2062

|
Вообще-то, похоже, это объект окна ADT-шного, экспортированный в кад. Ему имя присвоить нельзя (vla-put-name не сработает), но скопировать содержимое в новый блок можно. Примерно так: Код (defun test (/ adoc ent ent_def name blk lst) (vl-load-com) (setq adoc (vla-get-activedocument (vlax-get-acad-object))) (if (and (= (type (setq ent (vl-catch-all-apply '(lambda () (car (entsel "\nБезымянный блок <Отмена> : "))) );_ end of vl-catch-all-apply );_ end of setq );_ end of type 'ename );_ end of = (= (strcase (cdr (assoc 0 (entget ent)))) "INSERT") (setq ent (vlax-ename->vla-object ent)) (equal (vla-get-isdynamicblock ent) :vlax-false) (wcmatch (vla-get-name ent) "`**") (= (type (setq name (vl-catch-all-apply '(lambda () (getstring t "\nНовое имя блока <Отмена> : ")) );_ end of vl-catch-all-apply );_ end of setq );_ end of type 'str );_ end of = (/= name "") );_ end of and (progn (setq ent_def (vla-item (vla-get-blocks adoc) (vla-get-name ent)) blk (vla-add (vla-get-blocks adoc) (vla-get-origin ent_def) name) lst ((lambda (/ res) (vlax-for subent ent_def (setq res (cons subent res)) );_ end of vlax-for (reverse res) );_ end of lambda ) );_ end of setq (vla-copyobjects adoc (vlax-make-variant (vlax-safearray-fill (vlax-make-safearray vlax-vbobject (cons 0 (1- (length lst)))) lst );_ end of vlax-safearray-fill );_ end of vlax-make-variant blk );_ end of vla-copyobjects );_ end of progn );_ end of if );_ end of defun На предоставленном варианте попытки вставить блок могут вызвать ощущение, что сработало неверно. На самом деле исходный блок вставлен не в мировой системе координат, а состав скопирован полностью. Дин.блок лично мне сделать анонимным не удалось. Имя поменять ему невозможно; тупое копирование примитивов ничего не дает (динамика сносится моментально).
|
|
|
|
Гость_Supermax_*
|
25.10.2007, 17:26
|
Guest Forum

|
Чем же они тогда отличаются? Ну нет имени, я в каде читал, что можно создавать блоки анонимные. Сейчас буду рыться.
|
|
|
|
Гость_Supermax_*
|
25.10.2007, 17:38
|
Guest Forum

|
Да, это ADT сделано и в кад перекачевало, НО! Вот у меня 2006 кад. Вот файл с непонятной штукой в нутри. Как редактировать? - а фиг его знает. Но кад, хоть и 2006, понимает что это. Посмотри в свойства и увидишь странный тип элемента. Если взорвать желитинький, или зелененький объект, появляются блоки с окнами, такой, какой я тебе на опознание дал. Такого не может быть, чтобы в программе небыло подхода к доступу в элемент.
|
|
|
|
|
25.10.2007, 20:36
|
CAD Developer
Группа: Участники форума
Сообщений: 409
Регистрация: 6.2.2006
Из: C.-Петербург, Россия
Пользователь №: 2062

|
создание описания анонимного блока: Код (setq blk_def (vla-add (vla-get-blocks (vla-get-activedocument (vlax-get-acad-object))) (vlax-3d-point '(0. 0. 0.)) "*U")) Насчет "странного" вида объекта. Хотя у меня и ADT2006 установлен, но, запущенный как acad, он распознал объект как proxy-объект. Формат представления proxy-объектов закрыт и доступен только членам ADN (почему Ривилис, входящий в ADN, и написал explodeproxy). ADT2006 вывалил сообщение об объектах более новой версии (кстати, explode не проворачивал - и без него все стало понятно). Я не стал заморачиваться с ADT 2007 и попробовал открыть в AA2008Rus. Там все нормально открылось - стена 2-слойная, окно прямоугольное 8-створчатое (хотя на самом деле обычное глухое окно, просто профиль ему сделали). Вдобавок стена вставлена черт-те как. Для нормального отображения (как это делается в ADT) поменял нормаль объекта - все стало понятно.
|
|
|
|
Гость_Supermax_*
|
26.10.2007, 9:50
|
Guest Forum

|
А теперь угадай, как я это сделал.
|
|
|
|
|
26.10.2007, 10:07
|
CAD Developer
Группа: Участники форума
Сообщений: 409
Регистрация: 6.2.2006
Из: C.-Петербург, Россия
Пользователь №: 2062

|
А он что, динамический? Был бы динамический - было бы интересно. Такого-то результата, как у тебя, я тоже добивался, только толку с этого... Как сделал? Могу только предположить: вставил дин.блок, потом элементы его вхождения скопировал в только что созданный анонимный блок - и удалил исходник. Так?
Сообщение отредактировал kpblc - 26.10.2007, 10:07
|
|
|
|
Гость_Supermax_*
|
26.10.2007, 10:13
|
Guest Forum

|
Нет. Я положил рядом с этим блоком динамический блок с трубой. Растянул его. Посмотрел, какой у него DXF-2 и далее сделал так: (setq a1 (entget (car (entsel)))) (setq a2 (subst '(2 . "*U3") '(2 . "*U1") a1)) (entmake a2)
С начала я ткнул в блок с окном и переписал все его коды в переменную а1. Затем заменил DXF-2 на ... ну ты видишь. Создал новый элемент. Вместо окна появилась труба. Причем той длинны, которую я вытянул перед перемещением. Если копировать начинку - скопируется базовое значение длинны, а так - афигеть.
|
|
|
|
|
26.10.2007, 10:25
|
CAD Developer
Группа: Участники форума
Сообщений: 409
Регистрация: 6.2.2006
Из: C.-Петербург, Россия
Пользователь №: 2062

|
Запаришься на файле с хотя бы 3-4 сотнями таких блоков вручную делать. И потом, особого смысла, если честно, я не вижу. О, вопрос: а что у тебя там помимо блоков еще 51 примитив делает? Видимость, конечно, у них, отключена, но это не мешает им существовать
|
|
|
|
Гость_Supermax_*
|
26.10.2007, 10:36
|
Guest Forum

|
Дык это все заблудилось однако. Сделал обратный процесс. Списал все DXF реквизиты с динамического блока, а 2-ой код подставил *U1 то есть от окна. При создании появился безимянный блок с окном на месте моего динамического, точкой вставки и положением точь, в точь, как динамический. Вывод - графика из базы берется по 2-му коду и только. Щас я еще один экспремент сбацаю.
Так включи им видимость, у меня ничего не включается. Может это дин. свойства висят?
|
|
|
|
Гость_Supermax_*
|
26.10.2007, 10:55
|
Guest Forum

|
Взял два нормальных динамических блока. Один - труба, другой - линия. Списал данные с линии, заменил ей 2-ой код на код 2 из трубы и сделал объект. Полученный объект, несмотря на то, что оба родителя имели имена стал безимянным. Сделал ему attsync появились у этого безимянного блока атрибуты. Вот есть теперь у нас безимянный блок с атрибутами, однако.
|
|
|
|
Гость_Supermax_*
|
26.10.2007, 11:49
|
Guest Forum

|
Я знаю, что это за элементы ты видишь. Это в динамическом блоке графика из других представлений лежит. В настоящем дин. блоке в разных окнах лежат: оболочка и торцы другого диаметра, моя реклама (тоже много элементов). Поскольку доступа к этим представлением теперь нет они и не видны и включить их врядли получится. Хотя сам факт наличия в базе блока "левых" деталей может пригодится.
|
|
|
|
|
26.10.2007, 12:17
|
CAD Developer
Группа: Участники форума
Сообщений: 409
Регистрация: 6.2.2006
Из: C.-Петербург, Россия
Пользователь №: 2062

|
Код (defun show () (vlax-for ent (vla-get-modelspace (vla-get-activedocument (vlax-get-acad-object))) (vl-catch-all-apply '(lambda () (vla-put-visible ent :vlax-true))) );_ end of vlax-for );_ end of defun Вот и вся любовь. Примитивы открыты (проверял на ADT2006 as acad; ACAD2007)
|
|
|
|
Гость_Supermax_*
|
26.10.2007, 12:24
|
Guest Forum

|
К сожалению ADT на этом компе не имею. А в каде ничего не произошло. Может скажешь что ты видишь?
|
|
|
|
Гость_Supermax_*
|
26.10.2007, 13:00
|
Guest Forum

|
Цитата Вообще-то, похоже, это объект окна ADT-шного, экспортированный в кад. Ему имя присвоить нельзя (vla-put-name не сработает) Код (vla-ConvertToStaticBlock (vlax-ename->vla-object (car (entsel))) "qqq") и обратно Код (vla-ConvertToAnonymousBlock (vlax-ename->vla-object (car (entsel)))) Только вот одна фигня осталась не разрешенная. В блоке как я и предполагал лежит остальная графика, но она выключенная для пространства модели и включенная для пространства редактора блоков. Если в блок зайти и выйти, то спросит сохранить или нет. Если ответить сохранить - графика станет видна и в модели. Помнишь базар на счет выключения элементов в блоке. Так вот они - выключенные, только как это сделать специально?
Сообщение отредактировал Supermax - 26.10.2007, 13:01
|
|
|
|
Гость_Supermax_*
|
26.10.2007, 13:11
|
Guest Forum

|
У Полещука маленькую недочипятку нашел. Он пишет, что vla-ConvertToStaticBlock "конвертация динамического блока в статический с именем" а он и анонимные блоки конвертирует однако.
|
|
|
|
|
26.10.2007, 14:49
|
CAD Developer
Группа: Участники форума
Сообщений: 409
Регистрация: 6.2.2006
Из: C.-Петербург, Россия
Пользователь №: 2062

|
Разговор насчет "выключения", конечно, помню. Но для дин.блоков надо смотреть словари их описаний, а я там не очень разбирался. vla-converttostaticblock - метод, появившийся только в 2006 версии (где и были дин.блоки запущены). То, что оно анонимные блоки обрабатывает, мало о чем говорит - vla-put-name для описания анонимного блока тоже сработает. Только файл будет испорчен, даже _audit его не всегда поднимет.
|
|
|
|
Гость_Supermax_*
|
26.10.2007, 17:59
|
Guest Forum

|
Что-то ты совсем "зачах" я смотрю. Прямо сквозит унынием в твоих ответах. Надо тебе "угольку" подкинуть. Динамические блоки, или нет, тут не причем. У тебя блок совсем не динамический, а простой. Он в анонимный перешел вместе со всей графикой, а потом его обратно именованным сделали. Ну и что, что он свойства потерял? Разве о них речь? Речь об объектах, которые не видны в модели, но есть в блоке. В простом блоке. Надо сравнить их потроха с такими же но только видимыми и узнать, что их видимость нарушает. Потом попробовать сделать это специально. Да там простой текст лежит от моей рекламы. Что в нем может быть такого необычного? А ить не видно его в модели однако.
VVA совсем заработался. Равнялку блоков никак не доделает, хотя я ему отстег обещал за это дать. Я длины в дин. блоках проиндексировал и без макроса. Но равнялка нужна все равно. Дальше вопрос застрял с позициями и нумерацией. Застрял также вопрос с модернизацией включения видимости объектов.
Ты скользкий тип, ни разу не сказал мне изменилось твое отношение к этой затее или нет. Судя по тому, что ты меня еще не бросил, изменилась. Ну тогда давай обсуждать заново идеологию. Я например многое пересмотрел в своих взглядах на мир. Ты ведь видишь, что виртуальное изделие это не только данные о товаре, а еще и возможность быстрого изменения объекта. Возьмем скажем болт. Динамический блок, содержащий в себе графику всего госта "легким поглаживанием" становится любой длинны и диаметра. ОДИН блок и все болты навсегда исчезли как отдельные элементы. Один блок ФБС и навсегда отпала необходимость рисовать ФБС-ки. Ну и данные тоже весьма полезны. Короче, резюмируй свое отношение к идее в настоящий момент.
Со счетом ты разберешься, я в тебя верю.
Осталось совсем немного. Создать набор элементов в которых проставлены и позиции и номера и стадии строительства и разделы проекта. Так, а их-то кто проставлять будет?
Я тут скачал прогу, так она мне идею подкинула. Начинается с панели кнопок. Они все одинакового размера и текст внутри. "Выравнивание длин"; "Аудит состава атрибутов"; "Аудит состава свойств"; "Настройка альтернативных имен свойств и атрибутов"; "Простановка позиций"; "Простановка номеров"; "Настройка таблицы очередности"; ну и еще что-нибудь и "Расчет спецификации".
|
|
|
|
|
26.10.2007, 21:48
|
CAD Developer
Группа: Участники форума
Сообщений: 409
Регистрация: 6.2.2006
Из: C.-Петербург, Россия
Пользователь №: 2062

|
Насчет смены видимости - я полагаю (подробно не исследовал), что это как раз связано с потерей динамичности блока. То есть с потерей словаря, который и отвечает за соответствие "значение параметра <-> значение видимости элемента". Простой текст или не текст - дело десятое. А вот для "полного" копирования и "перевставки" блока можно попробовать сделать так (вдобавок без работы со словарями  ): Код (defun test (/ adoc ent blk lst ins) (vl-load-com) (setq adoc (vla-get-activedocument (vlax-get-acad-object))) (if (and (= (type (setq ent (vl-catch-all-apply '(lambda () (car (entsel "\nУкажите блок <Отмена> : "))) );_ end of vl-catch-all-apply );_ end of setq );_ end of type 'ename );_ end of = (setq ent (vlax-ename->vla-object ent)) (= (vla-get-objectname ent) "AcDbBlockReference") );_ end of and (progn (vla-startundomark adoc) (setq blk (vla-add (vla-get-blocks adoc) (vla-get-origin (vla-item (vla-get-blocks adoc) (vla-get-name ent)) );_ end of vla-get-origin "*U" );_ end of vla-add lst ((lambda (/ res) (vlax-for subent (vla-item (vla-get-blocks adoc) (vla-get-name ent)) (if (equal (vla-get-visible subent) :vlax-true) (setq res (cons subent res)) );_ end of if (reverse res) );_ end of vlax-for );_ end of lambda ) );_ end of setq (vla-copyobjects adoc (vlax-make-variant (vlax-safearray-fill (vlax-make-safearray vlax-vbobject (cons 0 (1- (length lst))) );_ end of vlax-make-safearray lst );_ end of vlax-safearray-fill );_ end of vlax-make-variant blk );_ end of vla-copyobjects (setq ins (vla-insertblock (vla-objectidtoobject adoc (vla-get-ownerid ent)) (vla-get-insertionpoint ent) (vla-get-name blk) (vla-get-xeffectivescalefactor ent) (vla-get-yeffectivescalefactor ent) (vla-get-zeffectivescalefactor ent) (vla-get-rotation ent) );_ end of vla-InsertBlock );_ end of setq (foreach prop '("normal" "insertionpoint") (vlax-put-property ins prop (vlax-get-property ent prop)) );_ end of foreach (vla-update ins) (vla-erase ent) (vla-regen adoc acallviewports) (vla-endundomark adoc) );_ end of progn );_ end of if );_ end of defun --- Я тоже заработался  VB вкупе с .NET подвесил меня конкретно. Ну да ладно, это не особо интересно. С остальными задачами - разбираюсь, как только время появляется.
|
|
|
|
Гость_Supermax_*
|
27.10.2007, 12:39
|
Guest Forum

|
Kpblc, ты часом не валиком макросы пишешь?
|
|
|
|
Гость_Supermax_*
|
27.10.2007, 12:51
|
Guest Forum

|
Еще вопрос, пока ты не забыл что тут в лиспе написал. Есть такая штука в дин. блоке как lookup. Я заметил, что если даже убить все Stretch параметры, на которые завязаны строки этого lookup-a, то они все равно остаются видны в самом lookup-e, правда появляется восклицательный знак. Скопировать lookup в другой блок, как есть, ничего не меняя - вот это было бы достижение. Ими вся таблица свойств делается и каждый раз ее набивать - мучение. Атрибуты копируются, а эти lookpop-ы нет. Ты вот блок скопировал, а обменяться свойствами между блоками как?
|
|
|
|
Гость_Supermax_*
|
27.10.2007, 15:51
|
Guest Forum

|
Еще появилась зараза. Как лиспом нажать стрелку вниз? Хочу сделать макрос (вынужден) заполняющий lookup-ы из экселя. Для этого надо из буфера вставлять данные (Ctrl-v) и давить на стрелку вниз. Идеалогия такова: Запускаю макрос. В нем реатор на двойной и одинарный щелчки мыши. Двойной щелчек - это я открываю lookup, одинарный - это я ставлю курсор в ту позицию, с которой хочу начать заполнение lookup-a. Макрос включить при открытом lookup-e нельзя, но если он уже работает, то кто его остановит? Дальше происходит автоматическое открытие нужного файла экселя и из ячейки А1 и в низ, то есть А2, А3 и так до первой пустой ячейки, считываются данные. Считал ячейку - Ctrl-v и стрелку в низ, считал следующую и опять Ctrl-v и стрелку вниз и т.д. считал ячейку - пусто - стоп. Видимо надо копаться в системных переменных Windows. Там наверное должен быть буфер клавиатуры, куда записывать можно номер кнопки?
О-хо-хо, как мне пло-о-хо!
Сообщение отредактировал Supermax - 27.10.2007, 15:56
|
|
|
|
|
27.10.2007, 20:49
|
CAD Developer
Группа: Участники форума
Сообщений: 409
Регистрация: 6.2.2006
Из: C.-Петербург, Россия
Пользователь №: 2062

|
Цитата(Supermax @ 27.10.2007, 13:39) [snapback]181792[/snapback] Kpblc, ты часом не валиком макросы пишешь? Не, я под Маяковского кошу  Насчет lookup'a не догнал.
|
|
|
|
|
28.10.2007, 0:36
|
CAD Developer
Группа: Участники форума
Сообщений: 409
Регистрация: 6.2.2006
Из: C.-Петербург, Россия
Пользователь №: 2062

|
По lookup'у. Получить-то я все смог, но вот с изменениями что-то не срастается пока. Ни в какую:( Понятно, что надо делать через entmod, но повторяющиеся записи меня нервируют. На всякий случай вариант получения: Код (defun getlookup (name / _kpblc-conv-list-to-sublist dict lst) ;| * Получение списка возможных lookup-действий дин.блока * Параметры вызова: name эффективное (Effective) имя блока |;
(defun _kpblc-conv-list-to-sublist (lst count / res loc_count) ;| * Преобразование списка в список подсписков заданной длины * Параметры вызова: lst обрабатываемый список count длина подсписков |; (cond ((not lst) nil) ((not count) lst) ((< (length lst) count) lst) (t (setq loc_count 0) (while (< loc_count count) (setq res (append res (list (car lst))) lst (cdr lst) loc_count (1+ loc_count) );_ end of setq );_ end of while (setq res (append (list res) (_kpblc-conv-list-to-sublist lst count))) res ) );_ end of cond );_ end of defun
(vl-load-com) (vlax-for item (vla-getextensiondictionary (vla-item (vla-get-blocks (vla-get-activedocument (vlax-get-acad-object))) name );_ end of vla-item );_ end of vla-getextensiondictionary (setq lst (cons (vlax-vla-object->ename item) lst)) );_ end of vlax-for (mapcar '(lambda (dict) (cons (cdr (assoc 300 (entget dict))) (_kpblc-conv-list-to-sublist (mapcar 'cdr (vl-remove-if-not '(lambda (x) (= (car x) 302)) (entget dict)) );_ end of mapcar (cdr (assoc 93 (entget dict))) );_ end of _kpblc-conv-list-to-sublist );_ end of cons );_ end of lambda (vl-remove-if-not '(lambda (x) (wcmatch (strcase (cdr (assoc 0 (entget x)))) "*LOOKUPACT*")) (mapcar 'cdr (apply 'append (mapcar '(lambda (a) (vl-remove-if-not '(lambda (x) (= (car x) 360)) (entget a)) );_ end of lambda (vl-remove-if-not '(lambda (x) (wcmatch (strcase (cdr (assoc 0 (entget x)))) "*EVAL*") );_ end of lambda lst );_ end of vl-remove-if-not );_ end of mapcar );_ end of apply );_ end of mapcar );_ end of vl-remove-if-not );_ end of mapcar );_ end of defun Пример вызова: Код (getlookup (vla-get-EffectiveName (vlax-ename->vla-object(car(entsel)))))
Сообщение отредактировал kpblc - 28.10.2007, 0:44
|
|
|
|
Гость_Supermax_*
|
29.10.2007, 11:50
|
Guest Forum

|
Все прочел, спешу в налоговую, решай проблему со счетом.
|
|
|
|
Гость_Supermax_*
|
29.10.2007, 12:22
|
Guest Forum

|
К стати, установил себе DOSLib 7,8. Теперь могу и команды DOS-a из под лиспа запускать. Код http://download.mcneel.com/download.asp?email=lazebny@pelisker.ru&DownloadFileID=433&ID=doslib&LANGUAGE=en&CDKEY=
|
|
|
|
|
29.10.2007, 13:10
|
CAD Developer
Группа: Участники форума
Сообщений: 409
Регистрация: 6.2.2006
Из: C.-Петербург, Россия
Пользователь №: 2062

|
DOSLib вообще-то не только для выполнения dos-команд предназначен. Библиотека удобная, но до определенного момента.
|
|
|
|
Гость_Supermax_*
|
29.10.2007, 16:56
|
Guest Forum

|
Вау! Нам рекламку налепили, видать мы притягиваем внимание чье-то. Открыл на DWG.RU тему про эмулирование нажатия клавиш из под Lisp-а. Ясно с помошью delphi или чего-нибудь еще. Если получится кого-нибудь раскрутить на такую прибамбасину, круто будет.
|
|
|
|
|
29.10.2007, 22:11
|
CAD Developer
Группа: Участники форума
Сообщений: 409
Регистрация: 6.2.2006
Из: C.-Петербург, Россия
Пользователь №: 2062

|
Какую рекламку? Куда?? Насчет нажатия клавиш - ИМХО нереально, учитывая, что внутренние имена контролов окна lookup'a неизвестны, то есть обратиться к ним (ЯТД) по меньшей мере очень трудно.
|
|
|
|
Гость_Supermax_*
|
30.10.2007, 8:54
|
Guest Forum

|
О! А рекламку сняли. Вчера красовалась в заголовке темы Sanyo, видать денег мало дали, всего на один день и хватило. На счет клавиш - реально! Прочти первый пост на dwg.ru внимательно. Я делаю реактор на двойной клик мышкой. Первый двойной клик - смотрю в переменную, где я флажек ставлю, если его нет - устанавливаю и жду дальше, второй двойной клик - опять смотрю на переменную, а там уже флажок установлен (к примеру буква Т), вот тогда я начинаю работу с программой на Delphi написанной. Дальнейшее развитие событий распишу как только найду того, кто это сможет сделать.
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
Реклама
ООО «Арктика групп» ИНН: 7713634274
ООО "Русич" ИНН 9721068883 / ЕРИД 2VtzqvMjLF8
ООО «УНИСПЛИТ» ИНН: 6453155081 erid:2VtzqxXgvJi
Реклама: ООО «СибСтронг» | ИНН 6670013662 | ERID: 2VtzqwyM2dc
Реклама: ООО «СЛ-ЛАЗЕР» ИНН 7727447267 | erid: 2VtzquvhFWx
Последние сообщения Форума
|