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

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

Как создать команду для создания мультилинии?

Ответ
Поиск в этой теме
Непрочитано 03.12.2014, 15:04 #1
Как создать команду для создания мультилинии?
Gotch
 
Регистрация: 07.02.2007
Сообщений: 200

Друзья помогите создать команду для создания мультилинии
_mlstyle - пробовал запускать но всегда вызывает окно
ход такой -
_mlstyle
Создать
Название стиля - ДорогаПолевая
Описание - Дорога Полевая дорога
Смещение
1 линия - 1.2
2 линия - 1.2 и задать тип линии dor_0_001
после этого установить текущий тип мультилинии
и начать рисовать эту мультилинию в слое И1 Дорога Полевая дорога
Просмотров: 4460
 
Непрочитано 03.12.2014, 15:52
#2
Сергей812


 
Регистрация: 10.08.2013
Сообщений: 11,040


Подсказка, если выполните в комстроке

Цитата:
(entget (namedobjdict))
то увидите, что тип мультилиний определяется в словаре "ACAD_MLINESTYLE". Соответственно, надо работать со этим словарем, а не через комстроку, имхо.
Сергей812 вне форума  
 
Автор темы   Непрочитано 03.12.2014, 16:11
#3
Gotch


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


я пошел другим путем
создал нужные мне млинии и сохранил в акадовский файл acad.mln
и уже с помощью команды ^C^C_.-layer;_m;"И1 Дорога Полевая дорога";_ltype;continuous;;_c;7;;;;;_mline;_style;ДОРОГАПОЛЕВАЯ;
делаю то что мне нужно
Gotch вне форума  
 
Непрочитано 03.12.2014, 17:46
#4
VVA

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


Еще пару ссылок
Программное создание и загрузка стиля для MLINE ?
Замена выделенных мультилиний на мультилинии другого типа.
Как "по тихому" загрузить стиль мультилинии, без диалога?

Еще один вариант - создаешь нужные стили млинии в dwg файле, затем вставляешь dwg как блок в чертеж - все стили млинии импортируются
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Автор темы   Непрочитано 04.12.2014, 14:30
#5
Gotch


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


Цитата:
Сообщение от VVA Посмотреть сообщение
Еще пару ссылок
Программное создание и загрузка стиля для MLINE ?
Замена выделенных мультилиний на мультилинии другого типа.
Как "по тихому" загрузить стиль мультилинии, без диалога?

Еще один вариант - создаешь нужные стили млинии в dwg файле, затем вставляешь dwg как блок в чертеж - все стили млинии импортируются
VVA если не сложно подскажи
когда я запускаю эту команду -
^C^C_.-layer;_m;"И1 Дорога Полевая дорога";_ltype;continuous;;_c;7;;;;;_mline;_scale;1;_style;ДОРОГАПОЛЕВАЯ;

я получаю вот так -
Код:
[Выделить все]
Команда: _.-layer

Текущий слой:  "И1 Дорога Полевая дорога"
Задайте параметр [?/Создать/Установить/Новый/переименоватЬ/Вкл/Откл/Цвет/Тип 
линий/вЕс 
линий/Прозрачность/Материал/пеЧать/Заморозить/Разморозить/Блок/рАзблок/Конфигура
ция/опИсание/соГласовать]: _m

Введите имя нового слоя (этот слой станет текущим) <И1 Дорога Полевая дорога>: 
"И1 Дорога Полевая дорога"
Задайте параметр [?/Создать/Установить/Новый/переименоватЬ/Вкл/Откл/Цвет/Тип 
линий/вЕс 
линий/Прозрачность/Материал/пеЧать/Заморозить/Разморозить/Блок/рАзблок/Конфигура
ция/опИсание/соГласовать]: _ltype

Введите имя загруженного типа линий или [?] <Continuous>: continuous

Список имен слоев для присвоения типа линий "continuous" <И1 Дорога Полевая 
дорога>:
Задайте параметр [?/Создать/Установить/Новый/переименоватЬ/Вкл/Откл/Цвет/Тип 
линий/вЕс 
линий/Прозрачность/Материал/пеЧать/Заморозить/Разморозить/Блок/рАзблок/Конфигура
ция/опИсание/соГласовать]: _c

Новый цвет [изПалитры/Альбом] : 7

Список имен слоев для присвоения цвета 7 (белый) <И1 Дорога Полевая дорога>:
Задайте параметр [?/Создать/Установить/Новый/переименоватЬ/Вкл/Откл/Цвет/Тип 
линий/вЕс 
линий/Прозрачность/Материал/пеЧать/Заморозить/Разморозить/Блок/рАзблок/Конфигура
ция/опИсание/соГласовать]:

Команда:
.-СЛОЙ
Текущий слой:  "И1 Дорога Полевая дорога"
Задайте параметр [?/Создать/Установить/Новый/переименоватЬ/Вкл/Откл/Цвет/Тип 
линий/вЕс 
линий/Прозрачность/Материал/пеЧать/Заморозить/Разморозить/Блок/рАзблок/Конфигура
ция/опИсание/соГласовать]:

Команда: _mline

Текущие настройки: Расположение = Верх, Масштаб = 1.00, Стиль = STANDARD
Начальная точка или [Расположение/Масштаб/Стиль]:  _scale

Масштаб мультилинии <1.00>:  1

Текущие настройки: Расположение = Верх, Масштаб = 1.00, Стиль = STANDARD
Начальная точка или [Расположение/Масштаб/Стиль]:  _style

Имя стиля мультилиний или [?]:  ДОРОГАПОЛЕВАЯ
после этого он выдает запрос на открытие файла, указываю ему - acad.mln
и только после этого начинаю рисовать
как то можно обойти запрос ан открытие файла ?

----- добавлено через ~16 мин. -----
Друзья или может кто поможет подправить этот лисп, если невозможно сделать загрузку с помощью обычного акад кода:
Код:
[Выделить все]
;; lmst.lsp
(defun load_mlinestyle (flnm stname reload / *error* lst_member answer fl fl2 ckl strmus strmus2 lst_style)
  ;flnm - имя файла стиля мультилинии
  ;stname - имя стиля мультилинии
  ;reload - если не nil, то перезагрузка стиля
  ;автор: Александр Смирнов aka {Smirnoff} aka Fantomas
  (defun *error* (msg)
    (vl-catch-all-apply 'close (list fl2))
    (princ (strcat "\nОшибка в файле стиля мультилинии " flnm))
  );defun
  (if (or (not (setq lst_member (member (cons 3 stname) (setq answer (dictsearch (namedobjdict) "ACAD_MLINESTYLE")))))
    reload
      );or
    (if (and (setq fl (findfile flnm))
       (setq fl2 (open fl "r"))
        );and
      (progn
  (read-line fl2)
  (setq ckl t)
  (while (and ckl
        (setq strmus (read-line fl2))
        (setq strmus2 (read-line fl2))
         );and
    (if (and (= (vl-string-trim " " strmus) "2")
       (= (vl-string-trim " " strmus2) stname)
        );and
      (setq ckl nil)
    );if
  );while  
        (while (and (setq strmus (read-line fl2))
        (setq strmus2 (read-line fl2))
        (/= (setq strmus (vl-string-trim " " strmus)) "0")
         );and
      (setq lst_style (cons
        (cond
          ((or (= strmus "3") (= strmus "6"))
           (cons (atoi strmus) (vl-string-trim " " strmus2))
          )
          ((or (= strmus "51") (= strmus "52"))
           (cons (atoi strmus) (* (atof (vl-string-trim " " strmus2)) (/ pi 180.0)))
          )
          (t
           (read (strcat "(" strmus " . " (vl-string-trim " " strmus2) ")"))
          )
        );cond
      lst_style))
        );while
  (close fl2)
  (if lst_style
    (progn
      (setq lst_style (append
            (list
              '(0 . "MLINESTYLE")
              (cons 330 (cdr (assoc -1 answer)))
              '(100 . "AcDbMlineStyle")
        (cons 2 stname))
            (reverse lst_style)))
      (if lst_member
        (entmod (subst (cons 350 (entmakex lst_style)) (cadr lst_member) answer))
        (entmod (append answer (list (cons 3 stname) (cons 350 (entmakex lst_style)))))
      );if
    );progn
  );if
      );progn
    );if
    answer
  );if
);defun

(defun C:LMST	(/ fname mline_list)

(command "_undo" "_begin")

  (setvar "filedia" 1)
  ;; Выбираешьфайл  MLN :
  (setq fname (getfiled "Select a LiineType File" (getvar "dwgprefix") "mln" 4))
  ;;или прописываешь полное имя файла:
;;;  (setq fname "D:\\Мультилинии\\Общие_назнвания\\мультилинии_2000.mln") ;<---'назнвания' - это синтаксическая ошибка???


  ;;составляешь список мультилиний, которые нужно загрузить:
  
  (setq mline_list (list "M00-" "M131-" "M132-"))
  ;;Грузишь весь список:
  (foreach item mline_list
  (load_mlinestyle fname item nil);<-- nil чтобы не загружать существующий стиль
    )
    ;;Или то же самое:
;;;   (mapcar
;;;    (function (lambda(m) (load_mlinestyle fname m nil)))
;;;    mline_list))
    (command "_undo" "_end")

  (princ)
  )
 ;;=================================;;
(prompt "\n\t***\tВедите LMST для загрузки стилей мультилинии\t***")
(prin1)
что бы загружал из стандартного acad.mln который лежит в
C:\Users\i.r.karimov\AppData\Roaming\Autodesk\AutoCAD 2012 - Russian\R18.2\rus\Support
все стили мультилиний

вот их список
"ДОРОГАПОЛЕВАЯ" "ДОРОГАЖЕЛЕЗНАЯ1000" "ДОРОГАЖЕЛЕЗНАЯСТР1000" "ДОРОГАЖЕЛЕЗНАЯРАЗР1000" "ДОРОГАЖЕЛЕЗНАЯУЗКОЛ1000" "ДОРОГАЖЕЛЕЗНАЯУЗКОЛСТР1000" "ДОРОГАЖЕЛЕЗНАЯ500" "ДОРОГАЖЕЛЕЗНАЯСТР500" "ДОРОГАЖЕЛЕЗНАЯРАЗР500" "ДОРОГАЖЕЛЕЗНАЯУЗКОЛ500" "ДОРОГАЖЕЛЕЗНАЯУЗКОЛСТР500" "ДОРОГАЖЕЛЕЗНАЯРАЗР2000" "ОГРАДАКАМБ1М1000" "ОГРАДАКАММ1М1000" "ОГРАДАКАМНАБЕТ1000" "ОГРАДАДЕРНАБЕТ1000" "ОГРАДАКАМБ1М500" "ОГРАДАКАММ1М500" "ОГРАДАКАМНАБЕТ500" "ОГРАДАДЕРНАБЕТ500"


т.е. в чем суть
я создал кнопки в инструментальной политре что бы начать рисовать мультилинией
и назначил этот код
^C^C_.-layer;_m;"И1 Дорога Полевая дорога";_ltype;continuous;;_c;7;;;;;_mline;_scale;1;_style;ДОРОГАПОЛЕВАЯ;
но он всегда выдает запрос на открытие файла

Последний раз редактировалось Gotch, 04.12.2014 в 15:05.
Gotch вне форума  
 
Непрочитано 04.12.2014, 15:28
#6
VVA

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


Gotch, Правильно выдает. Команда mline рисует ИМЕЮЩИМИСЯ в чертеже стилями мультилиний. Это не слой, который создается на ходу.
Помимо _mline есть еще команда _mlstyle
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Автор темы   Непрочитано 04.12.2014, 15:35
#7
Gotch


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


_mlstyle тоже не получается из командной строки загрузить
если не сложно подскажи как быть?
или только через лисп грузить?
Gotch вне форума  
 
Непрочитано 04.12.2014, 16:16
#8
VVA

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


Цитата:
Сообщение от Gotch Посмотреть сообщение
если не сложно подскажи как быть?
Обрати внимание на этот вариант

Цитата:
Сообщение от VVA Посмотреть сообщение
Еще один вариант - создаешь нужные стили млинии в dwg файле, затем вставляешь dwg как блок в чертеж - все стили млинии импортируются
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Автор темы   Непрочитано 04.12.2014, 16:30
#9
Gotch


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


Цитата:
Сообщение от VVA Посмотреть сообщение
Обрати внимание на этот вариант
да
я сейчас тоже прочитал это
спасибо
вышел таким образом из ситуации
^C^C_-insert;"Блоки.dwg";^C_-purge;_Blocks;Файл;_n;^C^C_.-layer;_m;"И1 Дорога Полевая дорога";_ltype;continuous;;_c;7;;;;;_mline;_scale;1;_style;ДОРОГАПОЛЕВАЯ;
Gotch вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Как создать команду для создания мультилинии?

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как заставить прозрачную команду на ЛИСП возвращать значение 480725 LISP 10 17.06.2014 01:43
Как создать новую команду или панель? EGEN13 AutoCAD 12 29.08.2013 14:37
Как создать команду высчитывающую расстояние между двумя точками и записывала результат в виде текста на чертеже FRC_Volen Программирование 10 11.06.2013 21:37
VBA Создать команду с опциями shprot Программирование 11 23.03.2013 21:14