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

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

Автоматический перенос размеров на слой размеры. Break макро

Ответ
Поиск в этой теме
Непрочитано 01.03.2005, 12:58
Автоматический перенос размеров на слой размеры. Break макро
Piton
 
Инженер строитель
 
Москва
Регистрация: 24.02.2005
Сообщений: 396

Подскажите макрос на кнопку чтоб команда break разрывала в двух указанных точках (First point, second break point). ACAD2005
---
Добавлено (спасибо VVA): Рабочие варианты
#25
#190
#272
#273

Последний раз редактировалось Кулик Алексей aka kpblc, 16.11.2012 в 13:42.
Просмотров: 171288
 
Непрочитано 16.03.2012, 20:32
#281
Кулик Алексей aka kpblc
Moderator

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


Попробуй сделать так:
Код:
[Выделить все]
(_dwgru-layer-create '(("name" . "_Невидимая")("color" . 3)("lw" . 13)("lt" . "hidden")))
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 16.03.2012, 21:58
#282
voverrr

гастарбайтер понаехал
 
Регистрация: 07.12.2009
Маскво
Сообщений: 267


дудки.
на работе пробовал на автокаде 2010 и винда семёрка. Думал, что это может быть особенность системы.
Дома винда ХР, автокад 2009 - та же самая история(также не работает)

Причём, если вставляешь эту строку, то не работает весь лисп. Только слои создаёт, но на слои при построениях не перекидывает.
Слой "невидимые" создаёт, но тип линии - continuous, а никакой не hidden

пойду повешусь
voverrr вне форума  
 
Непрочитано 16.03.2012, 22:39
#283
Кулик Алексей aka kpblc
Moderator

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


voverrr, в ближайшие 3 дня помочь не смогу вообще никак. Есть, конечно, вариант - попытаться через TeamViewer сконтачиться. Если устраивает - во вторник напиши мне в ЛС, попробуем разобраться. Чудес, как правило, не бывает...
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 16.03.2012, 22:44
#284
voverrr

гастарбайтер понаехал
 
Регистрация: 07.12.2009
Маскво
Сообщений: 267


спасибо, напишу после выходных. ещё помучаю его немного.
мне вроде бы не к спеху, могу если что, и врукопашную этот пунктир назначить))
пока что разведаю что такое TeamViewer...
voverrr вне форума  
 
Непрочитано 17.03.2012, 11:58
#285
gomer

строю, ломаю
 
Регистрация: 03.04.2008
Украина
Сообщений: 5,515


нужно не ныть, а использовать отладку срдствами vlide, тогда все понятно будет, причем практически сразу
gomer вне форума  
 
Непрочитано 28.03.2012, 14:03
#286
99xt1

нефтепереработка
 
Регистрация: 17.11.2009
Мозырь, Республика Беларусь
Сообщений: 77


Цитата:
Сообщение от VVA Посмотреть сообщение
Автор Lee Mac. Опубликовано здесь (требуется регистрация)
Код:
[Выделить все]
;; Пояснения на русском добавлены VVA (Владимир Азарко)
;; Для активации / деактивации командных реакторов
;; необходимо набрать в командной строке LD
;;При аткивности реактора в строке MODEMACRO (левый нижний угол) будет надпись "LD+"
;;--------------------=={ Layer Director }==------------------;;
;;                                                            ;;
;;  Uses a command reactor to automatically set the layer     ;;
;;  upon the user invoking certain commands.                  ;;
;;                                                            ;;
;;  Layer settings are stored in the list at the top of the   ;;
;;  program. The first entry in the list is the command on    ;;
;;  which the reactor will trigger, it may use wildcards.     ;;
;;  The second entry is the designated layer for the command  ;;
;;  entered, this layer will be created if non-existent.      ;;
;;  The third entry is the layer colour that will be used if  ;;
;;  the layer is to be created in the drawing.                ;;
;;                                                            ;;
;;  The Reactor is set to be enabled upon loading the program ;;
;;  it can furthermore be toggled on and off using by typing  ;;
;;  'LD' at the command line.                                 ;;
;;------------------------------------------------------------;;
;;  Author: Lee McDonnell, 2010                               ;;
;;                                                            ;;
;;  Copyright © 2010 by Lee McDonnell, All Rights Reserved.   ;;
;;  Contact: Lee Mac @ TheSwamp.org, CADTutor.net             ;;
;;------------------------------------------------------------;;

(defun c:LD nil (LM:LayerDirector T))

(defun LM:LayerDirector ( msg )
  (vl-load-com)
  ;; © Lee Mac 2010

;;;;;;Здесь в виде списка задаем: команду, имя слоя, цвет
  (setq *LayerData*
   '(
     ("*TEXT"           "TEXT"       2) ;_ "*TEXT" - команда (DTEXT или MTEXT)
                                                ;_ "TEXT" - имя слоя
                                                ;_ 2 - цвет
     ("*DIM*,*LEADER"  "DIMENSIONS" 2)
     ("*VPORT*"         "DEFPOINTS"  7)
     ("*EXECUTETOOL"    "4"          4)
    )
  )
  ;;;

  (
    (lambda ( data callback1 callback2 / react )
      (if
        (setq react
          (vl-some
            (function
              (lambda ( reactor )
                (if (eq data (vlr-data reactor))
                  reactor
                )
              )
            )
            (cdar (vlr-reactors :vlr-command-reactor))
          )
        )
        (if (vlr-added-p react)
          (vlr-remove react)
          (vlr-add react)
        )
        (setq react
          (vlr-command-reactor data
            (list
              (cons :vlr-commandWillStart callback1)
              (cons :vlr-commandEnded     callback2)
              (cons :vlr-commandCancelled callback2)
            )
          )
        )
      )

      (if msg
        (if (and react (vlr-added-p react))
	  (progn
 	    (princ "\n<< Layer Director Enabled >>" )
	    (setvar
	      "Modemacro"
	      (strcat "LD+ "
		      (VL-STRING-LEFT-TRIM "LD+ " (getvar "modemacro"))
	      )
	    )
	    )
	  (progn
	    (princ "\n<< Layer Director Disabled >>")
	    (setvar
	      "Modemacro"
	       (VL-STRING-LEFT-TRIM "LD+ " (getvar "modemacro"))
	    )
	    )
        )
      )
    )

    "LayerDirector"
    'LayerDirectorSet
    'LayerDirectorReset
  )
  (princ)
)

(defun LM:MakeLayer ( name colour )
  (or (tblsearch "LAYER" name)
    (entmakex
      (list
        (cons 0   "LAYER")
        (cons 100 "AcDbSymbolTableRecord")
        (cons 100 "AcDbLayerTableRecord")
        (cons 2   name)
        (cons 62  colour)
        (cons 70  0)
      )
    )
  )
)

(defun LayerDirectorSet ( reactor arguments / layerdetails layer )
  (vl-load-com)
  ;; © Lee Mac 2010

  (if
    (and
      (setq layerdetails
        (vl-some
          (function
            (lambda ( x )
              (if (wcmatch (strcase (car arguments)) (car x))
                (cdr x)
              )
            )
          )
          *LayerData*
        )
      )
      (LM:MakeLayer (setq layer (car layerdetails)) (cadr layerdetails))
      (zerop
        (logand 1
          (cdr
            (assoc 70
              (tblsearch "LAYER" layer)
            )
          )
        )
      )
    )
    (progn
      (setq *oldlayer* (getvar 'CLAYER))      
      (setvar 'CLAYER layer)
    )
  )

  (princ)
)

(defun LayerDirectorReset ( reactor arguments )
  (vl-load-com)
  ;; © Lee Mac 2010

  (if
    (and (not (wcmatch (strcase (car arguments)) "*UNDO")) *oldlayer*
      (tblsearch "LAYER" *oldlayer*)
      (zerop
        (logand 1
          (cdr
            (assoc 70
              (tblsearch "LAYER" *oldlayer*)
            )
          )
        )
      )
    )
    (progn
      (setvar 'CLAYER *oldlayer*)
      (setq *oldlayer* nil)
    )
  )
  
  (princ)
)

(princ)
(LM:LayerDirector t)
(princ "\nДля активации / деактивации наберите в командной строке LD")
Возможно ли добавить в этот вариант перенос маскировок на свой слой?
99xt1 вне форума  
 
Непрочитано 28.03.2012, 15:36
1 | #287
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,990
<phrase 1= Отправить сообщение для VVA с помощью Skype™


99xt1, Там же в примечании все расписано
В твоем случае
Код:
[Выделить все]
;;;;;;Здесь в виде списка задаем: команду, имя слоя, цвет
  (setq *LayerData*
   '(
     ("*TEXT"           "TEXT"       2) ;_ "*TEXT" - команда (DTEXT или MTEXT)
                                                ;_ "TEXT" - имя слоя
                                                ;_ 2 - цвет
     ("WIPEOUT" "Слой_Wipeout" 1)
     ("*DIM*,*LEADER"  "DIMENSIONS" 2)
     ("*VPORT*"         "DEFPOINTS"  7)
     ("*EXECUTETOOL"    "4"          4)
    )
  )
  ;;;
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Непрочитано 29.03.2012, 10:41
#288
99xt1

нефтепереработка
 
Регистрация: 17.11.2009
Мозырь, Республика Беларусь
Сообщений: 77


Цитата:
Сообщение от VVA Посмотреть сообщение
99xt1, Там же в примечании все расписано
Я пытался, но у меня не получалось ни с WIPOEOUT, ни с XLINE.
Просто забыл перезагрузить Автокад
Все в порядке. Спасибо.
99xt1 вне форума  
 
Непрочитано 13.11.2012, 22:12
#289
vade


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


Подскажите пожалуйста, можно ли в данный лисп добавить следующее.
Есть в палитре блок Выноска с названием Выноска, хотелось бы чтобы при вставке данного блока, он вставлялся автоматически в слой Выноска, как это реализовано с командами QLEADER и MLEADER/
Или может быть другие варианты
vade вне форума  
 
Непрочитано 13.11.2012, 22:23
#290
Кулик Алексей aka kpblc
Moderator

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


ИМХО это проще будет сделать, настроив палитру...
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 13.11.2012, 22:31
#291
vade


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


Спасибо, попробую
vade вне форума  
 
Непрочитано 13.11.2012, 22:40
#292
PashaStr

инженер-конструктор
 
Регистрация: 24.04.2011
Минск
Сообщений: 320


я далеко не гуру lisp, но я для себя я решал схожую задачу (единственное вставка идёт из внешнего файла (моей библиотеки), а не из палитры). Вешал на сочетание клавиш. (использовал наработки VVA lib:add-block-to-doc-from-lib и kpblc _kpblc-layer-create)
Код:
[Выделить все]
 (defun c:r1 (/ pt)
  (_kpblc-layer-create '(("name" . "_Dyn_block")("color" . 171)("lw" . 25)("plot" . "y")))
  (lib:add-block-to-doc-from-lib
    "D:\\AutoCAD\\Block library\\pk_block_preparation_of_drawings.dwg"
    "pk_break_line"
  )
  (prompt "\nPlease click a point: ")
  (setq pt (getpoint))
  (command "_.insert" "pk_break_line" pt "0.01" "0.01" "0")
  (command "_chprop" "_last" "" "_layer" "_Dyn_block" "")
)
Или простым языком вставлял блок и менял после вставки его слой на нужный мне.
Под свои нужны можно сделать что-то подобное.
PashaStr вне форума  
 
Непрочитано 14.11.2012, 20:56
#293
vade


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


Тоже вариант. Спасибо.
Получается для каждого блока свой лисп?
vade вне форума  
 
Непрочитано 14.11.2012, 23:46
#294
PashaStr

инженер-конструктор
 
Регистрация: 24.04.2011
Минск
Сообщений: 320


vade, да, правда забивал всё в один файл для удобства
PashaStr вне форума  
 
Непрочитано 04.05.2013, 23:29
#295
voverrr

гастарбайтер понаехал
 
Регистрация: 07.12.2009
Маскво
Сообщений: 267


А возможно ли добавить в этот лисп, чтобы он создавал размерный стиль, с определёнными размерами стрелок, высотами текстов, расположениями по центру/над линией, подавлениями хвостовых и т.п.?
А мультивыноски?
А текстовые стили?

Это я хочу попробовать обойтись вовсе без создания шаблона .dwt
voverrr вне форума  
 
Непрочитано 05.05.2013, 19:37
#296
Кулик Алексей aka kpblc
Moderator

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


voverrr, см. http://forum.dwg.ru/showthread.php?t=3253 и http://autolisp.ru/2009/11/02/dimstyle-create/
Вообще-то поиск рулит: http://www.google.ru/cse?cx=partner-...%8F&gsc.page=1
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 16.05.2013, 11:10
#297
elnino


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


Здравствуйте.
Я подстроил немножко программу под себя, но один момент не работает. Проблема в том, что я хочу LINE, XLINE и PLINE вывести на один слой а SPLINE на другой, но не хочу писать 4 строчки по отдельности. Как добавить исключение к *LINE?
Ниже в коде я выделил красным конфликтные строчки.
Заранее благодарю.
PS: В программировании я ноль, если что
Код:
[Выделить все]
;;; Автор идеи Kenny Ramage, Эдуард, Torino, он же Кочетков Андрей 
;;; Доработка Владимир Азарко (VVA)
;;; Опубликовано http://forum.dwg.ru/showpost.php?p=58664&postcount=25
;;;Автоматический перенос размеров на слой "размеры" 
;;;и заливки на слой "заливка" 
;;;Просто добавь этот файл в автозагрузку 
(vl-load-com) 
(if *vlr-cmd*
(progn
(setq *vlr-cmd* nil)
(vlr-remove-all :vlr-command-reactor)
) ;_ end of progn
) ;_ end of if
(setq *OldLayer* (getvar "CLAYER")) 
(vl-cmdf "_layer" "_make" "Размеры" "_color" 130 "" "") ;_Создаем слой размеры и задаем цвет 130 ... 
(vl-cmdf "_layer" "_make" "Штриховка" "_color" 160 "" "") ;_Создаем слой штриховка и задаем цвет 160 
(vl-cmdf "_layer" "_make" "Текст" "_color" 80 "" "") ;_Создаем слой текст и задаем цвет 80
(vl-cmdf "_layer" "_make" "Формат.Таблица" "_color" 213 "" "") ;_Создаем слой таблицы и задаем цвет 213
(vl-cmdf "_layer" "_make" "Волнистые линии" "_color" 10 "" "") ;_Создаем слой волнистые линии и задаем цвет 10
(vl-cmdf "_layer" "_make" "Видимый контур (ГОСТ)" "_color" 7 "" "") ;_Создаем слой Видимый контур (ГОСТ) и задаем цвет 7
(setvar "clayer" *OldLayer*) 
(setq *OldLayer* nil) 
;;;;;;По аналогии добавить создание своего слоя 
;;; ... 
;;;;;; 
;;;;;;------------------------------------------------------------- 

(if (not *vlr-cmd*)
(setq	*vlr-cmd* (vlr-command-reactor "cmd"
'((:vlr-commandwillstart . cmd-start)
(:vlr-commandended . cmd-end)
(:vlr-commandcancelled . cmd-end)
(:vlr-commandfailed . cmd-end)))))
;;;;;;------------------------------------------------------------- 
(defun cmd-start (calling-reactor startcommandInfo / thecommandstart) 
(setq thecommandstart (nth 0 startcommandInfo))
(if (null *OldLayer*)(setq *OldLayer* (getvar "CLAYER")))
(cond 
;;;_Реакция на начало команды DIM* (DIMALIGNED DIMLINEAR и все что начинается с DIM) 
((wcmatch thecommandstart "DIM*") ;_Если выполняется команда DIM* 
(setvar "clayer" "размеры") ;_Слой размеры должен быть создан выше (vl-cmdf "_layer" ... 
) 
;;; Конец реакции на DIM* 
((wcmatch thecommandstart "*HATCH*") ;_Если выполняется команда *HATCH* HATCH
(setvar "clayer" "штриховка") 
) 
((wcmatch thecommandstart "ARC") ;_Если выполняется команда ARC
(setvar "clayer" "штриховка") 
) 
((wcmatch thecommandstart "*TEXT") ;_Если выполняется команда *TEXT (TEXT DTEXT) 
(setvar "clayer" "Текст") 
)
((wcmatch thecommandstart "*LINE") ;_Если выполняется команда *LINE (LINE XLINE PLINE) 
(setvar "clayer" "Видимый контур (ГОСТ)") 
) 
((wcmatch thecommandstart "RECTANG") ;_Если выполняется команда RECTANG
(setvar "clayer" "Видимый контур (ГОСТ)") 
)
((wcmatch thecommandstart "CIRCLE") ;_Если выполняется команда CIRCLE
(setvar "clayer" "Видимый контур (ГОСТ)") 
)
((wcmatch thecommandstart "*TABLE") ;_Если выполняется команда *TABLE
(setvar "clayer" "Формат.Таблица") 
)
((wcmatch thecommandstart "*LEADER") ;_Если выполняется команда QLEADER MLEADER
(setvar "clayer" "Волнистые линии") 
)
((wcmatch thecommandstart "SPLINE") ;_Если выполняется команда SPLINE
(setvar "clayer" "Волнистые линии") 
)
(t (setq *OldLayer* nil)) ;;_Если не наша команда, чистим список текущих слоев
;;;См http://forum.dwg.ru/showpost.php?p=318806&postcount=139
;;;и http://forum.dwg.ru/showpost.php?p=318806&postcount=143
)
(princ)) 
;;;------------------------------------------------------------- 
(defun cmd-end (calling-reactor cmd / cmd_name)
(setq cmd_name (strcase (car cmd)))
(if (or
(wcmatch cmd_name "*HATCH*") ;_Если выполняется команда *HATCH*
(wcmatch cmd_name "DIM*") ;_Если выполняется команда DIM*
(wcmatch cmd_name "*TEXT") ;_Если выполняется команда *TEXT (TEXT DTEXT)
(wcmatch cmd_name "*TABLE") ;_Если выполняется команда ТАБЛИЦА
(wcmatch cmd_name "*LEADER") ;_Если выполняется команда QLEADER или MLEADER
(wcmatch cmd_name "ARC") ;_Если выполняется команда ARC
(wcmatch cmd_name "RECTANG") ;_Если выполняется команда RECTANG
(wcmatch cmd_name "*LINE") ;_Если выполняется команда *LINE (LINE XLINE PLINE)
(wcmatch cmd_name "CIRCLE") ;_Если выполняется команда CIRCLE
(wcmatch cmd_name "SPLINE") ;_Если выполняется команда SPLINE
)
(progn
(if *OldLayer* (setvar "clayer" *OldLayer*)) 
(setq *OldLayer* nil)
))
(princ))
)

Последний раз редактировалось elnino, 16.05.2013 в 11:40.
elnino вне форума  
 
Непрочитано 16.05.2013, 11:12
1 | #298
Кулик Алексей aka kpblc
Moderator

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


(wcmatch thecommandstart "LINE,XLINE,PLINE")
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 16.05.2013, 11:56
#299
elnino


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


И все-таки, как добавить исключение, а то мысль пошла дальше, но натолкнулся на большое количество перечислений, наверняка должно быть проще.
Нужно посадить MC* на один слой а MCWLEG и MCWELD на другой. Что я делаю не так?
Код:
[Выделить все]
 (if (null *OldLayer*)
  (setq *OldLayer* (getvar "CLAYER"))
)
(cond 
((wcmatch thecommandstart "DIM*")
(setvar "clayer" "размеры")
) 
((wcmatch thecommandstart "*HATCH*,ARC*")
(setvar "clayer" "штриховка") 
) 
((wcmatch thecommandstart "*TEXT")
(setvar "clayer" "Текст") 
)
((wcmatch thecommandstart "LINE,XLINE,PLINE,RECTANG,CIRCLE,POLYGON,ELLIPSE")
(setvar "clayer" "Видимый контур (ГОСТ)") 
) 
((wcmatch thecommandstart "*TABLE")
(setvar "clayer" "Формат.Таблица") 
)
((wcmatch thecommandstart "*LEADER,SPLINE")
(setvar "clayer" "Волнистые линии") 
)
((AND
(wcmatch thecommandstart "MC*")
(wcmatch thecommandstart "~MCWLEG,~MCWELD")
)
(setvar "clayer" "Волнистые линии") 
)
((wcmatch thecommandstart "MCWLEG,MCWELD")
(setvar "clayer" "штриховка") 
)
(t (setq *OldLayer* nil))
(princ))
И еще вопросик.
Можно как нибудь добавить диалог с выбором из трех слоев для команды _line? Для толстых, тонких, и соответственно штрихпунктирных.
Извиняюсь, если уже задавали такой вопрос.

Последний раз редактировалось elnino, 16.05.2013 в 14:30.
elnino вне форума  
 
Непрочитано 17.05.2013, 17:54
1 | #300
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,990
<phrase 1= Отправить сообщение для VVA с помощью Skype™


поменяй перечисление команд местами.
Код:
[Выделить все]
 (if (null *OldLayer*)
  (setq *OldLayer* (getvar "CLAYER"))
)
(cond 
((wcmatch thecommandstart "DIM*")
(setvar "clayer" "размеры")
) 
((wcmatch thecommandstart "*HATCH*,ARC*")
(setvar "clayer" "штриховка") 
) 
((wcmatch thecommandstart "*TEXT")
(setvar "clayer" "Текст") 
)
((wcmatch thecommandstart "LINE,XLINE,PLINE,RECTANG,CIRCLE,POLYGON,ELLIPSE")
(setvar "clayer" "Видимый контур (ГОСТ)") 
) 
((wcmatch thecommandstart "*TABLE")
(setvar "clayer" "Формат.Таблица") 
)
((wcmatch thecommandstart "*LEADER,SPLINE")
(setvar "clayer" "Волнистые линии") 
)
((wcmatch thecommandstart "MCWLEG,MCWELD")
(setvar "clayer" "штриховка") 
)
((wcmatch thecommandstart "MC*")
(setvar "clayer" "Волнистые линии") 
)
)
(t (setq *OldLayer* nil))
(princ))
Пишу без проверки в редакторе, за баланс скобок не отвечаю
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Автоматический перенос размеров на слой размеры. Break макро

Размещение рекламы
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск