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

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

Команда или макрос для выделения в файле только текста

Ответ
Поиск в этой теме
Непрочитано 29.08.2007, 13:20
Команда или макрос для выделения в файле только текста
ct_ycte
 
Россия
Регистрация: 29.08.2007
Сообщений: 28

Команда или макрос для выделения в файле только текста.
За ранее спасибо!!!
Просмотров: 10236
 
Автор темы   Непрочитано 02.09.2007, 22:21
#41
ct_ycte


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


Кулик Алексей->
Привет!!!
Да ты тут много что переписал, но если честно меня в полне устраивал предпоследний вариант (он указан ниже).
Только вот если шрифт был TTF то он почему то не менялся на шрифт текущего стиля SHX.
Вот я и подумал что можно добавить пару строк в этот код чтоб шрифт как и высота прописывался статичечки.
Сам пытаюсь найти команды необходимые, пока безрезультатно
Очень тебе благодарен за помощь!!!

Код:
[Выделить все]
(defun c:cts2 (/                   *error*             adoc 
               layer_lst           text_style          loc:layer-status-save 
               loc:layer-status-restore 
               ) 

  (defun *error* (msg) 
    (loc:layer-status-restore) 
    (vla-endundomark adoc) 
    (princ msg) 
    (princ) 
    ) ;_ end of defun 

  (defun loc:layer-status-restore () 
    (foreach item layer_lst 
      (if (not (vlax-erased-p (car item))) 
        (vl-catch-all-apply 
          '(lambda () 
             (vla-put-lock (car item) (cdr (assoc "lock" item))) 
             (vla-put-freeze (car item) (cdr (assoc "freeze" item))) 
             ) ;_ end of lambda 
          ) ;_ end of vl-catch-all-apply 
        ) ;_ end of if 
      ) ;_ end of foreach 
    ) ;_ end of defun 

  (defun loc:layer-status-save () 
    (vlax-for item (vla-get-layers adoc) 
      (setq layer_lst (cons (list item 
                                  (cons "freeze" (vla-get-freeze item)) 
                                  (cons "lock" (vla-get-lock item)) 
                                  ) ;_ end of cons 
                            layer_lst 
                            ) ;_ end of cons 
            ) ;_ end of setq 
      (vla-put-lock item :vlax-false) 
      (vl-catch-all-apply '(lambda () (vla-put-freeze item :vlax-false))) 
      ) ;_ end of vlax-for 
    ) ;_ end of defun 

  (vl-load-com) 
  (vla-startundomark 
    (setq adoc (vla-get-activedocument (vlax-get-acad-object))) 
    ) ;_ end of vla-startundomark 
  (loc:layer-status-save) 
  (setq text_style (vla-get-name (vla-get-activetextstyle adoc))) 
  (vlax-for blk_def (vla-get-blocks adoc) 
    (vlax-for subent blk_def 
      (cond 
        ((wcmatch (strcase (vla-get-objectname subent) t) "*dimen*") 
         (vla-put-textstyle subent text_style) 
         ) 
        ((wcmatch (strcase (vla-get-objectname subent) t) "*text*,*attrib*") 
         (vla-put-stylename subent text_style) 
         ) 
        ((wcmatch (strcase (vla-get-objectname subent) t) "*blockref*") 
         (if (not (minusp (vlax-safearray-get-u-bound 
                            (vlax-variant-value (vla-getattributes subent)) 
                            1 
                            ) ;_ end of vlax-safearray-get-u-bound 
                          ) ;_ end of minusp 
                  ) ;_ end of not 
           (foreach attr (vlax-safearray->list 
                           (vlax-variant-value (vla-getattributes subent)) 
                           ) ;_ end of vlax-safearray->list 
             (vla-put-stylename attr text_style) 
             ) ;_ end of foreach 
           ) ;_ end of if 
         (if 
           (not (minusp (vlax-safearray-get-u-bound 
                          (vlax-variant-value (vla-getconstantattributes subent)) 
                          1 
                          ) ;_ end of vlax-safearray-get-u-bound 
                        ) ;_ end of minusp 
                ) ;_ end of not 
            (foreach attr 
                     (vlax-safearray->list 
                       (vlax-variant-value (vla-getconstantattributes subent)) 
                       ) ;_ end of vlax-safearray->list 
              (vla-put-stylename attr text_style) 
              ) ;_ end of foreach 
            ) ;_ end of if 
         ) 
        ) ;_ end of cond 
      ) ;_ end of vlax-for 
    ) ;_ end of vlax-for 
  (loc:layer-status-restore) 
  (vla-regen adoc acallviewports) 
  (vla-endundomark adoc) 
  (princ) 
  ) ;_ end of defun
ct_ycte вне форума  
 
Непрочитано 03.09.2007, 00:10
#42
Кулик Алексей aka kpblc
Moderator

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


Ну на самом деле очень мало - если код проанализировать, будет понятно, что много места занимает элементарные вещи - выбор стиля и ввод высоты текста.
А твоя проблема на самом деле намного глубже: в многострочных текстах (прямо внутри каждого объекта) может болтаться собственное форматирование (фонт, наклон текста, высота текста и т.п.). Для этого несколько лиспов болтались. Поиск по "форматир многостр текст" вывел на топики http://dwg.ru/forum/viewtopic.php?p=97727#97727 и http://dwg.ru/forum/viewtopic.php?p=107607#107607 , но какой код там "более рабочий" - сейчас сообразить не могу (второй литр пива все же сказывается).
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 03.09.2007, 13:24
#43
ct_ycte


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


Привет!!! снова я.

Спасибо тебе!!! Вроде нашол подходящую програмку для сброса форматирования многострочного текста.
Алгоритм теперь такой:
Сначала той прогой сбрасываю форматирование
потом прогой (приведена ниже) устанавливаю форматироваание которое необходимо.
Проблема: угол наклона не устанавливается, хотя в текстовом стиле он 15 градусов.
Может его как и высоту статически прописать. И тогда все будет хорошо.
Вся надежда только на тебя!!!

Код:
[Выделить все]
(defun c:cts3 (/                   *error*             adoc 
               layer_lst           text_style          loc:layer-status-save 
               loc:layer-status-restore 
               ) 

  (defun *error* (msg) 
    (loc:layer-status-restore) 
    (vla-endundomark adoc) 
    (princ msg) 
    (princ) 
    ) ;_ end of defun 

  (defun loc:layer-status-restore () 
    (foreach item layer_lst 
      (if (not (vlax-erased-p (car item))) 
        (vl-catch-all-apply 
          '(lambda () 
             (vla-put-lock (car item) (cdr (assoc "lock" item))) 
             (vla-put-freeze (car item) (cdr (assoc "freeze" item))) 
             ) ;_ end of lambda 
          ) ;_ end of vl-catch-all-apply 
        ) ;_ end of if 
      ) ;_ end of foreach 
    ) ;_ end of defun 

  (defun loc:layer-status-save () 
    (vlax-for item (vla-get-layers adoc) 
      (setq layer_lst (cons (list item 
                                  (cons "freeze" (vla-get-freeze item)) 
                                  (cons "lock" (vla-get-lock item)) 
                                  ) ;_ end of cons 
                            layer_lst 
                            ) ;_ end of cons 
            ) ;_ end of setq 
      (vla-put-lock item :vlax-false) 
      (vl-catch-all-apply '(lambda () (vla-put-freeze item :vlax-false))) 
      ) ;_ end of vlax-for 
    ) ;_ end of defun 

  (vl-load-com) 
  (vla-startundomark 
    (setq adoc (vla-get-activedocument (vlax-get-acad-object))) 
    ) ;_ end of vla-startundomark 
  (loc:layer-status-save) 
  (setq text_style (vla-get-name (vla-get-activetextstyle adoc))) 
  (vlax-for blk_def (vla-get-blocks adoc) 
    (vlax-for subent blk_def 
      ; Íàçíà÷åíèå âûñîòû òåêñòà â 2,5 åäèíèöû ÷åðòåæà 
      (vl-catch-all-apply '(lambda () (vla-put-height subent 2.5))) 
      (cond 
        ((wcmatch (strcase (vla-get-objectname subent) t) "*dimen*") 
         (vla-put-textstyle subent text_style) 
         ) 
        ((wcmatch (strcase (vla-get-objectname subent) t) "*mtext*") 
         (vla-put-stylename subent text_style) 
         (vla-put-width subent 0) ; íàçíà÷åíèå øèðèíû ìíîãîñòðî÷íîãî òåêñòà 
         ) 
        ((wcmatch (strcase (vla-get-objectname subent) t) "*text*,*attrib*") 
         (vla-put-stylename subent text_style) 
         ) 
        ((wcmatch (strcase (vla-get-objectname subent) t) "*blockref*") 
         (if (not (minusp (vlax-safearray-get-u-bound 
                            (vlax-variant-value (vla-getattributes subent)) 
                            1 
                            ) ;_ end of vlax-safearray-get-u-bound 
                          ) ;_ end of minusp 
                  ) ;_ end of not 
           (foreach attr (vlax-safearray->list 
                           (vlax-variant-value (vla-getattributes subent)) 
                           ) ;_ end of vlax-safearray->list 
             (vla-put-stylename attr text_style) 
             ) ;_ end of foreach 
           ) ;_ end of if 
         (if 
           (not (minusp (vlax-safearray-get-u-bound 
                          (vlax-variant-value (vla-getconstantattributes subent)) 
                          1 
                          ) ;_ end of vlax-safearray-get-u-bound 
                        ) ;_ end of minusp 
                ) ;_ end of not 
            (foreach attr 
                     (vlax-safearray->list 
                       (vlax-variant-value (vla-getconstantattributes subent)) 
                       ) ;_ end of vlax-safearray->list 
              (vla-put-stylename attr text_style) 
              ) ;_ end of foreach 
            ) ;_ end of if 
         ) 
        ) ;_ end of cond 
      ) ;_ end of vlax-for 
    ) ;_ end of vlax-for 
  (loc:layer-status-restore) 
  (vla-regen adoc acallviewports) 
  (vla-endundomark adoc) 
  (princ) 
  ) ;_ end of defun
---
Используй тэги [code] и [/code], вычленить лисп иначе тяжко. kpblc
ct_ycte вне форума  
 
Непрочитано 03.09.2007, 13:33
#44
Кулик Алексей aka kpblc
Moderator

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


Попробую вечером, сейчас шансов нуль
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 03.09.2007, 13:40
#45
ct_ycte


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


Хорошо! Буду ждать!!! Выздоравливай!!!
ct_ycte вне форума  
 
Непрочитано 03.09.2007, 14:23
#46
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,996


>ct_ycte Пробуй это
Код:
[Выделить все]
(defun c:cts6 (/                   *error*             adoc 
               layer_lst           text_style          loc:layer-status-save 
               loc:layer-status-restore loc:DTR
               loc:mip_MTEXT_Unformat
               textH ;_Высота текста
               textA ;_Угол наклона в градусах
               textW ;_Степень сжатия/растяжения
               ) 

  (defun *error* (msg) 
    (loc:layer-status-restore) 
    (vla-endundomark adoc) 
    (princ msg) 
    (princ) 
    ) ;_ end of defun 
(defun loc:DTR (a)(* pi (/ a 180.0)))
  (defun loc:layer-status-restore () 
    (foreach item layer_lst 
      (if (not (vlax-erased-p (car item))) 
        (vl-catch-all-apply 
          '(lambda () 
             (vla-put-lock (car item) (cdr (assoc "lock" (cdr item)))) 
             (vla-put-freeze (car item) (cdr (assoc "freeze" (cdr item))))
             ) ;_ end of lambda 
          ) ;_ end of vl-catch-all-apply 
        ) ;_ end of if 
      ) ;_ end of foreach
    (setq layer_lst nil)
    ) ;_ end of defun 

  (defun loc:layer-status-save () 
    (vlax-for item (vla-get-layers adoc) 
      (setq layer_lst (cons (list item 
                                  (cons "freeze" (vla-get-freeze item)) 
                                  (cons "lock" (vla-get-lock item)) 
                                  ) ;_ end of cons 
                            layer_lst 
                            ) ;_ end of cons 
            ) ;_ end of setq 
      (vla-put-lock item :vlax-false) 
      (vl-catch-all-apply '(lambda () (vla-put-freeze item :vlax-false))) 
      ) ;_ end of vlax-for 
    ) ;_ end of defun 
(defun loc:mip_MTEXT_Unformat ( Mtext / text Str )
  (setq Text "")
   (while (/= Mtext "")
        (cond
          ((wcmatch (strcase (setq Str (substr Mtext 1 2))) "\\[\\{}]")
            (setq Mtext (substr Mtext 3) Text   (strcat Text Str)))
          ((wcmatch (substr Mtext 1 1) "[{}]")(setq Mtext (substr Mtext 2)))
          ((wcmatch (strcase (setq Str (substr Mtext 1 2))) "\\[LO`~]")
	   (setq Mtext (substr Mtext 3)))
          ((wcmatch (strcase (substr Mtext 1 2)) "\\[ACFHQTW]")
            (setq Mtext (substr Mtext (+ 2 (vl-string-search ";" Mtext)))))
          ((wcmatch (strcase (substr Mtext 1 2)) "\\P")
            (if (or(= " " (substr Text (strlen Text)))
		   (= " " (substr Mtext 3 1)))
               (setq Mtext (substr Mtext 3))
               (setq Mtext (substr Mtext 3) Text (strcat Text " "))))
	  ((wcmatch (strcase (substr Mtext 1 2)) "\\S")
            (setq Str   (substr Mtext 3 (- (vl-string-search ";" Mtext) 2))
                  Text  (strcat Text (vl-string-translate "#^\\" "/^\\" Str))
                  Mtext (substr Mtext (+ 4 (strlen Str)))))
	  (t (setq Text (strcat Text (substr Mtext 1 1)) Mtext (substr Mtext 2)))
	  ))
  Text
  )
  (vl-load-com) 
  (vla-startundomark 
    (setq adoc (vla-get-activedocument (vlax-get-acad-object))) 
    ) ;_ end of vla-startundomark
  (setq textH 2.5 ;_Высота текста
        textA 15  ;_Угол наклона в градусах
        textW 1   ;_Степень сжатия/растяжения
        )
  (loc:layer-status-save) 
  (setq text_style (vla-get-name (vla-get-activetextstyle adoc))) 
  (vlax-for blk_def (vla-get-blocks adoc)
    (vlax-for subent blk_def
      (cond 
        ((wcmatch (strcase (vla-get-objectname subent) t) "*dimen*") 
         (vla-put-textstyle subent text_style) 
         ) 
        ((wcmatch (strcase (vla-get-objectname subent) t) "*mtext*")
         (vla-put-TextString subent
           (strcat "{\\Q"(rtos textA 2 1)";" "\\W"(rtos textW 2 1)";"    
           (loc:mip_MTEXT_Unformat (vla-get-TextString subent))
                   "}"
                   )
           )
         (vla-put-stylename subent text_style) 
         (vla-put-width subent 0) ; iacia?aiea oe?eiu iiiaino?i?iiai oaenoa 
         ) 
        ((wcmatch (strcase (vla-get-objectname subent) t) "*text*,*attrib*") 
         (vla-put-stylename subent text_style) 
         ) 
        ((wcmatch (strcase (vla-get-objectname subent) t) "*blockref*") 
         (if (not (minusp (vlax-safearray-get-u-bound 
                            (vlax-variant-value (vla-getattributes subent)) 
                            1 
                            ) ;_ end of vlax-safearray-get-u-bound 
                          ) ;_ end of minusp 
                  ) ;_ end of not 
           (foreach attr (vlax-safearray->list 
                           (vlax-variant-value (vla-getattributes subent)) 
                           ) ;_ end of vlax-safearray->list 
             (vla-put-stylename attr text_style) 
             ) ;_ end of foreach 
           ) ;_ end of if 
         (if 
           (not (minusp (vlax-safearray-get-u-bound 
                          (vlax-variant-value (vla-getconstantattributes subent)) 
                          1 
                          ) ;_ end of vlax-safearray-get-u-bound 
                        ) ;_ end of minusp 
                ) ;_ end of not 
            (foreach attr 
                     (vlax-safearray->list 
                       (vlax-variant-value (vla-getconstantattributes subent)) 
                       ) ;_ end of vlax-safearray->list 
              (vla-put-stylename attr text_style) 
              ) ;_ end of foreach 
            ) ;_ end of if 
         ) 
        ) ;_ end of cond
      (vl-catch-all-apply '(lambda ()
        (if (and (vlax-property-available-p subent "Height") 
       (> textH 1e-3))(vla-put-Height subent textH)) 
   (if (vlax-property-available-p subent "ScaleFactor") 
     (vla-put-ScaleFactor subent textW)) 
   (if (vlax-property-available-p subent "ObliqueAngle") 
     (vla-put-ObliqueAngle subent (loc:DTR textA)))))
      ) ;_ end of vlax-for 
    ) ;_ end of vlax-for 
  (loc:layer-status-restore) 
  (vla-regen adoc acallviewports) 
  (vla-endundomark adoc) 
  (princ) 
  ) ;_ end of defun
Форматирование предварительно сносить не нужно, сносится внутри.
Для мтекста угол наклона и степень сжатия задаются тэгами.
Все данные задаются явно. Ищи в тексте
Код:
[Выделить все]
(setq textH 2.5 ;_Высота текста
        textA 15  ;_Угол наклона в градусах
        textW 1   ;_Степень сжатия/растяжения
        )
Стиль назначается текущий
VVA вне форума  
 
Автор темы   Непрочитано 06.09.2007, 15:07
#47
ct_ycte


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


Спасибо вам ребята!!!
Благодаря вам решение нашлось!!!
ct_ycte вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Команда или макрос для выделения в файле только текста

Опции темы Поиск в этой теме
Поиск в этой теме:

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