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

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

Замена "стилей размеров" на другие стили.

Ответ
Поиск в этой теме
Непрочитано 20.02.2012, 15:33 #1
Замена "стилей размеров" на другие стили.
Positron
 
Регистрация: 25.06.2009
Сообщений: 147

1. Возникла такая трудность, есть много "старых чертежей" и новых, при копии из "старых чертежей" возникает наложение (смешение) стилей из "старых чертежей" и новых.
2. Каждый стиль имеет свой слой соответственно добавляются ненужные "старые слоя".
Вобщем каша...
Помогите лиспиком плиз...
Чтоб старые стили заменялись новыми и слоя тоже.
Просмотров: 2951
 
Непрочитано 20.02.2012, 16:14
#2
Do$

AutoCAD/Civil3D LISP/C#
 
Регистрация: 15.08.2008
Санкт-Петербург
Сообщений: 1,702
Отправить сообщение для Do$ с помощью Skype™


Цитата:
Сообщение от Positron Посмотреть сообщение
Помогите лиспиком плиз...
Код:
[Выделить все]
 (alert
  (vl-list->string
    '(207
      238
      32
      242
      229
      236
      32
      241
      234
      243
      228
      237
      251
      236
      32
      228
      224
      237
      237
      251
      236
      44
      32
      234
      238
      242
      238
      240
      251
      229
      32
      225
      251
      235
      232
      32
      239
      240
      229
      228
      238
      241
      242
      224
      226
      235
      229
      237
      251
      44
      32
      236
      238
      227
      243
      32
      239
      238
      236
      238
      247
      252
      32
      242
      238
      235
      252
      234
      238
      32
      242
      224
      234
      232
      236
      32
      235
      232
      241
      239
      238
      236
      33
     )
  ) ;_ end of vl-list->string
) ;_ end of alert
Do$ вне форума  
 
Непрочитано 20.02.2012, 19:26
#3
Олег (jr.)

специалист по околачиванию грушевых деревьев
 
Регистрация: 14.09.2004
Pietari, Venäjä
Сообщений: 813


Цитата:
Сообщение от Positron Посмотреть сообщение
1. Возникла такая трудность, есть много "старых чертежей" и новых, при копии из "старых чертежей" возникает наложение (смешение) стилей из "старых чертежей" и новых.
2. Каждый стиль имеет свой слой соответственно добавляются ненужные "старые слоя".
Вобщем каша...
Помогите лиспиком плиз...
Чтоб старые стили заменялись новыми и слоя тоже.
Сначала посмотри команду LAYERMRG чтобы избавиться от ненужных слоёв
Потом можно попробовать
http://autocadtips.wordpress.com/201...mension-style/

Попробуй на копии чертежа:

Код:
[Выделить все]
;;-------------------------------------   fixd.lsp   --------------------------------;;

(defun C:FIXD(/ dimobj ed1 ed2 en en1 en2 filter i layer1 layer2 sset style1 style2)
 (if (and
       (setq en1 (entsel "\nВыбрать размер с \"плохим\" стилем : "))
       (setq en2 (entsel "\nВыбрать размер со стилем на который заменить: "))
     )
   (progn
     (setq ed1 (entget (car en1)))
     (setq style1 (cdr (assoc 3 ed1)))
     (setq layer1 (cdr (assoc 8 ed1)))

     (setq filter (list	(cons 0 "dimension")
			(cons 8 layer1)
			(cons 3 style1)
		  )
     )

     (setq ed2 (entget (car en2)))
     (setq style2 (cdr (assoc 3 ed2)))
     (setq layer2 (cdr (assoc 8 ed2)))
     (setq i 0)

     (if (setq sset (ssget "_X" filter))
       (repeat (sslength sset)

	 (setq en (ssname sset i))
	 (setq dimobj (vlax-ename->vla-object en))
	 (vla-put-stylename dimobj style2)
	 (vla-put-layer dimobj layer2)
	 (setq i (1+ i))
	        )

     )
   )
 )
(princ)
)
(princ "\n\t   ---   Начни с команды \"FIXD\" или \"fixd\"   ---")
(princ)
(vl-load-com)
(princ)
;;-------------------------------------   fixd.lsp--------------------------------;;
~'o'~

Последний раз редактировалось Олег (jr.), 20.02.2012 в 22:19. Причина: добавлен код
Олег (jr.) вне форума  
 
Автор темы   Непрочитано 22.02.2012, 12:50
#4
Positron


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


Цитата:
Сообщение от Олег (jr.) Посмотреть сообщение
Сначала посмотри команду LAYERMRG чтобы избавиться от ненужных слоёв
Потом можно попробовать
http://autocadtips.wordpress.com/201...mension-style/

Попробуй на копии чертежа:

Код:
[Выделить все]
;;-------------------------------------   fixd.lsp   --------------------------------;;

(defun C:FIXD(/ dimobj ed1 ed2 en en1 en2 filter i layer1 layer2 sset style1 style2)
 (if (and
       (setq en1 (entsel "\nВыбрать размер с \"плохим\" стилем : "))
       (setq en2 (entsel "\nВыбрать размер со стилем на который заменить: "))
     )
   (progn
     (setq ed1 (entget (car en1)))
     (setq style1 (cdr (assoc 3 ed1)))
     (setq layer1 (cdr (assoc 8 ed1)))

     (setq filter (list	(cons 0 "dimension")
			(cons 8 layer1)
			(cons 3 style1)
		  )
     )

     (setq ed2 (entget (car en2)))
     (setq style2 (cdr (assoc 3 ed2)))
     (setq layer2 (cdr (assoc 8 ed2)))
     (setq i 0)

     (if (setq sset (ssget "_X" filter))
       (repeat (sslength sset)

	 (setq en (ssname sset i))
	 (setq dimobj (vlax-ename->vla-object en))
	 (vla-put-stylename dimobj style2)
	 (vla-put-layer dimobj layer2)
	 (setq i (1+ i))
	        )

     )
   )
 )
(princ)
)
(princ "\n\t   ---   Начни с команды \"FIXD\" или \"fixd\"   ---")
(princ)
(vl-load-com)
(princ)
;;-------------------------------------   fixd.lsp--------------------------------;;
~'o'~


Спс работает, а возможно сделать чтоб без выбора, а просто как кнопка, я в лиспе сам повбиваю стили и слоя, грубо говоря чтоб был фрагмент в лиспе который я б мог распладить и в каждую копию подписывать свои стили и слоя. В результате нажав кнопку чертёж "каГбы" сам очищался по ранее заданным параметрам в лиспе...
Вот пример "фрагмента":
Цитата:
Сообщение от nik_mb Посмотреть сообщение
Просто. Вставить такой кусок кода вместо написанного:
Код:
[Выделить все]
(defun cmd-start (react	cmd / selset   cmd_name ent
		  svr res tag text index _attreq_  _attdia_
		  )
  (setq cmd_name (strcase (car cmd) t))
(setq *dim_style* (strcase (getvar "dimstyle")));;ДОБАВИТЬ ЭТУ СТРОКУ
;; для определения текущего размерного стиля
(cond
 ((vl-string-search "dim" cmd_name)
  (setq *vlr-settings*
	(list (cons "layer"
		    (vla-get-activelayer *kpblc-activedoc*)
		    ) ;_ end of cons
  	(cons "color" (getvar "cecolor"))
	(cons "lw" (getvar "celweight"))
	(cons "lt" (getvar "celtype")) ) ;_ end of list
	   ) ;_ end of setq
;;НАЧАЛО ВСТАВКИ. "DIM_ONE", "DIM_TWO" и "DIM_THREE" - имеющиеся размерные стили
(cond
((= *dim_style* "DIM_ONE") ;; для первого стиля размеров, писать всеми заглавными
 (vla-put-activelayer *kpblc-activedoc*
   (_kpblc-layer-create
     '(("name" . "Размеры_one");;Имя слоя для первого стиля размеров "dim_one"
       ("color" . 140)
       ("lw" . 20) )
     )
   )
 )
((= *dim_style* "DIM_TWO") ;; для второго стиля
 (vla-put-activelayer *kpblc-activedoc*
   (_kpblc-layer-create
     '(("name" . "Размеры_two")
       ("color" . 140)
       ("lw" . 20)
       )
     )
   )
 )
((= *dim_style* "DIM_THREE") ;; и еще для одного
 (vla-put-activelayer *kpblc-activedoc*
   (_kpblc-layer-create
     '(("name" . "Размеры_three")
       ("color" . 140)
       ("lw" . 20)
       )
     )
   )
 )
;; и т.д и т.п. сколько есть стилей
);;cond 
;; КОНЕЦ ВСТАВКИ
 (mapcar 'setvar
	 '("cecolor" "celweight" "celtype")
	 '("bylayer" -1 "bylayer")
	 ) ;_ end of mapcar
...
Positron вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Замена "стилей размеров" на другие стили.

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

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