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

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

Помогите сохранить стиль!

Ответ
Поиск в этой теме
Непрочитано 05.11.2005, 04:08 #1
Помогите сохранить стиль!
Владимир М
 
-
 
Ухта
Регистрация: 31.07.2005
Сообщений: 381

Вот такое дело! Написал Лисп-программу для изменения стиля шрифта и размерных настроек, а как сохранить под новым стилем в "настройке стилей размеров" незнаю, какие дополнительные данные надо внести? Дело в том что настройка может сбится! Помогите!!!
ВОт и лисп-программа:

(command "STYLE" "gostb" "gostb_pg.shx"
"0.0" ; - высота текста
"0.8" "15" "N" "N" )


(command "TEXT" "S" "gostb" "C"
pttext ; - начальная точка
angtext ; - угол поворота
textval ; - текстовая строка
)

(command "DIMTXSTY" "gostb" "gostb_pg.shx"
"0.0" ; - высота текста
"0.8" "15" "N" "N" )



; Устанавливаем размерные переменные по ЕСКД
; Текст над размерной линией, а не в разрыве
( SETVAR "DIMTAD" 1 )
; Текст вне размерных линий параллелен линиям
( SETVAR "DIMTOH" 0 )
; Текст между размерными линиями горизонтален
( SETVAR "DIMTIH" 0 )
; Проведение линии между выносными, если текст сбоку
( SETVAR "DIMTOFL" 1 )
; Продолжение выносных линий за размерными, мм
( SETVAR "DIMEXE" 2 )
; Отключение генерации допусков
( SETVAR "DIMTOL" 0 )
; Размер стрелок
( SETVAR "DIMASZ" 3.5 )
; Величина отступа размерной линии в базовых размерах
( SETVAR "DIMDLI" 10 )
; Величина смещения выносных линий относительно заданных начальных точек
( SETVAR "DIMEXO" 0 )
; Высота размерного текста, если используемый текстовый стиль не имеет фиксированную высоту
( SETVAR "DIMTXT" 3.5 )
; Режим вертикальности текста относительно размерной линии
( SETVAR "DIMTAD" 1 )
; Высота размерного текста, если используемый текстовый стиль не имеет фиксированную высоту
( SETVAR "DIMTVP" 1 )
; Расстояние, оставляемое пустым при изображении размерного текста в разрыве размерной линии
( SETVAR "DIMGAP" 1 )
; Режим размещения размерного текста и стрелок, если для того и другого одновременно недостаточно места между выносными линиями
( SETVAR "DIMATFIT" 2 )
; Высота букв, предлагаемая по умолчанию для нового однострочного текста
( SETVAR "TEXTSIZE" 3.5 )
Просмотров: 7089
 
Автор темы   Непрочитано 07.11.2005, 10:07
#2
Владимир М

-
 
Регистрация: 31.07.2005
Ухта
Сообщений: 381
<phrase 1=


Ну, что никто не знает!!! Или не умеете!!! :?:
Владимир М вне форума  
 
Непрочитано 07.11.2005, 10:21
#3
Кулик Алексей aka kpblc
Moderator

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


http://dwg.ru/forum/viewtopic.php?t=4680
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 07.11.2005, 10:34
#4
Владимир М

-
 
Регистрация: 31.07.2005
Ухта
Сообщений: 381
<phrase 1=


Спасибо, kpblc, за сылочку попробую разобраться. Конечно я хотел по моему ЛИСПу.
Владимир М вне форума  
 
Непрочитано 07.11.2005, 11:33
#5
Кулик Алексей aka kpblc
Moderator

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


Дело в том, что использование (command) или (vl-cmdf) требует дополнительных проверок для универсальности работы. Работа через (entmake) по-моему, немного более устойчива. А через vla-объекты еще и быстрее
По коду: не устанавливается и не проверяется значение dimblk, вimblk1 и dimblk2. А если на чертеже установлено значение "_ArchTick"? Тогда и новый стиль будет получать это значение в качестве стрелок.
Если используются команды, крайне желательно перед командами ставить "_.", а перед опциями - "_". Тогда гарантирована работа и в локализованных версиях.
Для отключения диалогового окна надо выводить впереди символ "-" (минус), т.е. вместо (command "style" "gostb" "gostb_pg.shx"...) получится нечто типа (command "_.-style" "gostb" "gostb_pg.shx" ...).
В коде не проводится проверка на "нахождаемость" файла шрифта. Если его нет, команда вылетит.
Для установки системных переменных, чтобы не делать тысячу раз (setvar), можно использовать списки (да, наверно, и более правильно):
Код:
[Выделить все]
(defun set-sysvars (/ list_sysvar item sysvar_name sysvar_value)
  ;; Последние 2 локальные переменные введены только для простоты понимания
  (setq	list_sysvar
	 '(
	   ("attreq" 1)
	   ("attdia" 1)
	   ("dimtad" 1)
	   ("dimtoh" 0)
	   ;; Ну и так далее
	   )
	) ;_ end of setq
  ;; Установка системных переменных
  (foreach item	list_sysvar
    (setq sysvar_name  (car item)
	  sysvar_value (cadr item)
	  ) ;_ end of setq
    (setvar sysvar_name sysvar_value)
    ) ;_ end of foreach
  ) ;_ end of defun
Наращивая список, можно сделать все что угодно.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 07.11.2005, 13:07
#6
Владимир М

-
 
Регистрация: 31.07.2005
Ухта
Сообщений: 381
<phrase 1=


Спасибо, kpblc за помощь в коде. Разберусь, создам, проверю. Если все правильно получится, выложу сюда. Если нет, то еще поспрашиваю. Еще раз огромнейшее спасибо!
Владимир М вне форума  
 
Непрочитано 07.11.2005, 14:25
#7
Кулик Алексей aka kpblc
Moderator

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


И вот еще - перед установкой стилей желательно установить еще и lunits, aunits - я могу в качестве углов еще и радианы использовать. Т.е. получится нечто типа:
Код:
[Выделить все]
(defun autoload	(/ _cmdecho_ _nomutt_ font_file)
  (sysvar-set)
  (setq	_cmdecho_ (getvar "cmdecho")
	_nomutt_  (getvar "nomutt")
	) ;_ end of setq
  (mapcar 'setvar '("cmdecho" "nomutt") '(0 1))
  (if (not (tblsearch "style" "gostb"))
    (setvar "textstyle" "gostb")
    (progn
      (if (findfile "gostb_pg.shx")
	(setq font_file (findfile "gostb_pg.shx"))
	(setq font_file "txt.shx")
	) ;_ end of if
      (command "_.-style" "gostb" font_file 0.0 0.8 15 "_n" "_n" "_n")
      ) ;_ end of progn
    ) ;_ end of if
  (if (not (tblsearch "dimstyle" "gosted"))
    (command "_.-dimstyle" "_save" "gosted")
    (command "_.-dimstyle" "_restore" "gosted")
    ) ;_ end of if
  (mapcar 'setvar '("cmdecho" "nomutt") (list _cmdecho_ _nomutt_))
  ) ;_ end of defun

(defun sysvar-set (/ item list_sysvar)
  (setq	list_sysvar
	 '(("aunits" 1)
	   ("lunits" 2)
	   ("auprec" 2)
	   ("luprec" 2)
	   ("dispslih" 1)
	   ("whiparc" 1)
	   )
	) ;_ end of setq
  (foreach item	list_sysvar
    (if	(not (getvar (car item)))
      (setvar (car item) (cadr item))
      ) ;_ end of if
    ) ;_ end of foreach
  ) ;_ end of defun
И все равно лично мне такой подход не очень нравится.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 07.11.2005, 16:26
#8
Владимир М

-
 
Регистрация: 31.07.2005
Ухта
Сообщений: 381
<phrase 1=


Кстате пытался проверить. В редакторе команда set-sysvars выделяет set как отдельную функцию жирным шрифтом - так это как одна команда или нет и как её вызывать!
Лисп загружается успешно. Но надо же поставить шрифт, кроме всяких переменных и установить отделным новым стилем - это как?
Я так думаю все это должно делатся под одной командой.
Владимир М вне форума  
 
Непрочитано 07.11.2005, 16:51
#9
Кулик Алексей aka kpblc
Moderator

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


Ну тут дело в том, что лисп позволяет давать имена вида sysvar-name, т.е. с "-" посередине. А вызов у меня там в autoload показан, кстати: (sysvar-set). Насчет поставить шрифт, установить стиль и прочая - ну либо через (command), либо как по ссылке - через (entmake).
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 08.11.2005, 09:41
#10
Владимир М

-
 
Регистрация: 31.07.2005
Ухта
Сообщений: 381
<phrase 1=


Странно, но в вашем первом коде setvar отказывается работать. Хотелось, чтобы получилось и на вашем коде, но что-то не выходит. Кстати на моем коде все успешно вышло. Надо было всего добавить (COMMAND "_DIMSTYLE""SAVE" "ЕСКД") после этих установок. Еше добавил применяемые линии и слои. Все выглядит так:

Код:
[Выделить все]
(COMMAND ".-STYLE" "gostb" "gostb_pg.shx"
		"0.0"	       ; - высота текста
		"0.8" "15" "N" "N"  )


	(COMMAND  ".-TEXT"  "S" "gostb"  "C"
		pttext   ; - начальная точка
		angtext  ; - угол поворота
		textval  ; - текстовая строка
	)

	(COMMAND "DIMTXSTY" "gostb" "gostb_pg.shx"
		"0.0"	       ; - высота текста
		"0.8" "15" "N" "N"  )


 ; Устанавливаем размерные переменные по ЕСКД
 ; Текст над размерной линией, а не в разрыве
 ( SETVAR "DIMTAD" 1 )
 ; Текст вне размерных линий параллелен линиям
 ( SETVAR "DIMTOH" 0 )
 ; Текст между размерными линиями горизонтален
 ( SETVAR "DIMTIH" 0 )
 ; Проведение линии между выносными, если текст сбоку
 ( SETVAR "DIMTOFL" 1 )
 ; Продолжение выносных линий за размерными, мм
 ( SETVAR "DIMEXE" 2 )
 ; Отключение генерации допусков
 ( SETVAR "DIMTOL" 0 )
 ; Размер стрелок
 ( SETVAR "DIMASZ" 3.5 )
 ; Величина отступа размерной линии в базовых размерах 
 ( SETVAR "DIMDLI" 10 )
 ; Величина смещения выносных линий относительно заданных начальных точек 
 ( SETVAR "DIMEXO" 0 )
 ; Высота размерного текста, если используемый текстовый стиль не имеет фиксированную высоту  
 ( SETVAR "DIMTXT" 3.5 )
 ; Режим вертикальности текста относительно размерной линии   
 ( SETVAR "DIMTAD" 1 )
 ; Высота размерного текста, если используемый текстовый стиль не имеет фиксированную высоту  
 ( SETVAR "DIMTVP" 1 )
 ; Расстояние, оставляемое пустым при изображении размерного текста в разрыве размерной линии   
 ( SETVAR "DIMGAP" 1 )
 ; Режим размещения размерного текста и стрелок, если для того и другого одновременно недостаточно места между выносными линиями 
 ( SETVAR "DIMATFIT" 2 )
 ; Высота букв, предлагаемая по умолчанию для нового однострочного текста 
 ( SETVAR "TEXTSIZE" 3.5 )
 
 (COMMAND "_DIMSTYLE""SAVE" "ЕСКД")

; Устанавливаем линии по ЕСКД
 (setq acln (findfile "acadiso.lin")) 
  (if (eq (tblsearch "LTYPE" "Осевая" ) nil)
      (COMMAND "_LINETYPE" "_l" "Осевая" acln "")
   )

 (setq acln (findfile "acadiso.lin")) 
  (if (eq (tblsearch "LTYPE" "Невидимая" ) nil)
      (COMMAND "_LINETYPE" "_l" "Невидимая" acln "")
   )

 (setq acln (findfile "acadiso.lin")) 
  (if (eq (tblsearch "LTYPE" "Линия_сгиба") nil)
      (COMMAND "_LINETYPE" "_l" "Линия_сгиба" acln "")
   )


 ; Устанавливаем слои по ЕСКД
(command "-layer" "M" "Разомкнутая" "LW" "0.7" "" "C" "6" "" "L" "CONTINUOUS" "" 
                  "M" "Невидимая" "LW" "0.2" "" "c" "1" "" "L" "Невидимая" ""
                  "M" "Осевая" "LW" "0.2" "" "c" "3" "" "L" "Осевая" ""
                  "M" "Сплошная тонкая" "LW" "0.2" "" "C" "5" "" "L" "CONTINUOUS" ""
                  "M" "Сплошная толстая" "LW" "0.5" "" "C" "7" "" "L" "CONTINUOUS" "")
Этот код можно поместить в AutoCAD2005\Support\acad2005doc.lsp после ;; Silent load.
(princ) для авто запуска. И еще надо иметь файл acadiso.lin с кодом этих линий в соответствие с ГОСТ. Так же код с содержимым можно поместить в файл который находится C:\Documents and Settings\Name\Application Data\Autodesk\AutoCAD 2005\R16.1\enu\Support\acadiso.lin, так же в содержимое данного файла. Вот сдесь я его и прекрепляю. Но и шрифт gostb_pg.shx, где можно найти на данном сайте.
Владимир М вне форума  
 
Непрочитано 08.11.2005, 10:11
#11
Кулик Алексей aka kpblc
Moderator

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


Упс, сорри. Ошибочки в коде были:
Код:
[Выделить все]
(defun autoload   (/ _cmdecho_ _nomutt_ font_file)
  (sysvar-set)
  (setq   _cmdecho_ (getvar "cmdecho")
   _nomutt_  (getvar "nomutt")
   ) ;_ end of setq
  (mapcar 'setvar '("cmdecho" "nomutt") '(0 1))
  (if (tblsearch "style" "gostb")  ; Здесь надо просто снести (not и одну закрывающую скобку
    (setvar "textstyle" "gostb")
    (progn
      (if (findfile "gostb_pg.shx")
   (setq font_file (findfile "gostb_pg.shx"))
   (setq font_file "txt.shx")
   ) ;_ end of if
      (command "_.-style" "gostb" font_file 0.0 0.8 15 "_n" "_n" "_n")
      ) ;_ end of progn
    ) ;_ end of if
  (if (not (tblsearch "dimstyle" "gosted"))
    (command "_.-dimstyle" "_save" "gosted")
    (command "_.-dimstyle" "_restore" "gosted")
    ) ;_ end of if
  (mapcar 'setvar '("cmdecho" "nomutt") (list _cmdecho_ _nomutt_))
  (princ)
  ) ;_ end of defun

(defun sysvar-set (/ item list_sysvar)
  (setq   list_sysvar
    '(("aunits" 1)
      ("lunits" 2)
      ("auprec" 2)
      ("luprec" 2)
      ("dispsilh" 1)  ; Здесь были перепутаны символы - dispslih вместо dispsilh
      ("whiparc" 1)
      )
   ) ;_ end of setq
  (foreach item   list_sysvar
    (if   (not (getvar (car item)))
      (setvar (car item) (cadr item))
      ) ;_ end of if
    ) ;_ end of foreach
  ) ;_ end of defun

(autoload)
Код записывается в отдельный файл. При загрузке файла сразу выполняется функция autoload.
Немного странно по Вашему коду: зачем делается (command "_.text")? Да еще и с параметрами, которые на момент выполнения не заданы? Почему команды даются с "_", а опции - без? Оставлю пока за бортом необходимость правки стандартных файлов (*.lin-файлы можно и самому сделать, прописав пути к ним в путях поддержки - это даст гарантию, что, скопировав папку на соседнюю машину (или домой), ничего не будет забыто), но тип линии "Continuous" подгружать не требуется. Номера цветов можно задавать и не строками, а числами. Веса линий - тоже.
Этот код я бы не помещал в acad*doc.lsp - лучше сделать дополнительный lsp, который и засунуть в автозагрузку.
P.S. Смотрим подпись!
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 08.11.2005, 11:29
#12
Владимир М

-
 
Регистрация: 31.07.2005
Ухта
Сообщений: 381
<phrase 1=


Вот теперь получается. Только вот: а где команда DIMTXSTY ? А то размерные шрифты получаются txt.shx, а надо бы под gostb_pg.shx. Или это можно сделать через COMMAND в этом же ЛИСПе. Кстати ваш файл сам не подгружается, хоть и прописан путь через средства\свойства\файлы\Путь_поиска_файла_поддержки. Приходится его каждый раз подгружать через средства\AutoLISP\Открыть. Зачем? Как добавить автозагрузку?
Владимир М вне форума  
 
Непрочитано 08.11.2005, 11:59
#13
Кулик Алексей aka kpblc
Moderator

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


Так я и не говорю о завершенности кода. Дописывать все равно придется. Откуда я могу знать, какие еще тонкости понадобятся? Список системных переменных тоже далеко не полон...
Как добавить в автозагрузку:
_.appload -> Щелкнуть на портфель -> выбрать файл -> нажимать ОК до закрытия всех окон.
Файл будет автоматически загружаться в каждой сессии када независимо от используемого профиля
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 08.11.2005, 12:45
#14
Владимир М

-
 
Регистрация: 31.07.2005
Ухта
Сообщений: 381
<phrase 1=


Через _.appload я попробую, а может через .MNU файл сделать автозагрузку?
Владимир М вне форума  
 
Непрочитано 08.11.2005, 12:49
#15
Кулик Алексей aka kpblc
Moderator

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


Через mnu не получится 100%. Только через mnl (но я с этим не работал, так что подробнее подсказать не смогу).
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 08.11.2005, 18:03
#16
Владимир М

-
 
Регистрация: 31.07.2005
Ухта
Сообщений: 381
<phrase 1=


С автозагрузкой все получилось спасибо – вариант хороший, хотя у меня вариант сразу подгружает без всякой прописки на _.appload и прост в написании. Не знаю кому как нравится, но ваш вариант можно наращивать и может что-то стоящее получится!
Владимир М вне форума  
 
Автор темы   Непрочитано 11.11.2005, 15:48
#17
Владимир М

-
 
Регистрация: 31.07.2005
Ухта
Сообщений: 381
<phrase 1=


Что-то сдесь,kpblc, не верно!

Код:
[Выделить все]
(defun sysvar-set (/ item list_sysvar) 
  (setq   list_sysvar 
    '(("DIMTAD" 1)
      ("DIMTOH" 0)
      ("DIMTIH" 0)
      ("DIMTOFL" 1)
      ("DIMEXE" 2)
      ("DIMTOL" 0)
      ("DIMASZ" 3.5)
      ("DIMDLI" 10)
      ("DIMEXO" 0)
      ("DIMTXT" 3.5)
      ("DIMTAD" 1)
      ("DIMTVP" 1)
      ("DIMATFIT" 2)
      ("TEXTSIZE" 3.5)
    ) 
  ) ;_ end of setq 
  (foreach item   list_sysvar 
    (if   (not (getvar (car item))) 
      (setvar (car item) (cadr item)) 
      ) ;_ end of if 
    ) ;_ end of foreach 
  ) ;_ end of defun
Владимир М вне форума  
 
Непрочитано 11.11.2005, 16:02
#18
Кулик Алексей aka kpblc
Moderator

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


А чего здесь "не так"-то? Код рабочий, а какие переменные и как устанвивать, уж явно не мне определять имхо.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 12.11.2005, 04:26
#19
Владимир М

-
 
Регистрация: 31.07.2005
Ухта
Сообщений: 381
<phrase 1=


А то, загружается он успешно, а вот значения вот не хочет менять. проще поставить много раз SETVAR. К стати мучался я мучался с DIMTXSTY (размерные сделать по gostb в вашем коду так и не получилось) - Помогите пожалуйста, а то я еще новичок, но мне очень нужно!
Владимир М вне форума  
 
Непрочитано 14.11.2005, 09:41
#20
Кулик Алексей aka kpblc
Moderator

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


А перед назначением dimtxsty текстовый стиль уже существует? Я-то в той ссылке сначала создавал текстовый стиль, а потом его уже использовал при работе с размерными стилями.
Цитата:
Сообщение от Владимир М
а вот значения вот не хочет менять
Какие значения не хотят меняться?
Цитата:
Сообщение от Владимир М
проще поставить много раз SETVAR.
Здесь делается то же самое. Только в цикле.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > AutoCAD > Помогите сохранить стиль!