Что значит в автокаде повторное определение блока пропущено
Вобщем, вот в чём проблема!
Конструктор сидит делает свою работу. Чертит там своии перекрытия и фундаменты. Делает пару дней. Каждый день сохраняется, выключает комп, идет домой. В один прекрасный день он включает комп, загружает свой файл. Но в нём пропала большая часть чертежей. Вся работа насмарку. Исчезают они как-то хаотично. чуть чуть там, чуть чуть здесь. Вобщем большая часть чертежей просто исчезла. Такое уже в восьмой раз происходит. Работает в AutoCAD 2006. Сисадмин незнает в чём проблема. говорит это из-за автокада. Сталкивался ли кто-нибудь с подобной проблемой. Народ подскажите.
Немного в форуме полазил. чё-то не нашёл ничего похожего.
полтергейст?
Если работу сохраняет - то можно восстановить файл по *.bak копии
Нужно установить за этим конструктором наружное наблюдение. Какой-то он подозрительный.
:)
Если серьезно:
То есть после того, как открываете сохраненный файл, в пространстве модели не хватает сделанных ранее чертежей?
2Сидор Лютый: Именно так.
Не, с конструктором всё впорядке!:))) Ему самому не очень интересно 10 раз одну и ту же работу выполнять. Начальство волнуется уже.
Что самое интересное: *.bak так же выглядет. В автосохранении нихрена нету. Систему сносили,автокад переустанавливали. та же фигня!
Лично у меня предположения, что это из-за его СПДС-а. нового. Последний раз он ставил спдс, но вчера его удалил, сохранил файл. Сегодня пришёл и всё тю-тю.
Но я думаю, что работа с файлом-то велась ещё при установленном спдс-е. поэтому если там какая-нить ошибка, то она осталась. Ведь так. Почему я думаю на спдс, потому как раньше у него стояла более поздняя версия спдс-а и ничего не было. А щас новую поставил, и кажись с этого момента всё и началось. Я могу оказаться прав?
Сам я спдс себе ваще никакой не ставлю. нелюблю. я его.
Ни у кого в офисе такого не происходит. Хотя этот новый спдс стоит тоько у конструктора.
Даже были мысли, что это появился крысяк в конторе, ходит у удаляет. Но конструктор говорит, что смотрел перед открытием файла, его последнее сохранение. всё нормально. после него никто не залезал.
Думаете всё же что полтергейст? :))) тоже может быть. )))
Второй день пользуюсь ACAD 2009 и вдруг столкнулся с тем, что он как-то выборочно копирует блоки из одного чертежа в другой. Пол-часа пробовал разные варианты, закономерности не нашел. Если копировать несколько блоков и в наборе будет хотя бы один из тех, что не копируются - не копируются все блоки. Если блок взорвать и создать заново - вроде бы копируется.
Возможно, в этой версии ACAD-a у блоков появилось новое свойство (типа "защита от копирования")? Впрочем, возможно, такое свойство было и раньше, просто я не встречал его.
Если знаете, в чем тут дело - помогите, пожалуйста. Спасибо.
__________________ --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
2 kpblc: к сожалению, ничто из предложенного не помогло.
Придется возвращаться к 2007-му АКАДу, сейчас нет времени разбираться.
программист, рыцарь ObjectARX
. но ссылка на утилиту очистки от Прокси-объектов была дана дохлая, поэтому эту версию отработать не удалось.
Александр Ривилис: Спасибо, скачал. Пробую обработать этой утилитой, хотя в этом файле вроде бы прокси-объектов у меня нет (я думал, что СПДС-примочка после установки оставляет во всех файлах какие-то стили линий, масштабы и т.п., которые и удаляет эта утилита).
Хм. Пишет, что не может загрузить ARX-файл. Для 2009го АСАДА какой модуль нужно загружать, ExplodeProxy2010x32.arx?
__________________ --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
Александр Ривилис: Загрузилась утилита для 2007-го АКАДа.
Таки были какие-то прокси-объекты. Но какие.
Видимых прокси-объектов не было (обычно в Quick Select можно увидеть объекты типа Proxy). А какие могут быть невидимые прокси-объекты?
Короче, после удаления всех прокси из чертежа возможность копировать блоки появилась. Большое спасибо.
программист, рыцарь ObjectARX
Александр Ривилис: Загрузилась утилита для 2007-го АКАДа.
Таки были какие-то прокси-объекты. Но какие.
Видимых прокси-объектов не было (обычно в Quick Select можно увидеть объекты типа Proxy). А какие могут быть невидимые прокси-объекты?
Короче, после удаления всех прокси из чертежа возможность копировать блоки появилась. Большое спасибо.
Ну какие точно были я сказать не могу, но в двух словах есть прокси-примитивы ("видимые") и прокси-объекты (типа словарей, таблиц и т.д.), которые не имеют видимого представления. Так вот они не могут копироваться между чертежами, а если на них есть ссылка, то и то, что на них ссылается копироваться не может.
Ну какие точно были я сказать не могу, но в двух словах есть прокси-примитивы ("видимые") и прокси-объекты (типа словарей, таблиц и т.д.), которые не имеют видимого представления. Так вот они не могут копироваться между чертежами, а если на них есть ссылка, то и то, что на них ссылается копироваться не может.
Не могут копироваться, наверное, только в 2009м АКАДе. В 2007м я все прекрасно копировал и даже и не догадывался о существовании в чертеже каких-то прокси-объектов.
А можно сделать доп.функцию у этой ОЧЕНЬ ПОЛЕЗНОЙ ПРОГРАММКИ? Чтобы перед тем, как удалить все прокси-объекты, можно было получить удобоваримый список этих объектов.
Потому что меня лично беспокоит, что за объекты я там удаляю и не будут ли у меня потом противоположные проблемы, связанные с отсутствием этих самых объектов.
Наилучший выход из положения в случае с СПДС - разбивать объекты СПДС средствами самой СПДС. В случае с вертикальными решениями AutoCAD - делать импорт чертежа в AutoCAD средствами этих вертикальных решений.
программист, рыцарь ObjectARX
Не могут копироваться, наверное, только в 2009м АКАДе. В 2007м я все прекрасно копировал и даже и не догадывался о существовании в чертеже каких-то прокси-объектов.
А можно сделать доп.функцию у этой ОЧЕНЬ ПОЛЕЗНОЙ ПРОГРАММКИ? Чтобы перед тем, как удалить все прокси-объекты, можно было получить удобоваримый список этих объектов.
Потому что меня лично беспокоит, что за объекты я там удаляю и не будут ли у меня потом противоположные проблемы, связанные с отсутствием этих самых объектов.
Я делал когда-то, только информация там такая, что только опытный программист может понять что это такое. А если этих прокси-объектов тысячи или десятки тысяч (бывает достаточно часто), то все равно не уследишь.
Были. И в 2007-м, и даже в 2004-м мне встречались прокси-объекты. Если файл был создан в Mechanical, например, или в СПДС. Просто если соответствующий энейблер не установлен - при открытии файла предлагаются способы отображения этих прокси-объектов (как рамка или не отображать). Если энейблер установлен - при открытии файла ничего не выдается, но в чертеже можно пощупать эти объекты (если они видимые, конечно) и даже тупо взорвать их.
Я делал когда-то, только информация там такая, что только опытный программист может понять что это такое. А если этих прокси-объектов тысячи или десятки тысяч (бывает достаточно часто), то все равно не уследишь.
Ну, я это понимаю. Только если припрет - можно хоть будет разобраться (особенно если у объектов есть какой-нибудь признак типа (например, 1- таблица, 2 - стиль и т.п.)), а если не нужно - просто проигнорировать этот список. Ну, и выводить ведь его не обязательно на экран, а в файл листинга, и добавить вопросик во время отработки утилиты "Хотите сохранить список удаляемых объектов в файл?".
Ну ладно, это я уже вредничаю Нельзя, так нельзя. И так доволен, что хоть понял, в чем дело.
программист, рыцарь ObjectARX
Были. И в 2007-м, и даже в 2004-м мне встречались прокси-объекты. Если файл был создан в Mechanical, например, или в СПДС. Просто если соответствующий энейблер не установлен - при открытии файла предлагаются способы отображения этих прокси-объектов (как рамка или не отображать). Если энейблер установлен - при открытии файла ничего не выдается, но в чертеже можно пощупать эти объекты (если они видимые, конечно) и даже тупо взорвать их.
Ну, я это понимаю. Только если припрет - можно хоть будет разобраться (особенно если у объектов есть какой-нибудь признак типа (например, 1- таблица, 2 - стиль и т.п.)), а если не нужно - просто проигнорировать этот список. Ну, и выводить ведь его не обязательно на экран, а в файл листинга, и добавить вопросик во время отработки утилиты "Хотите сохранить список удаляемых объектов в файл?".
Ну ладно, это я уже вредничаю Нельзя, так нельзя. И так доволен, что хоть понял, в чем дело.
При наличии прокси-объектов копирование может быть успешным если нет ссылки на эти прокси-объекты. Если стоят все необъодимые энаблеры или сами приложения, то прокси-объектов нет. Признака что это за прокси-объект не существует. В лучшем случае имя родительского класса и его DXF группа 0.
Сегодня читал эту тему. Много думал. Потом поэкспериментировал, вот результаты:
1. Согласен, что при установленных энейблерах прокси-объектов нет. Потому что прокси-объект по определению объект-заместитель. Если стоят энейблеры - АКАД видит оригинальные объекты приложений.
2. Взял чертеж, в котором заведомо были объекты СПДС, открыл в 2009м АКАДе (энейблеры для него не были установлены) - вместо объектов СПДС отображаются прокси-объекты(квадратики). Выделил все, вместе с прокси, скопировал в буфер, открыл новый файл, вставил из буфера - копирование произошло успешно, но прокси-объекты не скопировались. Вывод: прокси-объекты не копируются, но копированию других объектов не мешают.
3. Загрузил модуль ExplodeProxy, команда EXPLODEALLPROXY ничего не взорвала (тут я удивился! Если прокси видны в чертеже, их нужно разорвать и оставить в чертеже как обычные объекты, а не удалить). Команда REMOVEALLPROXY аккуратно вычистила все прокси-объекты. Хотя в данном случае это было бесполезно, видимые объекты мне были нужны.
4. Взял чертеж, с которого началась эта тема, открыл в 2009м АКАДе. Некоторые (не все) блоки в чертеже не копируются. Причем они именно не копируются в буфер, потому что если после Ctrl-C жмем Ctrl-V, то вставляется то, что было помещено в буфер раньше! Видимых прокси нет. Команда EXPLODEALLPROXY ничего не взорвала, команда REMOVEALLPROXY аккуратно вычистила все прокси-объекты. После этого копирование всех объектов восстановилось. Но осадок остался - что это я там удалил-то?
5. Скачал [FONT=Verdana] Object Enabler для СПДС GraphiCS 5.0 под AutoCAD 2007-2009 [/FONT], установил. После этого ВСЕ проблемы исчезли: объекты СПДС в первом файле, естественно, видны, копируются, вставляются, взрываются обычной командой EXPLODE (они ж родные для СПДС). Во втором файле все по-прежнему, никакие новые объекты видны не стали, но копирование всех объектов через буфер восстановилось!
[FONT=Verdana]6. Чтобы совсем уж проверить все варианты, после установки энейблера вызвал команду EXPLODEALLPROXY - ничего не взорвалось ни в первом, ни во втором файлах. Команда REMOVEALLPROXY ничего не удалила ни в первом, ни во втором файле. Это еще раз подтверждает тезис, высказанный в посте 14: при установленном энейблере прокси-объектов в чертеже нет. Из этого вытекают:[/FONT]
[FONT=Verdana] Следствие 1: в моем исходном проблемном файле сидят какие-то приблуды именно от СПДС и проблемы с копированием были именно из-за них.[/FONT]
[FONT=Verdana] Следствие 2: поскольку я сам СПДС не пользуюсь, значит, эти приблуды могут мигрировать из чертежа в чертеж неявным образом (при копировании других объектов из чертежей, созданных с применением СПДС).[/FONT]
Блоки — отличный способ автоматизации проектных работ в AutoCAD. Часто при использовании блоков возникает необходимость переопределить уже используемые их вхождения — изменить геометрию, атрибуты, точку вставки и пр. Предлагаю сегодня рассмотреть возможные способы переопределения блоков в чертежах AutoCAD.
Расчленение блоков
В предыдущих лекциях мы уже рассказывали о переопределении блоков. Для того что бы расчленить блок используйте команду:
Расчленить (РАСЧ)
Способы ввода команды:
- Выполнить команду: Редактировать>Расчленить.
- Ввести в командной строке РАСЧ
Расчленение блока с вложенными блоками расчленяет только верхний, вложенные блоки расчленяются в последующем.
При расчленении блоков созданных в слое 0 или с графическими параметрами ПОБЛОКУ, графические свойства объектов: толщина, цвет и тип линий, приводятся к параметру по умолчанию – черный/белый цвет линий, сплошная линия и толщина линий по умолчанию.
При изменении масштаба блока по осям, объекты сохраняют свои формы и размеры при разрушении. Например в блоке была вставлена окружность при масштабе Х,Y-1,2 окружность отображается эллипсом, после применение команды РАСЧ исходный объект останется эллипсом.
Расчленить и создать блок заново
Процесс предельно прост:
Вставляем лишний блок, расчленяем его на отдельные примитивы
Изменяем по необходимости и создаем блок заново. При этом когда вы попытаетесь сохранить новый блок под тем же самым именем, система выдаст запрос на переопределение существующих вхождений блока
Согласившись, получим переопределенные блоки во всем чертеже
В этом способе важно то, что базовая точка блока и его изначальная ориентация должны остаться прежними, иначе привязка существующих блоков «слетит» и весь чертеж придет в негодность.
Вставить новый блок в файл
Обычно, одни и те же блоки используются в разных файлах. Очень легко переопределить блоки в одном из файлов, если в него вставить измененный блок из другого файла. При этом, конечно же, имя и точка вставки блоков должны совпадать.
При вставке система выдаст запрос на обновление существующих вхождений блока.
Редактор блоков
Способ ввода команды:
После вызова команды будет открыто окно Редактирование определения блока, содержащие список блоков включенных в чертеж. Для редактирования выберите необходимый блок и нажмите ОК, после чего откроется Редактор блоков. Более подробно о редакторе блоков мы расскажем в следующем уроке.
Редактирование блоков
Существует несколько способов внесения изменений в блок, не разрушая его.
Редактор блоков
Пожалуй, самый простой способ. Чтобы переопределить блок, достаточно открыть его в редакторе блоков
Изменить его в соответствии с задачей и закрыть редактор.
Все вхождения блоков обновятся автоматически во всем файле.
Преимущество этого способа в том, что не нужно думать о точках вставки, ориентации и прочих параметрах блоков, которые выставляются редактором блоков в соответствии с существующими. Но будьте внимательны — в редакторе блоков за точку вставки принимается точка с координатами 0,0! Не переносите геометрию, иначе точка вставки «слетит».
Работа со слоями
При вставке блока в чертёж он определяется в текущий слой, после чего его можно переопределить в соответствующий слой (статья о работе со слоями в AutoCAD). Параметры слоя в котором находится блок стандартны и представляют собой цвет линий, тип линий и их толщину. Ниже приведена таблица методов применения слоев при вставке блока с описанием результатов, хотя некоторые различия таковых незначительны.
Свойства компонентов блока и вставка объектов результаты
Графические параметры компонентов
Как видно из таблицы, тщательный подбор свойств слоя, который используется при создании блока имеет важное значение. Два метода установки параметров объектов ПОБЛОКУ и их создание на 0 слое, создает блок-хамелеон, который принимает свойства слоя в котором он вставляется. Использование двух других методов, сохраняет свойства блока не зависимо от того в какой он слой вставляется.
Расчленить и создать блок заново
Процесс предельно прост:
Вставляем лишний блок, расчленяем его на отдельные примитивы
Изменяем по необходимости и создаем блок заново. При этом когда вы попытаетесь сохранить новый блок под тем же самым именем, система выдаст запрос на переопределение существующих вхождений блока
Согласившись, получим переопределенные блоки во всем чертеже
В этом способе важно то, что базовая точка блока и его изначальная ориентация должны остаться прежними, иначе привязка существующих блоков «слетит» и весь чертеж придет в негодность.
Редактирование по-месту
Команда ССЫЛРЕД (_REFEDIT) позволяет редактировать блоки и внешние ссылки по-месту. Преимущество этого способа в том, что при запуске этого способа редактирования остальная часть чертежа, не относящаяся к блоку, затемняется и остается доступной для привязок, т.е. мы имеем возможность редактировать блок в контексте окружающей его геометрии.
Для редактирования по месту можно ввести команду ССЫЛРЕД и выбрать блок или выбрать блок и в контекстном меню выбрать Контекстное редактирование блока
Как видим, окружение блока затемнилось, но доступно для привязки
После создания нужной геометрии необходимо нажать кнопку Сохранить изменения на ленте
Все вхождения блоков переопределятся, о чем AutoCAD сообщит в командной строке
Наличие нескольких способов решить одну и ту же задачу позволяет каждому пользователю AutoCAD выбрать наиболее подходящий для себя вариант.
Большие библиотеки содержащие блоки, должны быть хорошо структурированы и легко управляемы для того что бы быстро находить в них нужные блоки. Кроме того стоит обратить внимание на слои которые используются, при определении блоков, для того что бы получить желаемый результат при их вставке в чертеж.
Обновление блоков
Как уже было рассказано в предыдущих уроках при изменении блока, все его копии автоматически обновляются. Но если вы вставили файл в чертеж, что бы использовать в качестве блока, а затем изменили этот файл, в текущим чертеже он не обновится. Для того что бы файл автоматически изменялся необходимо использовать внешние ссылки, о которых мы расскажем в следующей главе.
Для обновления блоков вручную, которые были вставлены из файла, необходимо повторно вставить соответствующий файл.
На этом урок по изучению принципов управления блоками завершен. В следующем уроке будет рассмотрен вопрос создания и управления динамическими блоками.
Добрый день!
Очень нужна помощь.
Есть блоки в чертеже А и в чертеже В с одними и теми же названиями. как вставить блок из чертежа А в четреж В с переопределением или просто переопределить его в четреже В.
Заранее спасибо!
вы имеете ввиду, чтобы в чертеже В блок был такой-же как в чертеже А? Тогда только так - в чертеже удалить все блоки и удалить описание блока, а затем вставить новый блок из чертежа А. Короче - никак :)
Спасибо за внимание!
Я имею ввиду сделать то что ручками делается через "Центр проектирования" в AutoCAD, путем выбора блока из другого открытого чертежа или по ссылке на чертеж, выделив блок в списке блоков затем вызвав контекстное меню выбрав один из пунктов "Вставить с переопределением" или "Переопределить". Вот все тоже самое только на языке VBA
Если нет апи метода для этого (я тоже не нашел), тогда можно врукопашную это сделать. Например, переименовать старый блок, вставить новый во все вхождения старого (учесть масштаб, угол, атрибуты), потом удалить все вхождения старого блока и удалить его.
Дело в том, что имя блока должно остатся прежним т.к. оно подвязано к БД.
Имя блока и останется прежним. Поменяется ID и Handle.
Как он к базе привязан? Если только по имени, то без проблем.
А может быть проще все объекты в блоке копировать. Тогда точно не поменяется ни имя, ни ID, ни Handle.
Если нет апи метода для этого (я тоже не нашел), тогда можно врукопашную это сделать. Например, переименовать старый блок, вставить новый во все вхождения старого (учесть масштаб, угол, атрибуты), потом удалить все вхождения старого блока и удалить его.
спасибо! это интересная идея .
Мне кажется, что скопировать объекты из блока в блок, проще будет.
Т.е.
1. Удалить все объекты из блока в чертеже В.
2. Записать все объекты из блока в чертеже А в массив.
3. Скопировать объекты в блок в чертеже В. Код примерно такой:
где, blockB это AcadBlock в чертеже B.
Добавлено.
Вот, только, с атрибутами может косяк получится, и с дин. параметрами.
Если они есть, то нужно думать дальше.
И наверно искать функцию переопределения блока в ObjectARX.
Спасибо за совет.
Вот я дурень то, все же проще.
Нужно вставить чертеж А, как блок, потом его удалить. При этом все блоки, которые определены в чертеже А появятся в чертеже В, причем с переопределением.
Сто мельёнов раз об этом уже говорили, и я сам так делаю, как же я мог забыть. Посыпаю голову пеплом. :oops:
У меня сделано кое-что по этой теме. Посмотрите, что Вам подойдет
Загрузка блока из одного файла в другой
Пользователь определяет файл-донор и блок
см. макрос "C:\ACADadd\ACADmacros\LoadBlock D21\LoadBlock.dvb"
Программист определяет файл-донор и блок
Sub loadBlock4(fileName$, blockName$)
'Разработал В.Г. Тимаков 26.08.2008
'Цель: Загрузка блока в активный файл из другого файла
'Дано:
'fileName$ - имя файла, содержащего требуемый блок
'blockName$ - имя требуемого блока
'Результат: Требуемый блок загружен в активный файл
'Пример:
'Sub t()
' Dim fileName$, blockName$
' fileName = "C:\ACADadd\LibraryRail\Стандарты ЛЖДП.dwg"
' blockName = "боковой штамп"
' Call loadBlock4(fileName$, blockName$)
'End Sub
Вставка блока программно (InsertBlock3)
Примечание:
К блокам NUS (non-uniform scaled — не одинаковый
по масштабу) нельзя применить метод Explode
Где-то видел в справке
Я обычно использую для аналогичных целей процедуру типа такой:
Private Sub Perenos_opisaniy_Bl(strDwgFileFullPath)
Dim I_Point(0 To 2) As Double
Dim Block_R As AcadExternalReference
I_Point(0) = 0: I_Point(1) = 0: I_Point(2) = 0
If Dir(strDwgFileFullPath) = "" Then Exit Sub
If ThisDrawing.FullName <> strDwgFileFullPath Then
Set Block_R = ThisDrawing.ModelSpace.AttachExternalReference(strDwgFileFullPath, "Name_", I_Point, 1, 1, 1, 0, False)
ThisDrawing.Blocks.Item(Block_R.Name).Bind True
Block_P.Delete
ThisDrawing.Blocks.Item("Name_").Delete
End If
End Sub
Вроде работает и в только созданных чертежах. Только имя "Name_" должно быть таким, что бы блоков с ним не попадалось в базе данных чертежей (или предварительно надо организовать проверку)
> Vildar
« Тока Bind непойму что такое. Превращает Xref в блок? »
Типа того. Внедряет в.с. в чертеж. В противном случае в чертеже будут присутствовать слои, размерные и т.д. стили внешних ссылок (с именами типа "Name_|0"). Если же ссылку внедрить (причем именно ". Bind True", что соответствует внедрению в.с. способом вставки стандартными средствами), то префиксы все "отпадут". Конечно, слои,стили вставляемого чертежа перенесутся в чертеж текущий, но если в нем только блоки (с примитивами на "0" слое), а все лишнее вычищено, то ничего страшного.
Слов нет.
Thank you very much!
Вставка блока с атрибутами, пропустить ввод атрибутов
СПАСИБО БОЛЬШОЕ.
ATTREQ и ATTDIA то что нужно
Имя блока = имени файла
Узнал из Интернета.
Dim insPnt(0 To 2) As Double
insPnt(0) = 0
insPnt(1) = 0
insPnt(2) = 0
Вот так не работает: Call ThisDrawing.ModelSpace.InsertBlock(insPnt, "D:\test.dwg", 1, 1, 1, 0) после purge
А вот так работает: Dim mStr As String
mStr = "D:\test.dwg"
Call ThisDrawing.ModelSpace.InsertBlock(insPnt, mStr, 1, 1, 1, 0)
При вставки блока в чертеж:
Код
Dim insPnt(0 To 2) As Double
insPnt(0) = 0
insPnt(1) = 0
insPnt(2) = 0
Call ThisDrawing.ModelSpace.InsertBlock(insPnt, "D:\test.dwg", 1, 1, 1, 0)
Call ThisDrawing.ModelSpace.InsertBlock(insPnt, mStr, 1, 1, 1, 0)
Run-time error '-2145386445 (80200033)'
Ошибка файлера
(В англ. автокаде - Filer error)
Причем в новом файле этот код успешно выполняется (хоть несколько раз). Но если выполнить _purge - после этого этот Filer error и появляется
Содержимое test.dwg - несколько простых примитивов (пробовал различные файлы вместо test.dwg)
(Используется AutoCAD 2010)
Изменено: vlalexey - 09-11-2010 10:10:10
Читайте также: