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

Вернуться   Форум DWG.RU > Программное обеспечение > AutoCAD > Перенос стиля мультилинии через Tool Paletts

Перенос стиля мультилинии через Tool Paletts

Ответ
Поиск в этой теме
Непрочитано 04.09.2009, 02:42 #1
Перенос стиля мультилинии через Tool Paletts
wetr
 
инженер
 
Владивосток
Регистрация: 09.08.2006
Сообщений: 1,535

Исходные данные:
Шаблон, содержащий необходимые слои, стили текста и стили размеров.
Паллетка, содержащая все остальные элементы, необходимые для проектирования, такие как:
блоки, стили мультивыносок, таблицы, типы линий, стили мультилиний

Это разделение, сделано для того, чтобы не утяжелять исходный файл шаблона. Ведь многие файлы не нуждаются, и в 80% всей информации, содержащейся в палеттке.

Теперь о проблеме.

Пытаюсь перенести стиль мультилинии в новый файл. Через дизайн-центр этого сделать нельзя. Тупо кинув на паллетку мультилинии с необходимым стилем - тоже эффекта нет.
Придумал, как перенести стиль. Запихал мультилинию в блок. Блок на палеттку. В свойствах выставил - взрывать при вставке. Все хорошо, но хочется большего. Хочу вызывать _mline с палеттки, чтобы сразу ее рисовать в нужном мне стиле. То есть, нужно совместить загрузку стиля мультилинии с макросом, типа
Код:
[Выделить все]
^C^C_mline;ST;ТРУБА;s;100;
Сейчас я могу это сделать только нажав на 2 кнопки. Лишний гемор
__________________
14 Ибо если вы будете прощать людям согрешения их, то простит и вам Отец ваш Небесный (Мф 6, 14)
Просмотров: 5622
 
Непрочитано 04.09.2009, 08:58
#2
Krieger

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


Ну я в свое время решил лиспом.
Код:
[Выделить все]
;|=======================================================================================================
Функция Kr_AddMlineStyle
Создаёт стиль мультилиний. Стили с такими-же именами удаляются (функцией Kr_DelMlineStyle) и вместно нее создается новый стиль.
Типы линий загружаются сами (должны быть прописаны в путях поддержки).
Параметры:
ListParam - список параметров вида: ((a aColor aLineType)(b aColor bLineType).. и т.д. ..(N NColor NLineType)), где
    a, b, ... , N - расстояния от цетра млинии до каждой её линии
    aColor и т.д. - цвета линии млинии
    aLineType и т.д. - тип линий в стиле млиний
StyleName - имя стиля млиний ("УКАЗЫВАТЬ В КАВЫЧКАХ И ЗАГЛАВНЫМИ БУКВАМИ!")
Примеры:
(Kr_AddMlineStyle (list '(-20 5 "CONTINUOS") '(-7 26 "ACAD_ISO03W100") '(7 26 "ACAD_ISO03W100") '(20 5 "CONTINUOS")) "PROBA")
=======================================================================================================|;
(defun Kr_AddMlineStyle    (ListParam StyleName / nn n mlDict mlList mlListadd)

(setq n (length ListParam))
  
(Kr_DelMlineStyle StyleName)
  
      (setq mlDict
         (cdr (assoc -1
             (dictsearch (namedobjdict) "ACAD_MLINESTYLE")
          )
         )
      )
      (setq mlList (list
             '(0 . "MLINESTYLE")
             '(102 . "{ACAD_REACTORS")
             '(102 . "}")
             '(100 . "AcDbMlineStyle")
             (cons 2 StyleName)
             '(70 . 272)
             '(3 . "")
             '(62 . 256)
             '(51 . 1.5708)
             '(52 . 1.5708)
             (cons 71 n)
           );end list
      )                    ; end setq             

  (foreach NN ListParam
    (Progn
    (Setq mlListadd
           (list
            (cons 49 (car NN))
                  (cons 62 (cadr NN))
            (cons 6 (caddr NN))
            )
          mlList    (append mlList mlListadd)
    );end setq
      );end progn
    );end foreach
      
      (dictadd mlDict StyleName (entmakex mlList))
)
Код:
[Выделить все]
;|=======================================================================================================
Функция Kr_DelMlineStyle
Функция удаляет стиль мультилинии
Работает даже если необходимый стиль установлен текущим, но не работает если в чертеже имеются млинии этого стиля.
Параметры:
StyleName - название стиля
===========================================================================================================|;

(defun Kr_DelMlineStyle (StyleName / mlDict mlList)
(if (= (getvar "CMLSTYLE") StyleName)
(progn
    (if (= nil
     (member '(3 . "STANDARD") (dictsearch (namedobjdict) "ACAD_MLINESTYLE"))    ;если стиля "STANDARD" нет - создадим его
      )
  (progn
    (setq mlDict
         (cdr (assoc -1
             (dictsearch (namedobjdict) "ACAD_MLINESTYLE")
          )
         )
      )
      (setq mlList (list
             '(0 . "MLINESTYLE")
             '(102 . "{ACAD_REACTORS")
             '(102 . "}")
             '(100 . "AcDbMlineStyle")
             '(2 . "STANDARD")
             '(3 . "")
             '(62 . 256)
             '(51 . 1.5708)
             '(52 . 1.5708)
             '(71 . 2)
             '(49 . -0.5)
             '(62 . 0)
             '(6 . "BYLAYER")
             '(49 . 0.5)
             '(62 . 0)
             '(6 . "BYLAYER")             
            );end list
      ); end setq 
    (dictadd mlDict "STANDARD" (entmakex mlList))
    );end progn
  );end if
  (setvar "CMLSTYLE" "STANDARD");и сделаем текущим
  );end progn
  );end if
;если он в словаре типов мультилиний есть - удаляем нафиг:
  (if (/= nil
     (member (cons 3 StyleName) (dictsearch (namedobjdict) "ACAD_MLINESTYLE"))
      )
  (vl-cmdf "_-purge" "_Mlinestyles" StyleName "n");собсно эта строчка и удаляет
  );end if

  );end defun
Эти проги в автозагрузку, тогда на кнопке палетки можно написать нечто, типа:
Код:
[Выделить все]
^C^C(Kr_AddMlineStyle (list '(-20 5 "CONTINUOS") '(-7 26 "ACAD_ISO03W100") '(7 26 "ACAD_ISO03W100") '(20 5 "CONTINUOS")) "PROBA") (setvar "CMLSTYLE" "PROBA") (command "_mline")
__________________
Делай хорошо, плохо само получится.
Krieger вне форума  
 
Автор темы   Непрочитано 04.09.2009, 09:33
#3
wetr

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


Спасибо. Так я и думал что штатно это не решить. Уже начал копать в сторону
Код:
[Выделить все]
dictsearch (namedobjdict)
но копать бы мне еще месяца 2 пришлось)))

Т.е. ты предлагаешь создавать стиль, а не подгружать из файла?
__________________
14 Ибо если вы будете прощать людям согрешения их, то простит и вам Отец ваш Небесный (Мф 6, 14)
wetr вне форума  
 
Непрочитано 04.09.2009, 11:38
#4
Krieger

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


Ну да, универсальное, простое, ни от чего независящее решение. Штатно ничего хорошего нету в каде в этом направлении. Хотя в составе блока он импортируется нормально, потом остается сделать стиль текущим и чертить. Ну это как вариант, решается простым макросом.
__________________
Делай хорошо, плохо само получится.
Krieger вне форума  
 
Автор темы   Непрочитано 07.09.2009, 03:39
#5
wetr

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


Krieger, а как добавить другие свойства мультилинии? В частности меня интересует "Показывать соединения"(Display joints). Я так понял остальные настройки выставляются по умолчанию.
Цитата:
Сообщение от Krieger Посмотреть сообщение
... Хотя в составе блока он импортируется нормально, потом остается сделать стиль текущим и чертить. Ну это как вариант, решается простым макросом.
Макросом это как? До меня не доходит.
Вставить блок понятно как, но потом точку вставки указывать нужно, а это ерунда. Да и блок потом удалять. Вот если б можно было макросом в базу чертежа импортировать описание блока, не вставляя его вхождение... Тогда дальше все просто
Цитата:
(setvar "CMLSTYLE" "PROBA") (command "_mline")
__________________
14 Ибо если вы будете прощать людям согрешения их, то простит и вам Отец ваш Небесный (Мф 6, 14)
wetr вне форума  
 
Непрочитано 07.09.2009, 10:03
#6
Krieger

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


Цитата:
Сообщение от wetr Посмотреть сообщение
Krieger, а как добавить другие свойства мультилинии? В частности меня интересует "Показывать соединения"(Display joints). Я так понял остальные настройки выставляются по умолчанию.
За стиль окончания отвечает 70-я группа. Её значения (вернее сумма из значений):
Цитата:
Сообщение от Справка
Flags (bit-coded):
1 =Fill on
2 = Display miters
16 = Start square end (line) cap
32 = Start inner arcs cap
64 = Start round (outer arcs) cap
256 = End square (line) cap
512 = End inner arcs cap
1024 = End round (outer arcs) cap
Соответственно в коде функции Kr_AddMlineStyle нужно подправить эту группу здесь:
Код:
[Выделить все]
(setq mlList (list
             '(0 . "MLINESTYLE")
             '(102 . "{ACAD_REACTORS")
             '(102 . "}")
             '(100 . "AcDbMlineStyle")
             (cons 2 StyleName)
             '(70 . 272)
             '(3 . "")
             '(62 . 256)
             '(51 . 1.5708)
             '(52 . 1.5708)
             (cons 71 n)
           );end list
      )
Или если они везде разные вынести в параметры функции.

Цитата:
Сообщение от wetr Посмотреть сообщение
Макросом это как? До меня не доходит.
Вставить блок понятно как, но потом точку вставки указывать нужно, а это ерунда. Да и блок потом удалять. Вот если б можно было макросом в базу чертежа импортировать описание блока, не вставляя его вхождение... Тогда дальше все просто
Например так:
Код:
[Выделить все]
^C^C_-insert;"Mline.dwg";^C_-purge;_Blocks;Mline;_n;(setvar "CMLSTYLE" "PROBA");_mline
Сохраняем нашу мультилинию в файл Mline.dwg, по адресу добавленному в пути поиска када. Макрос вставляет блок, он импортируется весь, но при указке точки вставки мы обрываем команду. Потом очищаем чертеж от теперь уже лишнего блок пургеном, делаем заведомо известный стиль proba текущим и вызываем команду черчения млиний.
__________________
Делай хорошо, плохо само получится.
Krieger вне форума  
 
Автор темы   Непрочитано 07.09.2009, 16:50
#7
wetr

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


Спасибо! С лиспом все получилось, с макросом попробую завтра. Но что-то мне кажется лисп надежней и быстрее.
__________________
14 Ибо если вы будете прощать людям согрешения их, то простит и вам Отец ваш Небесный (Мф 6, 14)
wetr вне форума  
 
Непрочитано 27.11.2014, 10:52
#8
Ануар Амергалиев


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


а можно скинуть сам лисп, а не код?) пока в кодах не силен, увы
Ануар Амергалиев вне форума  
 
Непрочитано 27.11.2014, 10:59
#9
Krieger

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


Цитата:
Сообщение от Ануар Амергалиев Посмотреть сообщение
а можно скинуть сам лисп, а не код?)
А в чем разница?
__________________
Делай хорошо, плохо само получится.
Krieger вне форума  
 
Непрочитано 27.11.2014, 11:48
#10
Ануар Амергалиев


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


Цитата:
Сообщение от Krieger Посмотреть сообщение
А в чем разница?
в том что я не знаю что делать с этим кодом, а с лиспом знаю)
Ануар Амергалиев вне форума  
 
Непрочитано 27.11.2014, 11:56
#11
Krieger

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


Просто мне казалось что этот код и есть лисп? Нет?
__________________
Делай хорошо, плохо само получится.
Krieger вне форума  
 
Непрочитано 27.11.2014, 11:57
#12
Ануар Амергалиев


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


не знаю) лиспы, что у меня есть я скачивал с данного форума, они шли файлами
Ануар Амергалиев вне форума  
 
Непрочитано 27.11.2014, 12:09
#13
Krieger

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


Запускаешь блокнотик. Копируешь код с форума, вставляешь в блокнот и сохраняешь файл с расширением lsp.
Почитай здесь Как использовать лисп, опубликованный на форуме
Вложения
Тип файла: lsp Kr_AddMlineStyle.lsp (3.8 Кб, 51 просмотров)
__________________
Делай хорошо, плохо само получится.
Krieger вне форума  
 
Непрочитано 27.11.2014, 12:12
#14
Ануар Амергалиев


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


спасибо) теперь буду знать
Ануар Амергалиев вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > AutoCAD > Перенос стиля мультилинии через Tool Paletts

Размещение рекламы