Автоматический выбор заданного слоя - Страница 2
| Правила | Регистрация | Пользователи | Сообщения за день |  Справка по форуму | Файлообменник |

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

Автоматический выбор заданного слоя

Ответ
Поиск в этой теме
Непрочитано 06.10.2009, 13:42
Автоматический выбор заданного слоя
Aqualung
 
машиностроитель
 
Тольятти
Регистрация: 24.08.2009
Сообщений: 259

Можно ли сделать так, чтобы при выборе Construction Line автоматически выбирался слой "Вспомогательная". Собственно как реализовано в Компасе - а то приходится в 3 раза больше кликов делать: развернуть слои, выбрать слой, выбрать Constr. Line.
__________________
рисую чертежи... можно акварелью
Просмотров: 13749
 
Непрочитано 08.10.2009, 10:53
#21
E-degtyarev

Помогаю, кому делать нечего.
 
Регистрация: 27.03.2009
Русская деревня
Сообщений: 394


^C^C -это отказ от выполняемых в настоящий момент комманд.
Очень желательно присутсвие этих символов в начале любого макроса.
E-degtyarev вне форума  
 
Непрочитано 08.10.2009, 11:22
#22
forMA


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


Известно, что на вкус и цвет товарищей нет. Я когда то применял схему о которой пишет Aqualung. Не прижилась. Деревянная какая то. Гибкости нет. А уж палитра при оперативной работе машиностроителя совсем не помощник. Вот уж много лет я работаю примерно так: Круговым движением курсора "подхватываю" слой, а затем собственно команду, расположенные в верхнем левом углу окна AutoCAD. Попробуй, может и сгодится.

p.s. Слой "10-SUPPORT" у меня примерно аналог вашему слою "Вспомогательная".
макрос на кнопку:
Код:
[Выделить все]
^C^C(if (not C:10-SUPPORT) (load "10-SUPPORT")) 10-SUPPORT
программка на LISP:
Код:
[Выделить все]
(defun C:10-SUPPORT ( / echo ss)
(setq echo (getvar "CMDECHO"))
(setvar "CMDECHO" 0)
(if (/= (setq ss (nth 1 (ssgetfirst))) nil)
    (progn
    (princ "\n Есть выбранные объекты.")
    (command "_-LAYER" "_M" "10-SUPPORT" "_C" 6
    "10-SUPPORT" "_LT" "CONTINUOUS"
    "10-SUPPORT" "_LW" 0.05 "10-SUPPORT" "")
    (command "_CHANGE" ss "" "_P" "_LA" "10-SUPPORT" "")
    ) ;progn
    (progn
    (princ "\n Нет выбранных объектов.")
    (command "_-LAYER" "_M" "10-SUPPORT" "_C" 6
    "10-SUPPORT" "_LT" "CONTINUOUS"
    "10-SUPPORT" "_LW" 0.05 "10-SUPPORT" "")
    ) ;progn
) ;if
(setvar "CMDECHO" echo)
(princ)
)
Миниатюры
Нажмите на изображение для увеличения
Название: Immagine.jpg
Просмотров: 124
Размер:	44.1 Кб
ID:	26999  
forMA вне форума  
 
Непрочитано 08.10.2009, 13:05
#23
E-degtyarev

Помогаю, кому делать нечего.
 
Регистрация: 27.03.2009
Русская деревня
Сообщений: 394


Цитата:
Круговым движением курсора "подхватываю" слой
А тренироваться долго нужно?
E-degtyarev вне форума  
 
Непрочитано 08.10.2009, 13:11
#24
wetr

инженер
 
Регистрация: 09.08.2006
Владивосток
Сообщений: 1,536
<phrase 1= Отправить сообщение для wetr с помощью Skype™


Цитата:
Сообщение от Aqualung Посмотреть сообщение
wetr как использовать/включить/загрузить этот реактор?... (честно говоря первый раз слышу "реактор" применительно к акаду .. блин эту прогу можно изучать вечно)
rar переименовать в 7z и распаковать! Получишь видео
Вложения
Тип файла: rar 1.rar (1.51 Мб, 77 просмотров)
__________________
14 Ибо если вы будете прощать людям согрешения их, то простит и вам Отец ваш Небесный (Мф 6, 14)
wetr вне форума  
 
Непрочитано 08.10.2009, 13:13
#25
forMA


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


Цитата:
Сообщение от E-degtyarev Посмотреть сообщение
А тренироваться долго нужно?
Не знаю. От человека, наверное, зависит...Зрительная память. Моторная память. Ну может час или день работы.
forMA вне форума  
 
Автор темы   Непрочитано 09.10.2009, 09:26
#26
Aqualung

машиностроитель
 
Регистрация: 24.08.2009
Тольятти
Сообщений: 259


Цитата:
Сообщение от Do$ Посмотреть сообщение
Код:
[Выделить все]
^C^C(setq clay (getvar "clayer"))(setvar "clayer" "Вспомогательная")(vl-cmdf "_.xline" pause pause "")(setvar "clayer" clay)(setq clay nil)(princ);
Слой "Вспомогательная" должен существовать, чтоб макрос работал.
ммм а можно чтобы после построения одной линии команда не сбрасывалась?
И еще... я сделал 2 кнопочки дополнительно для горизонтали и вертикали. Макрос такой назначил
Код:
[Выделить все]
^C^C(setvar "clayer" "Вспомогательная");^C^C_xline Hor
- строится горизонталь в вспомогательном слое.
попробовал по аналогии с предложеной для просто линии командой написать
Код:
[Выделить все]
^C^C(setq clay (getvar "clayer"))(setvar "clayer" "Вспомогательная")(vl-cmdf "_.xline Hor" pause pause "")(setvar "clayer" clay)(setq clay nil)(princ);
но не работает так... Как правильно записать макрос чтобы выбралась горизонталь, слой, построил линию - слой вернулся как был до выбора горизонтали?
__________________
рисую чертежи... можно акварелью
Aqualung вне форума  
 
Непрочитано 09.10.2009, 09:29
#27
Profan


 
Регистрация: 25.12.2005
Москва
Сообщений: 13,627


Код:
[Выделить все]
^C^C(setq clay (getvar "clayer"))(setvar "clayer" "Вспомогательная")(vl-cmdf "_.xline" "_Hor" pause pause "")(setvar "clayer" clay)(setq clay nil)(princ);
Profan вне форума  
 
Непрочитано 09.10.2009, 10:17
#28
Boxa

КЖ; C#
 
Регистрация: 03.11.2005
Санкт-Петербург
Сообщений: 2,611


Нда.... для разнообразия добавлю код на VB, а то прям засилие лиспа =)
Приведенный код поместить в автозагрузку и "шаманить" с кнопкой не надо, само работать будет.


Код:
[Выделить все]
Private Sub AcadDocument_EndCommand(ByVal CommandName As String)
On Error Resume Next
         
        Call crLayers
    If (CommandName = "XLINE") Then '
        Dim obj As AcadObject
        Set obj = ThisDrawing.ModelSpace.Item(ThisDrawing.ModelSpace.Count - 1)
        With obj
            If .ObjectName = "AcDbXline" Then '
                .Layer = "Вспомогательный"
                .color = 256 '"acByLayer"
                .Lineweight = acLnWtByLayer
                .Linetype = "ByLayer"
            End If
        End With
    End If
End Sub


Sub crLayers()
    On Error Resume Next
        ' Проверяю, есть ли нужные мне слои
    Dim layerObj As AcadLayer
    Set layerObj = ThisDrawing.Layers.Item("Вспомогательный")
    If layerObj Is Nothing Then Set layerObj = ThisDrawing.Layers.Add("Вспомогательный")
        With layerObj
            .color = "43"
            .Description = "Вспомогательный"
            .Freeze = False ' : Boolean
            .LayerOn = True ' : Boolean
            .Linetype = "Continuous" ': String
            .Lineweight = acLnWt015 '  ACAD_LWEIGHT
            .Lock = False ' : Boolean
            .Plottable = True ': Boolean ' Печатать или нет
        End With
    Set layerObj = Nothing
End Sub
Boxa вне форума  
 
Автор темы   Непрочитано 09.10.2009, 10:47
#29
Aqualung

машиностроитель
 
Регистрация: 24.08.2009
Тольятти
Сообщений: 259


Цитата:
Сообщение от Profan Посмотреть сообщение
Код:
[Выделить все]
^C^C(setq clay (getvar "clayer"))(setvar "clayer" "Вспомогательная")(vl-cmdf "_.xline" "_Hor" pause pause "")(setvar "clayer" clay)(setq clay nil)(princ);
спасибо! Только забавно получается - строится две линии и сбрасывается команда)) Видимо в просто _xline нужно два клика, а тут уже один клик прописан _Hor ... если я правильно понял незнакомый язык)
Так а можно сделать чтобы не сбрасывалась команда до нажатия ESC?
Воха
просто макрос отредактировать вроде проще чем целую прогу писать на VB)
__________________
рисую чертежи... можно акварелью
Aqualung вне форума  
 
Непрочитано 09.10.2009, 10:58
#30
Profan


 
Регистрация: 25.12.2005
Москва
Сообщений: 13,627


Действительно, если указываем опцию "_Hor" ("Гор"), то достаточно одной паузы:


Код:
[Выделить все]
 
^C^C(setq clay (getvar "clayer"))(setvar "clayer" "Вспомогательная")(vl-cmdf "_.xline" "_Hor" pause "")(setvar "clayer" clay)(setq clay nil)(princ);
Profan вне форума  
 
Автор темы   Непрочитано 09.10.2009, 11:49
#31
Aqualung

машиностроитель
 
Регистрация: 24.08.2009
Тольятти
Сообщений: 259


клево) я написал 3 раза pause - теперь 3 линии рисует)) можно конечно раз 10 написать, чтоб точно хватило, ну да пожалуй хватит 3 Только ощущение такое что это глупый способ)
__________________
рисую чертежи... можно акварелью
Aqualung вне форума  
 
Непрочитано 09.10.2009, 19:43
#32
Krieger

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


Разумные способы тебе предложили еще в самом начале...
__________________
Делай хорошо, плохо само получится.
Krieger вне форума  
 
Непрочитано 10.10.2009, 01:45
#33
Vova

Engineer
 
Регистрация: 05.09.2003
New-York
Сообщений: 10,288


http://dwg.ru/art/2
Vova вне форума  
 
Непрочитано 11.10.2009, 11:49
#34
kheylan


 
Регистрация: 24.05.2009
Екатеринбург
Сообщений: 86


А как сделать, чтобы ссылки вставлялись на отдельный слой?! Проблема в том, что программа понимает их однинаково как блоки и определяет как INSERT
kheylan вне форума  
 
Непрочитано 12.10.2009, 16:10
#35
Boxa

КЖ; C#
 
Регистрация: 03.11.2005
Санкт-Петербург
Сообщений: 2,611


Цитата:
Сообщение от kheylan Посмотреть сообщение
А как сделать, чтобы ссылки вставлялись на отдельный слой?! Проблема в том, что программа понимает их однинаково как блоки и определяет как INSERT
Команды может и одинаковые, а вот объекты наверное создаются разные. Попробуйте искать по имени объекта, а не команды...
Boxa вне форума  
 
Непрочитано 12.10.2009, 17:01
#36
E-degtyarev

Помогаю, кому делать нечего.
 
Регистрация: 27.03.2009
Русская деревня
Сообщений: 394


Aqualung, попробуй так:
^C^C(setq clay (getvar "clayer"))(setvar "clayer" "Вспомогательная")(while (command "_.xline" "_Hor" pause ))(setvar "clayer" clay)(setq clay nil)(princ);
E-degtyarev вне форума  
 
Непрочитано 12.10.2009, 18:05
#37
vadim_evg1


 
Регистрация: 08.01.2007
Рус
Сообщений: 398


Цитата:
Сообщение от kheylan Посмотреть сообщение
А как сделать, чтобы ссылки вставлялись на отдельный слой?! Проблема в том, что программа понимает их однинаково как блоки и определяет как INSERT
палитрой можно
Вложения
Тип файла: rar 0000.rar (721.0 Кб, 43 просмотров)
vadim_evg1 вне форума  
 
Непрочитано 12.10.2009, 19:03
#38
Кулик Алексей aka kpblc
Moderator

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


E-degtyarev, command возвращает nil.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 12.10.2009, 20:23
#39
Vova

Engineer
 
Регистрация: 05.09.2003
New-York
Сообщений: 10,288


Цитата:
Сообщение от E-degtyarev Посмотреть сообщение
У нас под кнопочками отрисовки линий зашиты макросы:
[code](setvar "cmdecho" 1)(command "_layer" "_m" "osnovn" "" "_line" pause)
Основной линией отрисовано, очевидно, 90% чертежа. Тогда как гораздо продуктивней объекты чертежа разложить по тематическим слоям (типа Стены внутренние, Наружные, колонны и т. д.) Иначе, по какому признаку ты будешь выделять объекты для разных нужд? Или по признаку Основные?
Vova вне форума  
 
Непрочитано 12.10.2009, 20:25
#40
Кулик Алексей aka kpblc
Moderator

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


Vova, иногда подобное разделение не особо-то и требуется...
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > AutoCAD > Автоматический выбор заданного слоя



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Выбор в автокаде ASЪ AutoCAD 39 26.06.2014 20:19
VBA. Размораживание слоя, построение объекта в нем, замораживание слоя = ошибка Alexey_02 Программирование 3 06.03.2009 22:33
Состояние защитного слоя панели перекрытия Иван 80 Конструкции зданий и сооружений 6 10.02.2009 00:20
Выбор слоя из командсной строки klopius AutoCAD 5 16.05.2007 19:56
Выбор блоков по значению слоя атрибута Serge_Y Программирование 2 15.11.2006 22:43