Создание пользовательских кнопок в AutoCAD 2006
| Правила | Регистрация | Пользователи | Сообщения за день |  Справка по форуму | Файлообменник |

Вернуться   Форум DWG.RU > Программное обеспечение > AutoCAD > Создание пользовательских кнопок в AutoCAD 2006

Создание пользовательских кнопок в AutoCAD 2006

Ответ
Поиск в этой теме
Непрочитано 16.09.2006, 11:35 #1
Создание кнопки для динамического блока
Shoorup
 
Минск
Регистрация: 16.09.2006
Сообщений: 1,587

Здрасте уважаемые специалисты в области AutoCAD.
:!: Вопрос следующего характера: AutoCAD2006 подарил кучу новых возможностей в том числе и динамические блоки. Проблема состоит в том что-КАК СОЗДАТЬ КНОПКУ ДЛЯ ВСТАВКИ ДИНАМИЧЕСКОГО блока. Конечно желательно чтобы команда писалась на макросе а не на лиспе (в виду не знания последнего). Кнопку удается создать для вставки блока, но блок вставляется в блоке т.е. его приходится еще и взрывать. И можно ли как небудь организовать более прилично папку с файлами блоков и иконок к ним. [/b]
__________________
Поезд который устал от ржавого здравомыслия рельсов...

Последний раз редактировалось Shoorup, 02.04.2008 в 11:04.
Просмотров: 14712
 
Непрочитано 18.09.2006, 20:07
#2
Dym


 
Регистрация: 27.09.2005
Двинскъ
Сообщений: 586
Отправить сообщение для Dym с помощью Skype™


tool palettes - ploh?
Dym вне форума  
 
Непрочитано 20.09.2006, 08:15
#3
Krieger

инженер (КМ)
 
Регистрация: 30.10.2004
Красноярск
Сообщений: 3,837


А действительно, как?
1. Через команду insert, но тогда как заметил Shoorup получается блок в блоке. Плюс невозможность при вставке задать параметры динамического блока.
2. Черз ToolPalettes. Есть возможность задать все параметры дин.блока. Нельзя дописать макросик к этой вставке.
3. Через DesignCenter. Можно вытащить любой блок из файла, даже если динамических блоков в нем несколько. Вставляет корректно (нет блока в блоке). Но параметры задать нельзя, только стандартные - масштаб, поворот.
Как программно вставить динамический блок, с одновременной правкой его динамических параметров? Чтоб прога сначала выдала запрос указать какую-нибудь величину на экране, а уже потом вставляла блок с теми параметрами которые необходимы в данной ситуации? Сдаётся мне что можно сначала вставить, а потом подправить через entmod. Так вот как добраться до ентих параметров? entget выдаёт код блока, который непосредственно присутствует, причем имеет название типа "*U454", и никаких динамо параметров в в приметиве INSERT нет. Где они?
Krieger вне форума  
 
Непрочитано 20.09.2006, 08:39
#4
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,411


Все, что дальше - сугубо и трегубо ИМХО. В общем, проблема в том, что dxf-коды для многих новых фенечек просто не существуют, а добраться до значений параметров можно только через ActiveX-функции и vla-представления примитивов. И модифицировать уже через vla-put-*
1. По _insert - а разве там нельзя задавать "Explode"?
2. А какой такой макросик нужон? Потому как думаю там будет проще сделать отдельный лисп, который и будет вставлять дин.блок и выполнять над ним операции. Правда, такой метод не лишен своих минусов...
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 20.09.2006, 09:00
#5
Krieger

инженер (КМ)
 
Регистрация: 30.10.2004
Красноярск
Сообщений: 3,837


Цитата:
Сообщение от kpblc
что dxf-коды для многих новых фенечек просто не существуют, а добраться до значений параметров можно только через ActiveX-функции и vla-представления примитивов.
Если только расширенные данные не считать dxf-кодом (помоему фенечки там сидят).
Цитата:
1. По _insert - а разве там нельзя задавать "Explode"?
Конечно можно, но я это отметил как отличие от дизайнцентра. Во всяком случае это не проблема.
Цитата:
А какой такой макросик нужон? Потому как думаю там будет проще сделать отдельный лисп, который и будет вставлять дин.блок и выполнять над ним операции. Правда, такой метод не лишен своих минусов...
Цитата:
Сообщение от Krieger
Чтоб прога сначала выдала запрос указать какую-нибудь величину на экране, а уже потом вставляла блок с теми параметрами которые необходимы в данной ситуации?
Короче, нужна прога по вставке динамического блока из файла. При вставке должны быть выведены запросы по доступным для этого блока динамопараметрам, или же как-то оформить их в аргументы функции.
Krieger вне форума  
 
Непрочитано 20.09.2006, 09:16
#6
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,411


Насколько я увидел, в динамических блоках (по крайней мере, идущих в поставке ADT2006) РД нет:
Код:
[Выделить все]
((-1 . <Имя объекта: 7ef81438>) (0 . "INSERT") (5 . "16F") (102 . "{ACAD_XDICTIONARY") (360 . <Имя объекта: 7ef81440>) (102 . "}") (330 . <Имя объекта: 7ef6ecf8>) (100 . "AcDbEntity") (67 . 0) (410 . "Model") (8 . "0") (100 . "AcDbBlockReference") (2 . "*U6") (10 165.632 135.204 0.0) (41 . 0.0393701) (42 . 0.0393701) (43 . 0.0393701) (50 . 0.0) (70 . 0) (71 . 0) (44 . 0.0) (45 . 0.0) (210 0.0 0.0 1.0))
То есть надо работать со словарями, что тоже не гуд.
Думаю, что написать "универсальную" функцию будет практически нереально. Можно, конечно, сделать немного "в лоб": вставить дин.блок, и через (sssetfirst) "выделить" его.
Более чем охотно допускаю, что я закошмариваю ситуацию, просто с дин.блоками особо не работал
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 20.09.2006, 09:58
#7
Eugenius


 
Регистрация: 21.10.2004
Сообщений: 112


Я Вставляю динамический блок которому после вставки можно изменить его параметры. А чтобы не получался блок в блоке то на кнопке добавляю explode. При желании можно после этого добавить purge

Вставка динамического блока Eugenius-ось

^C^C_Ortho;_On;_-Insert;Eugenius-ось;\;;;explode;last
Eugenius вне форума  
 
Непрочитано 20.09.2006, 15:00
#8
Miracle


 
Регистрация: 02.03.2006
Moscow
Сообщений: 115


подскажите, пож, как навесить на кнопки нужные мне команды??
ссылочку бы... а то не ищется!! :roll:
Miracle вне форума  
 
Непрочитано 20.09.2006, 15:04
#9
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,411


Посмотри ПМ.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 20.09.2006, 15:14
#10
Miracle


 
Регистрация: 02.03.2006
Moscow
Сообщений: 115


извини, а "ПМ" - это что??
Miracle вне форума  
 
Непрочитано 20.09.2006, 15:23
#11
Admin
Administrator


 
Регистрация: 21.08.2003
Сообщений: 4,463


Цитата:
Сообщение от Miracle
извини, а "ПМ" - это что??
это "приват мэссэдж" вроде как личная почта по нашему.
Нажми на ссылку в верхнем меню между
|| Профиль || и || Выход
Admin вне форума  
 
Непрочитано 20.09.2006, 15:24
#12
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,411


Личные сообщения. Посмотри, наверху есть строка (см. картинку). У меня сейчас сообщений нет - у тебя там написано нечто типа "Новых сообщений : 1". Клик на него, попадешь в личный ящик (ПМ = Private Message), а там уже не трудно разобраться
[ATTACH]1158751480.jpg[/ATTACH]
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 21.09.2006, 11:11
#13
Shoorup


 
Регистрация: 16.09.2006
Минск
Сообщений: 1,587
<phrase 1= Отправить сообщение для Shoorup с помощью Skype™


Спасибо всем за отзывы. Основной выход подсказал Eugenius за что ему огромное спс.
Моя загвоздка была в том что я не знал что расчленить можно последний вставленный блок
Так как 2006 у меня RUS то и команды у меня рус
привожу мою строку макроса: ^C^C-в DWGPPr_01;\;;;_explode;последний -очистить;все;;нет;
в данном случае: -в - команда вставки блока в командной строке. DWGPPr_01 - название файла с динамическим блоком (PPr_01 - предохранитель). ну и командная строка с параметрами...
все оказывается просто до безобразия.
Есть еще один маленький вопрос по тебе Дблоков:
Как организовать всю структуру файлов с блоками так чтобы это не выглядело хаосом. (т.е. все в одной папке - и иконки и файлы и CUI).
Есть ли возможность добавлять собственные иконки в файл acadbtn.xmx (для тех кто не знает здесь хранится собрание всех иконок для кнопок автокада).
И можно ли создать 1 файл со всеми имеющимися пользовательскими Дблоками и последующей вставкой через собственную кнопку из этого файла.
Через DesignCenter долго будет производится поиск, поэтому мне кажется лучший выход это через кнопки с макросами ? Во всяком случае в моем случае.
__________________
Поезд который устал от ржавого здравомыслия рельсов...
Shoorup вне форума  
 
Непрочитано 22.09.2006, 02:08
#14
Dym


 
Регистрация: 27.09.2005
Двинскъ
Сообщений: 586
Отправить сообщение для Dym с помощью Skype™


слегка не въехал, а что изначально означало
Цитата:
получается блок в блоке
? просил бы простить за не понятливость в случае данном
Dym вне форума  
 
Непрочитано 22.09.2006, 07:18
#15
Krieger

инженер (КМ)
 
Регистрация: 30.10.2004
Красноярск
Сообщений: 3,837


Цитата:
Сообщение от mitjaj
слегка не въехал, а что изначально означало
Цитата:
получается блок в блоке
? просил бы простить за не понятливость в случае данном
По команде insert можно вставлять содержимое файла блоком, при этом базовая точка будет ноходиться в начале координат. Таким образом делают библиотеку стандартных элементов, узлов и т. д. по одному в каждом файле, причем в самом этом файле блока нет. С динамическими блоками получается, что все-таки надо изначально создавать блок и когда этот чертеж вставляется блоком, получается что в обычном блоке сидит динамический. Фу, надеюсь понятно сказал.
Не знаю как в 2006-м, но у меня сейчас стоит 2007 и там через insert динамоблок из файла вообще никак не вставляется.
Код:
[Выделить все]
Command: -insert
Enter block name or [?] <PSK_Aperture_03>: PSK_Usel
Block PSK_Usel references itself
; error: no function definition: CMD-FAIL
*Invalid*
Вставить можно только если помимо него в файле есть еще какой нибудь примитив, а это мусор. И как тогда быть?
Krieger вне форума  
 
Непрочитано 22.09.2006, 09:43
#16
Eugenius


 
Регистрация: 21.10.2004
Сообщений: 112


Цитата:
Сообщение от Krieger
Block PSK_Usel references itself
Асад говорит что блок ссылается сам на себя.
У меня такое было когда ИМЯ блока и ИМЯ файла СОВПАДАЛИ
Попробуй переназвать их так чтобы у динамического блока и у файла в котором этот блок находится были разные имена.
Eugenius вне форума  
 
Непрочитано 22.09.2006, 10:52
#17
Krieger

инженер (КМ)
 
Регистрация: 30.10.2004
Красноярск
Сообщений: 3,837


Eugenius
Понял.
Сделал так:
Код:
[Выделить все]
(if (tblobjname "block" "PSK_MultiBolt")(command "_-insert" "PSK_MultiBolt" pause 1 1 pause)(princ (command "_-insert" "PSK_D_MultiBolt")(command)(command "_-purge" "_Blocks" "PSK_D_MultiBolt" "_No")(command "_-insert" "PSK_MultiBolt" pause 1 1 pause)))
Krieger вне форума  
 
Автор темы   Непрочитано 22.09.2006, 11:28
#18
Shoorup


 
Регистрация: 16.09.2006
Минск
Сообщений: 1,587
<phrase 1= Отправить сообщение для Shoorup с помощью Skype™


Вижу не многие сильны в этой теме по этому (времени много) расскажу как можно подробнее как я создаю кнопку для вставки дблока.
Задача: Создать кнопку для вставки предохранителя у которого можно изменить его расположение в стативе, его наминал (в Амперах), его длину выводов, контроль перегорания.
1)Создаем папку где будет все храниться. (я свою назвал ShSCB). Папка должна располагаться желательно там где проще будет до нее добраться. (я поместил в С:\ShSCB). Но тогда нужно ее прописать.(см.далее) . Или разместить все файлы там где Автокад будет искать их по умолчанию (это можно посмотреть в Сервис - Настройка… - Файлы – Путь доступа к вспомогательным файлам. Тут же и добавляем путь если надо кнопкой добавить) НО ТОГДА БУДЕТ ХАОС!!!
2) Создаем рисунок с дблоком. Еще раз: Имя блока и имя файла рисунка должны быть разные иначе будет выдаваться ошибка. (я тоже этой ошибки скушал )В мое случае называю файл dwgPred_01.dwg а блок в файле:Pred_01.
3)Потом создаю геометрию:
4) Потом делаю блок. И редактирую его в редакторе дблоков. Там добавляю все параметры и операции к блоку сохраняюсь и выхожу из ред.блоков. Потом нужно совместить точку вставки с ПСК. Т.к. акад вставляет блок по центру ПСК.
5) Потом делаем кнопку: я разместил все кнопки в своем частичном файле CUI и другим советую так делать мало ли… Открываем Адаптацию. (Сервис-Адаптация-Интерфейс) создаем свою CUI. (вкладка Перевести. Потом тыкам кнопку в левом верхнем углу Создать новый файл адаптации. Ну и там ежу понятно что делать) потом делаем панельку в своем файле адаптации. И создаем команду на вкладке адаптация. Пишем макрос в свойствах :

^C^C-в DWGPred_01;\;;;_explode;последний -очистить;все;;нет;

, называем команду и т.д. указываем где иконка располагается (она должна быть там где и файл с рисунком) Тыкаем Ок и радуемся новой кнопкой : ))))))))))))))))))
[ATTACH]1158910094.rar[/ATTACH]
__________________
Поезд который устал от ржавого здравомыслия рельсов...
Shoorup вне форума  
 
Непрочитано 22.09.2006, 12:43
#19
_Andre_

механизатор
 
Регистрация: 28.12.2004
Самара
Сообщений: 312
<phrase 1=


"Shoorup"
Вы раскрыли нам глаза

Особенно радует код:

Код:
[Выделить все]
^C^C-в DWGPred_01;\;;;_explode;последний -очистить;все;;нет;
со смесью русских и английских имен команд и опций
_Andre_ вне форума  
 
Непрочитано 22.09.2006, 13:16
#20
Eugenius


 
Регистрация: 21.10.2004
Сообщений: 112


Цитата:
Сообщение от _Andre_
"Shoorup"
Вы раскрыли нам глаза

Особенно радует код:

Код:
[Выделить все]
^C^C-в DWGPred_01;\;;;_explode;последний -очистить;все;;нет;
со смесью русских и английских имен команд и опций

Насколько я помню, если использовать английские команды перед которыми стоит точка, то они будут работать как в русском так и в английском акаде. Таким образом можно добиться универсальности кода
Eugenius вне форума  
 
Непрочитано 22.09.2006, 13:22
#21
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,411


Не точку, а "_" - тогда вызывается оригинальная команда. Но! Команду можно и переопределить лиспом. Вот чтобы вызывать снатдартную команду, и используется "."
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 22.09.2006, 15:03
#22
Shoorup


 
Регистрация: 16.09.2006
Минск
Сообщений: 1,587
<phrase 1= Отправить сообщение для Shoorup с помощью Skype™


Глаза открывал новичкам
А смесь команд по тому что многие англоязычные команды не хотят почемуто работать в моем каде. препробовал кучу вариантов. Еще раз повторяюсь мой кад RUS. причем полностью RUS- очень класно переведен в том числе и команды. а англояз не все
__________________
Поезд который устал от ржавого здравомыслия рельсов...
Shoorup вне форума  
 
Непрочитано 22.09.2006, 15:09
#23
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,411


Код:
[Выделить все]
^C^C-в DWGPred_01;\;;;_explode;последний -очистить;все;;нет;
попробуй так:
Код:
[Выделить все]
^C^C_-insert;DWGPred_01;1;;;_.explode;_last;_.-purge;_all;;_n;
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 02.04.2008, 11:02
#24
Shoorup


 
Регистрация: 16.09.2006
Минск
Сообщений: 1,587
<phrase 1= Отправить сообщение для Shoorup с помощью Skype™


Необходимо доработать макрос на вставку динамического блока.

Бывает такая ситуация: ставлю свои панели на другой компьютер. Но иногда бывает что на другом компе отключены контекстные меню и динамический блок не работает полностью (т.е. параметр видимости и выбора не работают при нажатии на маркер). Как при вставке блока проверять переменную и если она отключена включать ее?
Сделал так "^C^C(setvar "SHORTCUTMENU" 11);_-insert;ИМЯ_БЛОКА;\1;;;_.explode;_last;_.-purge;_all;;_n;"
но надо сделать проверку если SHORTCUTMENU=0 то поставить например 11, а если другое значение то оставить его.
__________________
Поезд который устал от ржавого здравомыслия рельсов...

Последний раз редактировалось Shoorup, 02.04.2008 в 11:54.
Shoorup вне форума  
 
Автор темы   Непрочитано 14.11.2008, 15:16
#25
Shoorup


 
Регистрация: 16.09.2006
Минск
Сообщений: 1,587
<phrase 1= Отправить сообщение для Shoorup с помощью Skype™


так никто и не ответил на предыдущий пост.
А нужно еще доработать вставку блока.
Так как блоки постоянно доробатываются, нужно чтобы при вставке блока происходила проверка на "старость" блока и замена его вхождения на новый блок.

А как Вы решаете такую задачу?
__________________
Поезд который устал от ржавого здравомыслия рельсов...
Shoorup вне форума  
 
Непрочитано 14.11.2008, 15:56
#26
beholder

Конструктор (МК)
 
Регистрация: 27.11.2007
Львів
Сообщений: 456
<phrase 1=


Да... Задача дейсвительно нужная, часто сталкиваюсь с тем, что вставляю блок, а он вставляется по старому описанию, нужно его (блок) удалять (а если их, к примеру, 50 или больше...), выполнять _purge, и только после этого вставлять новый... Хорошую тему поднял shoorup, если, конечно, я ее правильно понял.
beholder вне форума  
 
Автор темы   Непрочитано 14.11.2008, 17:29
#27
Shoorup


 
Регистрация: 16.09.2006
Минск
Сообщений: 1,587
<phrase 1= Отправить сообщение для Shoorup с помощью Skype™


beholder, все правильно понял...
__________________
Поезд который устал от ржавого здравомыслия рельсов...
Shoorup вне форума  
 
Непрочитано 14.11.2008, 17:37
#28
Рyslan


 
Регистрация: 25.07.2007
Сообщений: 2,518


Кто в динблоках разбирается, посмотрите мое первое творение. Правильно ли сделан? почему то размеры через lookup неправильно растягиваются
Вложения
Тип файла: dwg
DWG 2004
Динблок.dwg (102.2 Кб, 1128 просмотров)
Рyslan вне форума  
 
Непрочитано 14.11.2008, 18:42
#29
AlphaGeo


 
Сообщений: n/a


Цитата:
Сообщение от Рyslan Посмотреть сообщение
Кто в динблоках разбирается, посмотрите мое первое творение. Правильно ли сделан? почему то размеры через lookup неправильно растягиваются
Offtop: Рyslan, я бы все-таки вывесил пост с блоком в эту тему... Впрочем, теперь не будет отвлекаться от дела...

Рyslan, все зависит от того, что вы хотите от этого блока... У вас там 5 ручек... Параметр выбора (look up) работает, масштабные - работают, а вот на растягивание - увы...
И вообще, по-моему, у Вас слишком много ручек дублируют действия друг друга, после чего возникает неразбериха...
Напишите, что Вы хотите от этого блока.
 
 
Непрочитано 14.11.2008, 19:04
#30
Рyslan


 
Регистрация: 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.
Рyslan вне форума  
 
Непрочитано 15.11.2008, 14:13
#31
Рyslan


 
Регистрация: 25.07.2007
Сообщений: 2,518


ну вот почему не получается, не пойму, помогите разобраться
Вложения
Тип файла: dwg
DWG 2004
Динблок1.dwg (46.3 Кб, 1127 просмотров)
Рyslan вне форума  
 
Непрочитано 15.11.2008, 18:35
#32
AlphaGeo


 
Сообщений: n/a


Рyslan, ответы на Ваши вопросы находятся в этом и этом постах.

Последний раз редактировалось AlphaGeo, 15.11.2008 в 19:54.
 
 
Непрочитано 31.01.2014, 08:24
#33
dip

проектировщик
 
Регистрация: 25.05.2007
г. Чебоксары
Сообщений: 206
<phrase 1=


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
Код:
[Выделить все]
^C^C-в DWGPred_01;\;;;_explode;последний -очистить;все;;нет;
попробуй так:
Код:
[Выделить все]
^C^C_-insert;DWGPred_01;1;;;_.explode;_last;_.-purge;_all;;_n;
Скажите, пожалуйста, как сделать так чтобы этот блок вставлялся в определенном слое? Т.е. как прописать название слоя в этот код?
dip вне форума  
 
Непрочитано 31.01.2014, 08:39
#34
Хмурый


 
Регистрация: 29.10.2004
СПб
Сообщений: 16,379


dip, можно, ведь, и поиск по форуму провести "макрос создания слоя"
например, http://forum.dwg.ru/showthread.php?t=52266
Хмурый вне форума  
 
Непрочитано 31.01.2014, 08:45
#35
dip

проектировщик
 
Регистрация: 25.05.2007
г. Чебоксары
Сообщений: 206
<phrase 1=


Хмурый, спасибо большое. Что-то я сразу не догадался
dip вне форума  
 
Непрочитано 31.01.2014, 14:03
#36
Valery Brelovsky

Инженер дорожник
 
Регистрация: 22.10.2007
Израиль
Сообщений: 1,859


^C^C_-layer New LIVNEVKA;^C^C_-layer Color 140 LIVNEVKA;^C^C_-layer Set LIVNEVKA; ^C^C-insert D:/AutoDesk_14/BLOKI/KOLODEC \1 1
Я так делаю
Valery Brelovsky вне форума  
 
Непрочитано 31.01.2014, 14:16
#37
Хмурый


 
Регистрация: 29.10.2004
СПб
Сообщений: 16,379


Valery Brelovsky, а сразу сделать _-layer _Make ?
Тогда слой создастся и станет сразу активным
Хмурый вне форума  
 
Непрочитано 31.01.2014, 15:44
#38
Alan

CAD
 
Регистрация: 28.08.2003
Киев
Сообщений: 1,834
<phrase 1=


Цитата:
Сообщение от Хмурый Посмотреть сообщение
Valery Brelovsky, а сразу сделать _-layer _Make ?
Тогда слой создастся и станет сразу активным
Всё таки я думаю, что необходима проверка Слоя, он м.б. например заморожен, если пользоваться _make
Цитата:
Команда: -СЛОЙ
Текущий слой: "0"
Задайте опцию [?/Создать/Установить/Новый/Вкл/Откл/Цвет/Тип линий/вЕс
линий/Материал/пеЧать/Заморозить/Разморозить/Блок/рАзблок/Конфигурация]: _make
Введите имя нового слоя (этот слой станет текущим) <0>: dim
Слой "dim" заморожен. Не может стать текущим до размораживания.
Слой может также уже существовать, если пользоваться _new
Цитата:
Команда: -слой
Текущий слой: "0"
Задайте опцию [?/Создать/Установить/Новый/Вкл/Откл/Цвет/Тип линий/вЕс
линий/Материал/пеЧать/Заморозить/Разморозить/Блок/рАзблок/Конфигурация]: _new
Имя нового слоя(ев): dim
Слой "dim" уже существует.
Резюмируя... я пользуюсь в таком случае ЛИСП-программкой создания слоя, которая всё это делает
__________________
По теории майский жук летать не может.
Но он этого не знает. И летает...

Последний раз редактировалось Alan, 31.01.2014 в 16:00.
Alan вне форума  
 
Непрочитано 31.01.2014, 17:28
#39
Valery Brelovsky

Инженер дорожник
 
Регистрация: 22.10.2007
Израиль
Сообщений: 1,859


Цитата:
Сообщение от Хмурый Посмотреть сообщение
Valery Brelovsky, а сразу сделать _-layer _Make ?
Тогда слой создастся и станет сразу активным
Не силён я в этом деле. Сидит функция в меню IMAGE и в принципе работает выбрал нужный блок и вставил на нужный слой. Если слоя нет он создаёт это слой и активирует. Можно попробовать и с _Make .


Цитата:
Сообщение от Alan Посмотреть сообщение
Слой может также уже существовать, если пользоваться _new
Если слой существует он его активирует. Самособой нового второго не создаёт.
Valery Brelovsky вне форума  
 
Непрочитано 31.01.2014, 17:41
#40
Alan

CAD
 
Регистрация: 28.08.2003
Киев
Сообщений: 1,834
<phrase 1=


Цитата:
Сообщение от Valery Brelovsky Посмотреть сообщение
Если слой существует он его активирует.
Я забыл добавить. Слой 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.
Alan вне форума  
 
Непрочитано 01.02.2014, 07:29
#41
Valery Brelovsky

Инженер дорожник
 
Регистрация: 22.10.2007
Израиль
Сообщений: 1,859


Цитата:
Сообщение от Alan Посмотреть сообщение
^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
Т.е. мне нужно добавить в макрос аналогичную строку на случай если слой заморожен?
Valery Brelovsky вне форума  
 
Непрочитано 01.02.2014, 11:32
#42
Alan

CAD
 
Регистрация: 28.08.2003
Киев
Сообщений: 1,834
<phrase 1=


Цитата:
Сообщение от Valery Brelovsky Посмотреть сообщение
Т.е. мне нужно добавить в макрос аналогичную строку на случай если слой заморожен?
Тебе не удастся т.к. у тебя нет прожки NLAYER.
Строку приводил в качестве примера. Не использую чистый DISEL сочетаю с ЛИСП-текстами - больше возможности.
В твоём случае надо проанализировать Заморожен слой или нет, т.е. всё равно нужен ЛИСП.

----- добавлено через ~10 мин. -----
Что же касается ЛИСП-конструкции
(if (/= (strcase (Substr (getvar "CLAYER") 1 3) T) "dim")(nlayer "DIM" nil nil) nil)
Я допускаю для размещения размеров слои, начинающиеся с DIM, например, DIM_перегородки, DIM_ростверки, DIM_сваи....
Макрос, опубликованный здесь на форуме, позволял переносить размеры на какой-то слой, например, РАЗМЕР.
Но моим пользователям проектировщикам одного слоя мало, они сами определяют куда поставить размер.
Но если текущий слой не "размерный", при вызове данной строки размер попадёт в DIM
__________________
По теории майский жук летать не может.
Но он этого не знает. И летает...
Alan вне форума  
 
Непрочитано 02.02.2014, 10:20
#43
Valery Brelovsky

Инженер дорожник
 
Регистрация: 22.10.2007
Израиль
Сообщений: 1,859


Цитата:
Сообщение от Alan Посмотреть сообщение
Тебе не удастся т.к. у тебя нет прожки NLAYER.
Понял. Работаю с этими макросами давно. Но впрос заморожен слой или нет меня не доставал. Я в принципе в файлах не использую замороженные слоя. Чертёж на печать я формирую из ссылочных файлов и там я использую иногда замораживания слоёв в ссылках, для формирования разных чертежей. Но там я не черчу. А в файлах в которых черчу слои не замораживаю.
Valery Brelovsky вне форума  
 
Непрочитано 02.02.2014, 13:33
#44
Alan

CAD
 
Регистрация: 28.08.2003
Киев
Сообщений: 1,834
<phrase 1=


Цитата:
Сообщение от Valery Brelovsky Посмотреть сообщение
Но впрос заморожен слой или нет меня не доставал.
Ну и ладушки... Я рассматриваю более общий случай, когда макрос или программка должны работать при ЛЮБЫХ условиях.
__________________
По теории майский жук летать не может.
Но он этого не знает. И летает...
Alan вне форума  
 
Непрочитано 02.02.2014, 14:17
#45
Valery Brelovsky

Инженер дорожник
 
Регистрация: 22.10.2007
Израиль
Сообщений: 1,859


В принципе без проверки можно добавить функцию включить слой и разморозить если будет доставать при вставке болка. Часто что бы не заморачиваться пользуюсь функцией включить все слоя, и на всякий случай разморозить. Есть тут программы которые создают и выключают слоя. На пример как создание рамки с сеткой координит. Если сетку делаешь в модели то всё нормально, но если в листае, то сетка создаётся в листе и в моделе, только в моделе выключена, или заморожена, сейчас когда задумался, даже не вспомню. Просто включаю и размораживаю все слоя и сетку в моделе удаляю.
Valery Brelovsky вне форума  
 
Непрочитано 02.02.2014, 17:28
#46
dip

проектировщик
 
Регистрация: 25.05.2007
г. Чебоксары
Сообщений: 206
<phrase 1=


Здравствуйте, уважаемые форумчане! У меня следующая проблема. Есть макрос: ^C^Ckonstr_armDP;esc;-очистить;все;;нет; Но он работает не правильно. Алгоритм следующий: 1)Работает программа (привязана к lisp); 2)прекращаю работу программы кнопкой esc; 3)очистка чертежа. Где ошибка, не знаю
dip вне форума  
 
Непрочитано 02.02.2014, 17:35
#47
AlphaGeo


 
Сообщений: n/a


dip, так может esc стоит заменить на ^C?

----- добавлено через ~8 мин. -----
И вообще, хотелось бы видеть, что AutoCAD пишет в командной строке при выполнении макроса. Тогда и ошибку локализовать будет проще.
 
 
Непрочитано 02.02.2014, 17:59
#48
dip

проектировщик
 
Регистрация: 25.05.2007
г. Чебоксары
Сообщений: 206
<phrase 1=


пишет "; ошибка: Функция отменена". Макрос ^C^Ckonstr_armDP;^C;-очистить;все;;нет; Не помогает к сожалению
dip вне форума  
 
Непрочитано 02.02.2014, 19:46
#49
AlphaGeo


 
Сообщений: n/a


dip, так может её (функцию konstr_armDP) и не нужно отменять? Как функция работает, какие действия требуются от пользователя при её работе?

----- добавлено через ~1 мин. -----
И лучше весь «выхлоп» командной строки с момента запуска макроса предоставлять...
 
 
Непрочитано 02.02.2014, 19:53
#50
dip

проектировщик
 
Регистрация: 25.05.2007
г. Чебоксары
Сообщений: 206
<phrase 1=


Команда: konstr_armDP

Подождите...Первая точка: *Прервано*
; ошибка: Функция отменена

Команда:
KONSTR_ARMDP
Первая точка: -очистить

Неверная точка.
Первая точка: Вторая:
Найдено полей: 12.
Обновлено полей: 12. Первая точка: Вторая:
Найдено полей: 12.
Обновлено полей: 12. Первая точка: *Прервано*
; ошибка: Функция отменена
dip вне форума  
 
Непрочитано 02.02.2014, 20:12
#51
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,411


Ошибка в коде функции, я так полагаю.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 02.02.2014, 20:23
#52
dip

проектировщик
 
Регистрация: 25.05.2007
г. Чебоксары
Сообщений: 206
<phrase 1=


Код:
[Выделить все]
^C^Ckonstr_armDP;^C;-очистить;все;;нет;
Не подскажете, где здесь ошибка?
dip вне форума  
 
Непрочитано 02.02.2014, 20:27
#53
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,411


Функция konstr-armdp из архивов КГБ? Или все же на ее код можно посмотреть?
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 02.02.2014, 20:34
#54
dip

проектировщик
 
Регистрация: 25.05.2007
г. Чебоксары
Сообщений: 206
<phrase 1=


Код:
[Выделить все]
 
(defun c:konstr_armDP (/ p1 p2 LastEnt LastObj LenKonstrArm LenKonstrArm9 LenKonstrArm3
		       	IdxDiam scaleDP Diam Name)
  (GetBlk_or_Load "konstr arm" "Констр арм")

  ( if (not DPavlov_CadComSrvKonstrArm)
    ( setq DPavlov_CadComSrvKonstrArm ( vlax-create-object "DPavlov_CadComSrv.KonstrArmClass" ) )
  )
  ( if (not DPavlov_CadComSrvKonstrArm)
    (exit)
  )

  ( vlax-invoke-method DPavlov_CadComSrvKonstrArm 'ShowDlg )
  (if( = ( vlax-get-property  DPavlov_CadComSrvKonstrArm 'IsOk ) 0 )
    (exit)
    ( setq Diam ( vlax-get-property  DPavlov_CadComSrvKonstrArm 'Diam )
	   Name ( vlax-get-property  DPavlov_CadComSrvKonstrArm 'Name )
    )
  )
  
  (setq IdxDiam(vl-position Diam (list 12 14 16 18 20 22 25 28 32 36)))
  (if (not IdxDiam)(setq IdxDiam 0))
  
  
  (setq scaleDP (GetScaleDP 1)
        p1 (getpoint "Первая точка: "))

  (if (not p1)
    (exit)
  )
  (setq p2 (getpoint p1 " Вторая: ")
	tmpos (getvar "osmode"))

  (ads_layer "Верх пролет" 4)
  (while (and p1 p2)
    (setvar "osmode" 0)
    (insertBlokDP p1 "konstr arm"  scaleDP (angle p1 p2))
    (setvar "osmode" tmpos)
    (setq LastEnt (entlast)
	  LenKonstrArm (distance p1 p2)
	  LenKonstrArm (if (< LenKonstrArm (* 18 scaleDP)) (* 18 scaleDP) LenKonstrArm)
	  LenKonstrArm9 (round05(* 2.0(/ LenKonstrArm 9.0)))
	  LenKonstrArm3 (round05(/ LenKonstrArm 3.0))
          LenKonstrArm3 (if (< LenKonstrArm3 (* 6.0 scaleDP)) (* 6.0 scaleDP) LenKonstrArm3)
    )

    ;справа
    (_kpblc-block-dyn-change-values LastEnt (list (cons "Расст м/у кол" LenKonstrArm )
						  (cons "сл 2*L/9" LenKonstrArm9 )
						  (cons "сп 2*L/9" LenKonstrArm9 )
						  (cons "сл L/3" LenKonstrArm3 )
						  (cons "сп L/3" LenKonstrArm3 )
						  (cons "диам арм" IdxDiam )
                                            ))
    (change_Attrib LastEnt (list ;(cons "ПОЗИЦИЯ" "К")
				 (cons "НОМЕР" Name)
				 ))
    (change_Layer LastEnt "Верх пролет")
    (command "_.updatefield" LastEnt "")
    (setq	p1 (getpoint "Первая точка: "))

    (if (not p1)
      (exit)
    )
    (setq p2 (getpoint p1 " Вторая: ")
  	  tmpos (getvar "osmode"))
  )
)
;------------------------------------------------------------------------------------------

dip вне форума  
 
Непрочитано 02.02.2014, 21:50
#55
Кулик Алексей aka kpblc
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-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > AutoCAD > Создание пользовательских кнопок в AutoCAD 2006