|
||
| Правила | Регистрация | Пользователи | Сообщения за день | | Поиск | | Справка по форуму | Файлообменник | |
|
![]() |
Поиск в этой теме |
![]() |
#1 | |
Создание кнопки для динамического блока
Минск
Регистрация: 16.09.2006
Сообщений: 1,587
|
||
Просмотров: 14712
|
|
||||
инженер (КМ) Регистрация: 30.10.2004
Красноярск
Сообщений: 3,837
|
А действительно, как?
1. Через команду insert, но тогда как заметил Shoorup получается блок в блоке. Плюс невозможность при вставке задать параметры динамического блока. 2. Черз ToolPalettes. Есть возможность задать все параметры дин.блока. Нельзя дописать макросик к этой вставке. 3. Через DesignCenter. Можно вытащить любой блок из файла, даже если динамических блоков в нем несколько. Вставляет корректно (нет блока в блоке). Но параметры задать нельзя, только стандартные - масштаб, поворот. Как программно вставить динамический блок, с одновременной правкой его динамических параметров? Чтоб прога сначала выдала запрос указать какую-нибудь величину на экране, а уже потом вставляла блок с теми параметрами которые необходимы в данной ситуации? Сдаётся мне что можно сначала вставить, а потом подправить через entmod. Так вот как добраться до ентих параметров? entget выдаёт код блока, который непосредственно присутствует, причем имеет название типа "*U454", и никаких динамо параметров в в приметиве INSERT нет. Где они? |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,411
|
Все, что дальше - сугубо и трегубо ИМХО. В общем, проблема в том, что dxf-коды для многих новых фенечек просто не существуют, а добраться до значений параметров можно только через ActiveX-функции и vla-представления примитивов. И модифицировать уже через vla-put-*
1. По _insert - а разве там нельзя задавать "Explode"? 2. А какой такой макросик нужон? Потому как думаю там будет проще сделать отдельный лисп, который и будет вставлять дин.блок и выполнять над ним операции. Правда, такой метод не лишен своих минусов...
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
|||||
инженер (КМ) Регистрация: 30.10.2004
Красноярск
Сообщений: 3,837
|
Цитата:
Цитата:
Цитата:
Цитата:
|
||||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,411
|
Насколько я увидел, в динамических блоках (по крайней мере, идущих в поставке ADT2006) РД нет:
Код:
Думаю, что написать "универсальную" функцию будет практически нереально. Можно, конечно, сделать немного "в лоб": вставить дин.блок, и через (sssetfirst) "выделить" его. Более чем охотно допускаю, что я закошмариваю ситуацию, просто с дин.блоками особо не работал ![]()
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Регистрация: 21.10.2004
Сообщений: 112
|
Я Вставляю динамический блок которому после вставки можно изменить его параметры. А чтобы не получался блок в блоке то на кнопке добавляю explode. При желании можно после этого добавить purge
Вставка динамического блока Eugenius-ось ^C^C_Ortho;_On;_-Insert;Eugenius-ось;\;;;explode;last |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,411
|
Посмотри ПМ.
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,411
|
Личные сообщения. Посмотри, наверху есть строка (см. картинку). У меня сейчас сообщений нет - у тебя там написано нечто типа "Новых сообщений : 1". Клик на него, попадешь в личный ящик (ПМ = Private Message), а там уже не трудно разобраться
![]() [ATTACH]1158751480.jpg[/ATTACH]
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Спасибо всем за отзывы. Основной выход подсказал Eugenius за что ему огромное спс.
Моя загвоздка была в том что я не знал что расчленить можно последний вставленный блок ![]() Так как 2006 у меня RUS то и команды у меня рус ![]() привожу мою строку макроса: ^C^C-в DWGPPr_01;\;;;_explode;последний -очистить;все;;нет; в данном случае: -в - команда вставки блока в командной строке. DWGPPr_01 - название файла с динамическим блоком (PPr_01 - предохранитель). ну и командная строка с параметрами... все оказывается просто до безобразия. Есть еще один маленький вопрос по тебе Дблоков: Как организовать всю структуру файлов с блоками так чтобы это не выглядело хаосом. (т.е. все в одной папке - и иконки и файлы и CUI). Есть ли возможность добавлять собственные иконки в файл acadbtn.xmx (для тех кто не знает здесь хранится собрание всех иконок для кнопок автокада). И можно ли создать 1 файл со всеми имеющимися пользовательскими Дблоками и последующей вставкой через собственную кнопку из этого файла. Через DesignCenter долго будет производится поиск, поэтому мне кажется лучший выход это через кнопки с макросами ![]() ![]()
__________________
Поезд который устал от ржавого здравомыслия рельсов... |
||||
![]() |
|
||||
инженер (КМ) Регистрация: 30.10.2004
Красноярск
Сообщений: 3,837
|
Цитата:
Не знаю как в 2006-м, но у меня сейчас стоит 2007 и там через insert динамоблок из файла вообще никак не вставляется. Код:
|
|||
![]() |
|
||||
Регистрация: 21.10.2004
Сообщений: 112
|
Цитата:
У меня такое было когда ИМЯ блока и ИМЯ файла СОВПАДАЛИ Попробуй переназвать их так чтобы у динамического блока и у файла в котором этот блок находится были разные имена. ![]() |
|||
![]() |
|
||||
Вижу не многие сильны в этой теме по этому (времени много) расскажу как можно подробнее как я создаю кнопку для вставки дблока.
Задача: Создать кнопку для вставки предохранителя у которого можно изменить его расположение в стативе, его наминал (в Амперах), его длину выводов, контроль перегорания. 1)Создаем папку где будет все храниться. (я свою назвал ShSCB). Папка должна располагаться желательно там где проще будет до нее добраться. (я поместил в С:\ShSCB). Но тогда нужно ее прописать.(см.далее) . Или разместить все файлы там где Автокад будет искать их по умолчанию (это можно посмотреть в Сервис - Настройка… - Файлы – Путь доступа к вспомогательным файлам. Тут же и добавляем путь если надо кнопкой добавить) НО ТОГДА БУДЕТ ХАОС!!! 2) Создаем рисунок с дблоком. Еще раз: Имя блока и имя файла рисунка должны быть разные иначе будет выдаваться ошибка. (я тоже этой ошибки скушал )В мое случае называю файл dwgPred_01.dwg а блок в файле:Pred_01. 3)Потом создаю геометрию: 4) Потом делаю блок. И редактирую его в редакторе дблоков. Там добавляю все параметры и операции к блоку сохраняюсь и выхожу из ред.блоков. Потом нужно совместить точку вставки с ПСК. Т.к. акад вставляет блок по центру ПСК. 5) Потом делаем кнопку: я разместил все кнопки в своем частичном файле CUI и другим советую так делать мало ли… Открываем Адаптацию. (Сервис-Адаптация-Интерфейс) создаем свою CUI. (вкладка Перевести. Потом тыкам кнопку в левом верхнем углу Создать новый файл адаптации. Ну и там ежу понятно что делать) потом делаем панельку в своем файле адаптации. И создаем команду на вкладке адаптация. Пишем макрос в свойствах : ^C^C-в DWGPred_01;\;;;_explode;последний -очистить;все;;нет; , называем команду и т.д. указываем где иконка располагается (она должна быть там где и файл с рисунком) Тыкаем Ок и радуемся новой кнопкой : )))))))))))))))))) [ATTACH]1158910094.rar[/ATTACH]
__________________
Поезд который устал от ржавого здравомыслия рельсов... |
||||
![]() |
|
||||
Регистрация: 21.10.2004
Сообщений: 112
|
Цитата:
Насколько я помню, если использовать английские команды перед которыми стоит точка, то они будут работать как в русском так и в английском акаде. Таким образом можно добиться универсальности кода ![]() |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,411
|
Не точку, а "_" - тогда вызывается оригинальная команда. Но! Команду можно и переопределить лиспом. Вот чтобы вызывать снатдартную команду, и используется "."
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Глаза открывал новичкам
![]() А смесь команд по тому что многие англоязычные команды не хотят почемуто работать в моем каде. препробовал кучу вариантов. Еще раз повторяюсь мой кад RUS. причем полностью RUS- очень класно переведен в том числе и команды. а англояз не все ![]()
__________________
Поезд который устал от ржавого здравомыслия рельсов... |
||||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,411
|
Код:
Код:
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Необходимо доработать макрос на вставку динамического блока.
Бывает такая ситуация: ставлю свои панели на другой компьютер. Но иногда бывает что на другом компе отключены контекстные меню и динамический блок не работает полностью (т.е. параметр видимости и выбора не работают при нажатии на маркер). Как при вставке блока проверять переменную и если она отключена включать ее? Сделал так "^C^C(setvar "SHORTCUTMENU" 11);_-insert;ИМЯ_БЛОКА;\1;;;_.explode;_last;_.-purge;_all;;_n;" но надо сделать проверку если SHORTCUTMENU=0 то поставить например 11, а если другое значение то оставить его.
__________________
Поезд который устал от ржавого здравомыслия рельсов... Последний раз редактировалось Shoorup, 02.04.2008 в 11:54. |
||||
![]() |
|
||||
так никто и не ответил на предыдущий пост.
А нужно еще доработать вставку блока. Так как блоки постоянно доробатываются, нужно чтобы при вставке блока происходила проверка на "старость" блока и замена его вхождения на новый блок. А как Вы решаете такую задачу?
__________________
Поезд который устал от ржавого здравомыслия рельсов... |
||||
![]() |
|
||||
Конструктор (МК) Регистрация: 27.11.2007
Львів
Сообщений: 456
![]() |
Да... Задача дейсвительно нужная, часто сталкиваюсь с тем, что вставляю блок, а он вставляется по старому описанию, нужно его (блок) удалять (а если их, к примеру, 50 или больше...), выполнять _purge, и только после этого вставлять новый... Хорошую тему поднял shoorup, если, конечно, я ее правильно понял.
|
|||
![]() |
|
||||
Сообщений: n/a
|
Цитата:
Рyslan, все зависит от того, что вы хотите от этого блока... У вас там 5 ручек... Параметр выбора (look up) работает, масштабные - работают, а вот на растягивание - увы... И вообще, по-моему, у Вас слишком много ручек дублируют действия друг друга, после чего возникает неразбериха... Напишите, что Вы хотите от этого блока. |
|||
|
||||
Регистрация: 25.07.2007
Сообщений: 2,518
|
я хочу чтобы отводы создавались как они по госту. Отвод_50 (50 условный диаметр), реальные его размеры диаметр 57, расстояние между осями 75. Отвод_80 (89, 120) Отвод_100 (114,150) Отвод_150 (159,225). Масштабирование дает или например точный размер 89 или 120. а чтоб оба были такими как нужно не получается
Последний раз редактировалось Рyslan, 15.11.2008 в 14:14. |
|||
![]() |
|
||||
Регистрация: 29.10.2004
СПб
Сообщений: 16,379
|
dip, можно, ведь, и поиск по форуму провести "макрос создания слоя"
например, http://forum.dwg.ru/showthread.php?t=52266 |
|||
![]() |
|
||||
CAD Регистрация: 28.08.2003
Киев
Сообщений: 1,834
![]() |
Цитата:
Цитата:
Цитата:
__________________
По теории майский жук летать не может. Но он этого не знает. И летает... Последний раз редактировалось Alan, 31.01.2014 в 16:00. |
|||
![]() |
|
||||
Инженер дорожник Регистрация: 22.10.2007
Израиль
Сообщений: 1,859
|
Цитата:
Если слой существует он его активирует. Самособой нового второго не создаёт. |
|||
![]() |
|
||||
CAD Регистрация: 28.08.2003
Киев
Сообщений: 1,834
![]() |
Я забыл добавить. Слой DIM существовал и был Заморожен. Диалог с " _new" как раз для такого случая.
Слой НЕ будет активирован. Проверял по Автокад 2008 и 2013 Вот строка меню, чтобы РАЗМЕР ставился в слое, первые символы которого DIM, или в слой DIM [m1lib(RZA,Цепочка АВТОКАД)]^C^C(if (/= (strcase (Substr (getvar "CLAYER") 1 3) T) "dim")(nlayer "DIM" nil nil) nil)(nz_dimst "txt-autocad" nil)(setvar "DIMLFAC" (n_d03-1))(setvar "DIMTXT" (getvar "TEXTSIZE"))(graphscr) _dimlinear
__________________
По теории майский жук летать не может. Но он этого не знает. И летает... Последний раз редактировалось Alan, 31.01.2014 в 17:49. |
|||
![]() |
|
||||
Инженер дорожник Регистрация: 22.10.2007
Израиль
Сообщений: 1,859
|
Т.е. мне нужно добавить в макрос аналогичную строку на случай если слой заморожен?
|
|||
![]() |
|
||||
CAD Регистрация: 28.08.2003
Киев
Сообщений: 1,834
![]() |
Цитата:
![]() Строку приводил в качестве примера. Не использую чистый DISEL сочетаю с ЛИСП-текстами - больше возможности. В твоём случае надо проанализировать Заморожен слой или нет, т.е. всё равно нужен ЛИСП. ----- добавлено через ~10 мин. ----- Что же касается ЛИСП-конструкции (if (/= (strcase (Substr (getvar "CLAYER") 1 3) T) "dim")(nlayer "DIM" nil nil) nil) Я допускаю для размещения размеров слои, начинающиеся с DIM, например, DIM_перегородки, DIM_ростверки, DIM_сваи.... Макрос, опубликованный здесь на форуме, позволял переносить размеры на какой-то слой, например, РАЗМЕР. Но моим пользователям проектировщикам одного слоя мало, они сами определяют куда поставить размер. Но если текущий слой не "размерный", при вызове данной строки размер попадёт в DIM
__________________
По теории майский жук летать не может. Но он этого не знает. И летает... |
|||
![]() |
|
||||
Инженер дорожник Регистрация: 22.10.2007
Израиль
Сообщений: 1,859
|
Понял. Работаю с этими макросами давно. Но впрос заморожен слой или нет меня не доставал. Я в принципе в файлах не использую замороженные слоя. Чертёж на печать я формирую из ссылочных файлов и там я использую иногда замораживания слоёв в ссылках, для формирования разных чертежей. Но там я не черчу. А в файлах в которых черчу слои не замораживаю.
![]() |
|||
![]() |
|
||||
CAD Регистрация: 28.08.2003
Киев
Сообщений: 1,834
![]() |
Ну и ладушки... Я рассматриваю более общий случай, когда макрос или программка должны работать при ЛЮБЫХ условиях.
__________________
По теории майский жук летать не может. Но он этого не знает. И летает... |
|||
![]() |
|
||||
Инженер дорожник Регистрация: 22.10.2007
Израиль
Сообщений: 1,859
|
В принципе без проверки можно добавить функцию включить слой и разморозить если будет доставать при вставке болка. Часто что бы не заморачиваться пользуюсь функцией включить все слоя, и на всякий случай разморозить. Есть тут программы которые создают и выключают слоя. На пример как создание рамки с сеткой координит. Если сетку делаешь в модели то всё нормально, но если в листае, то сетка создаётся в листе и в моделе, только в моделе выключена, или заморожена, сейчас когда задумался, даже не вспомню. Просто включаю и размораживаю все слоя и сетку в моделе удаляю.
|
|||
![]() |
|
||||
проектировщик Регистрация: 25.05.2007
г. Чебоксары
Сообщений: 206
![]() |
Здравствуйте, уважаемые форумчане! У меня следующая проблема. Есть макрос: ^C^Ckonstr_armDP;esc;-очистить;все;;нет; Но он работает не правильно. Алгоритм следующий: 1)Работает программа (привязана к lisp); 2)прекращаю работу программы кнопкой esc; 3)очистка чертежа. Где ошибка, не знаю
|
|||
![]() |
|
||||
проектировщик Регистрация: 25.05.2007
г. Чебоксары
Сообщений: 206
![]() |
Команда: konstr_armDP
Подождите...Первая точка: *Прервано* ; ошибка: Функция отменена Команда: KONSTR_ARMDP Первая точка: -очистить Неверная точка. Первая точка: Вторая: Найдено полей: 12. Обновлено полей: 12. Первая точка: Вторая: Найдено полей: 12. Обновлено полей: 12. Первая точка: *Прервано* ; ошибка: Функция отменена |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,411
|
Ошибка в коде функции, я так полагаю.
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,411
|
Функция konstr-armdp из архивов КГБ? Или все же на ее код можно посмотреть?
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,411
|
Мест, где могут быть ошибки - полно.
getblk_or_load - раз DPavlov_CadComSrv.KonstrArmClass может быть не зарегистрирован корректно - два (а также три, четыре и пять) getscaledp - шесть ads_layer - семь insertblokdp - восемь Наличие глобальных переменных - девять _kpblc-block-dyn-change-values - десять (код мог быть изменен) change_attrib, change_layer - одиннадцать и двенадцать ![]()
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |