Re: Макрос на кнопке для изменения свойств обьекта

> kpblc
Самостоятельно я собирал два раза. И оба раза не работало. Я синтаксиса не знаю. И посмотреть негде.

Re: Макрос на кнопке для изменения свойств обьекта

> Forma
см. > Forma (2005-08-16 15:50:43):

?книгу В.Света "AutoCAD Язык макросов и создание кнопок" все-таки купить не помешает.?
Есть такая книга у меня. Ничего в ней не понимаю.

Читать надо повнимательнее. Сколько раз уже говорено - не по диагонали надо читать техническую литературу, не по диагонали... И каждую страницу. Там все написано и описано.

Re: Макрос на кнопке для изменения свойств обьекта

> kpblc
Нет сил у меня на эту книгу. Не понимаю я автора. Я человек системный.

Re: Макрос на кнопке для изменения свойств обьекта

> kpblc
Работает только первая часть.
Создает слой. А дальше начинается кутерьма какая то. Даже не описать. Ты сам то проверял работу этого макроса? Или так, слепил из того что было.

Re: Макрос на кнопке для изменения свойств обьекта

> kpblc
Честно говоря, нехорошо этот макрос работает. Слой-то создается, но все затыкается на изменении свойств. Надо бы вот так, IMHO, записать часть макроса, касающегося _change:

_Change;\;_Prop;_Layer;06-DIM;;

Re: Макрос на кнопке для изменения свойств обьекта

> kpblc
Прошу прощения, вот полный макрос:

^C^C_-Layer;_Make;06-DIM;_ON;06-DIM;_Color;3;;_Ltype;Continuous;;_LWeight;0.25;;_Plot;_Plot;;_Thaw;06-DIM;_Unlock;06-DIM;;_Change;\;_Prop;_Layer;06-DIM;;

Re: Макрос на кнопке для изменения свойств обьекта

> Forma

^C^C_-Layer;_Make;06-DIM;_ON;06-DIM;_Color;3;;_Ltype;Continuous;;_LWeight;0.25;;_Plot;_Plot;;_Thaw;06-DIM;_Unlock;06-DIM;;_Change;\;_Properties;_Layer;06-DIM;;

Называется - найди 2 отличия.
Оффтоп:
Честно говоря, Forma, у тебя ситуация весьма сильно напоминает старую притчу: стоит мужик и пилит дерево тупой пилой. К нему подходит другой и спрашивает:
- Ты чего делаешь?
- Дерево пилю.
- Так тупая пила-то, заточи!
- Нет времени...
Не проще ли полдня потерять, потом за 5 минут долететь?

Re: Макрос на кнопке для изменения свойств обьекта

О, пока печатал, уже обогнали :)
Forma, все равно - найди отличия и пойми, что было не так.

Re: Макрос на кнопке для изменения свойств обьекта

> Владимир Громов
Вот уже теплее.
1. Кнопка переключает на слой "06-DIM";
2. Если его нет, то слой этот создается:
   Это хорошо!
3. Остался третий, последний пункт.
   Мне нужно "Не заселектируйте обьект", а , вне зависимости ни от чего, я  селектирую обьекты. Затем кликаю по кнопке и эти обьекты приобретают свойства "06-DIM" (Или уходят в этот слой. Не в терминологии дело)

Re: Макрос на кнопке для изменения свойств обьекта

Значит попробуй заменить в маросе ;\; на ;_last; - будет тебе дополнительный бонус

Re: Макрос на кнопке для изменения свойств обьекта

> kpblc
Я бы рад сделать, да не понимаю этих нюансов.

Re: Макрос на кнопке для изменения свойств обьекта

Нда, не срабатывает. Сорри. Меня мучает один вопрос - а выпадающий список "слой" вообще не работает? С ним-то попроще будет все-таки: выделил объекты, выбрал в списке подходящий слой и все - выбор на слое болтается. Замороженные, заблокированные и отключенные слои не обрабатываются. Чем подход плох?

Re: Макрос на кнопке для изменения свойств обьекта

> kpblc
Насчет "тупой пилы" согласен. Что делать? Такой наш российский менталитет. И я такой. Признаю.

Re: Макрос на кнопке для изменения свойств обьекта

> kpblc
Плох тем, что долго это. У меня "родных" слоев - десять. И больше себе не позволяю. Но! Остальных 5-10-15 не мои. Пока в названиях, смыслах разберешься. И в каждом другом чертеже все по другому. А работать надо быстро. Тем более я лет десять работал по этой схеме в другом CADе. Привык.

Re: Макрос на кнопке для изменения свойств обьекта

> Forma
Да я-то не собирался писать макрос для данной задачи, хотелось просто разобраться с макросом kpblc, прошу прощения.

Re: Макрос на кнопке для изменения свойств обьекта

> Владимир Громов
Ну ладно. Прошу прощения.

Re: Макрос на кнопке для изменения свойств обьекта

> Forma
Не надо обощать - у меня, надеюсь, все-таки не такой.
Если медленно, то окно свойств сделает то же самое. А _.qselect вообще позволяет сразу весь чертеж прошерстить - это так, для справки.
Схема работы (меня достало, если честно, рассказывать элементарные вещи, но, похоже, без этого не обойтись): просто, тупо и наглядно.
Создается шаблон, в котором есть все свои "родные" слои. Через _.insert вставляется блоком пришедший чертеж, для него делается _.explode. Выбор объектов - любым методом, потом через список слоев, или через _.change, или через панель Properties заменить на выбранных объектах все что угодно.
Более продвинутый способ - использовать CAD-стандарты. Его рассказывать в очередной раз не буду, недавно приводил цитаты по этому делу - поиск рулез!

Re: Макрос на кнопке для изменения свойств обьекта

> Владимир Громов

> kpblc
Жаль. А так все хорошо пошло.

Re: Макрос на кнопке для изменения свойств обьекта

Закончится тоже неплохо. Значится так, делаем лисп-файл (записать как kpblc-changeprop.lsp по путям поддержки ACADa):

;|=============================================================================
*    Функция изменения свойства наборов объектов.
*    Параметры:
*    layer-name    - имя слоя. Слой должен существовать.
*    Примеры вызова:
(kpblc-changeprop "0")        - перенос на слой "0"
(kpblc-changeprop "01-Arrows")    - перенос на слой "01-Arrows"
=============================================================================|;
(defun kpblc-changeprop    (layer-name / selset cur_ent)
  (vl-load-com)
  (if (not *kpblc-activedoc*)
    (setq *kpblc-activedoc* (vla-get-activedocument (vlax-get-acad-object)))
    ) ;_ end of if
  (setq selset (ssget))
  (vla-endundomark *kpblc-activedoc*)
  (vla-startundomark *kpblc-activedoc*)
  (while (and selset
          (> (sslength selset) 0)
          ) ;_ end of and
    (setq cur_ent (ssname selset 0))
    (ssdel cur_ent selset)
    (entmod (subst (cons 8 layer-name)
           (assoc 8 (entget cur_ent))
           (entget cur_ent)
           ) ;_ end of subst
        ) ;_ end of entmod
    (entupd cur_ent)
    ) ;_ end of while
  (vla-endundomark *kpblc-activedoc*)
  ) ;_ end of defun

И макрос становится нечто типа такого:

^C^C_-Layer;_Make;06-DIM;_ON;06-DIM;_Color;3;;_Ltype;Continuous;;_LWeight;0.25;;_Plot;_Plot;;_Thaw;06-DIM;_Unlock;06-DIM;;(if (not *kpblc-activedoc*) (load "kpblc-changeprop.lsp"));(kpblc-changeprop "06-DIM");

На случай, если уже были мои лиспы подгружены, то код макроса станет

^C^C_-Layer;_Make;06-DIM;_ON;06-DIM;_Color;3;;_Ltype;Continuous;;_LWeight;0.25;;_Plot;_Plot;;_Thaw;06-DIM;_Unlock;06-DIM;;(if (not (kpblc-changeprop)) (load "kpblc-changeprop.lsp"));(kpblc-changeprop "06-DIM");

Для гарантированной загрузки макрос будет

^C^C_-Layer;_Make;06-DIM;_ON;06-DIM;_Color;3;;_Ltype;Continuous;;_LWeight;0.25;;_Plot;_Plot;;_Thaw;06-DIM;_Unlock;06-DIM;;(load "kpblc-changeprop.lsp");(kpblc-changeprop "06-DIM");

Выбирай по вкусу и цвету. Есть вариант более продвинутый, но я его уже приводил и повторяться не буду. Если и это не нравится, то платите финансы, сделаю менюшку (достало заниматься такой работой впустую, если честно)

Re: Макрос на кнопке для изменения свойств обьекта

Вот программа, записанная как макрос для кнопки. Сначала надо выделить объекты, а потом щелкнуть по кнопке. Слой создается с параметрами по умолчанию. Лучше заранее создать нужный слой и настроить его. Если объекты не будут заранее выбраны, а то получится чепуха.

^P(setq ss (ssget)) (vl-cmdf "_-LAYER" "_M" "06-DIM" "") (if ss (vl-cmdf "_Change" ss "" "_Prop" "_Layer" "06-DIM" "")) (princ)

Re: Макрос на кнопке для изменения свойств обьекта

> Владимир Громов
Опять только частично. На кнопке должно быть три функции:
1. Кнопка переключает на слой "06-DIMENSION";
2. Если его нет, то слой этот создается; (_Color;3;_Ltype;Continuous;_LWeight;0.05;; и т.д. что там нужно)
3. Заселектированные обьекты кликая по этой кнопке, приобретают свойства слоя "06-DIMENSION";
Все это должно работать независимо друг от друга. Три функции на одной кнопке.
Если это, в принципе, не возможно сделать в AutoCAD, закрываем тему.

Re: Макрос на кнопке для изменения свойств обьекта

> Forma
Ну, если в принципе вам лень скомпоновать под себя макрос из кучи вышеприведенных примеров, то и пусть эта тема закрывается.

Re: Макрос на кнопке для изменения свойств обьекта

> Владимир Громов
Мне не лень. Я не знаю синтаксиса.

Re: Макрос на кнопке для изменения свойств обьекта

> Forma
Вот только через месяц стало ясно, что кнопка должна выполнять три функции, причем  в зависимости от наличия слоя и наличия или отсутствия выбранных заранее объектов. Почему же нельзя было сразу подробно расписать условия? Главное сейчас - это добавить в макрос проверку наличия выбранных объектов, т.е. выполнять (ssget) или нет. Пока не соображу, как это сделать попроще и книжки нет под рукой...

Re: Макрос на кнопке для изменения свойств обьекта

Ндааа... Примеров мало, кода мало, разъяснений мало... Forma, есть предложение: ты пишешь ТЗ, я делаю менюшки. Ессно, не бесплатно. Полгода (или побольше - зависит от подробности ТЗ и объема работы) и у тебя будет все чего тебе хоцца. А? Как идея?
А то решения-то на самом деле однотипные, а вот системы не видно.

> Владимир Громов
Мое мнение - надо делать на самом деле несколько лиспов: один создает список возможных слоев с настройками для них; второй активирует (или создает) слой из списка; третий переносит объекты на данный слой. При необходимости - запросы и предупреждения. Приводить все здесь не вижу смысла, если честно - слишком много кода, который да, универсален, но его применять для одной задачи - как из гаубицы по муравьям - грохоту много, а эффект близок к нулю.

> Forma
Учиться "никогда не поздно и никому не рано" (с) "Кавказская пленница"