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

Вернуться   Форум DWG.RU > Программное обеспечение > AutoCAD > Mеждустрочное расстояние в MTEXT

Mеждустрочное расстояние в MTEXT

Ответ
Поиск в этой теме
Непрочитано 16.07.2010, 06:09 #1
Mеждустрочное расстояние в MTEXT
Vova
 
Engineer
 
New-York
Регистрация: 05.09.2003
Сообщений: 10,288

Великовато оно. Тексты занимают много места, особенно это заметно когда тексты рсположены на поле чертежа. Сократить можно в редакторе Mtext, нажав на Line spacing, и там еще несколько кликов. Для многострочных атрибутов регулировок вообще нет, из-за чего я ими редко пользуюсь. Переменной, отвечающей за просвет, не нашел.
Вопрос к программистам: можно-ли сделать расстояния между строками регулируемым при редактировании текстов и атрибутов?
Просмотров: 18331
 
Непрочитано 16.07.2010, 10:28
#2
vrtm

рисование
 
Регистрация: 19.02.2009
Сообщений: 212
<phrase 1=


Vova
Для многострочных атрибутов можно вывести панель редактирвоания Мтекста, только переменную надо одну поменять - щас поищу название.

А строки простого МТЕКСТА я сжимаю без большого количества щелчков. У меня панель свойств всегда видна.
P.S. Сам тут пару дней назад нашел информацию на форуме о межстрочном интервале атрибутов .
===
Воть - http://forum.dwg.ru/showpost.php?p=466809&postcount=42
Правда в случае с атрибутами придется делать много кликов.

Последний раз редактировалось vrtm, 16.07.2010 в 10:36.
vrtm вне форума  
 
Непрочитано 19.07.2010, 19:50
2 | #3
VVA

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


Цитата:
Сообщение от Vova Посмотреть сообщение
Вопрос к программистам: можно-ли сделать расстояния между строками регулируемым при редактировании текстов и атрибутов?
Пробуй. Должен менять межстрочный интервал (line spacing) в мтекстах, и многострочных атрибутах (ATTDEF и ATTRIB). Должен корректно обрабатывать поля в атрибутах. Не обрабатывает пока формулы в многострочных атрибутах.
Код:
[Выделить все]
(defun C:MTLS ( / ss i lst mtext ls *LS*)
;;; MText Line Spacing
;;; Изменить межстрочный интервал мтекста и многострочных аттрибутов
;;; Change Line Spacing
;;; http://forum.dwg.ru/showthread.php?t=54857
;;; Измените значение системной переменной ATTIPE на 1 и будет
;;; в редакторе многострочных атрибутов полноценный вариант редактора  
  (vl-load-com)
  (if (zerop
      (setq
        *LS* (abs
               (atof (vl-princ-to-string (getcfg "AppData/MTEXTLS/LS")))
             ) ;_ end of abs
      ) ;_ end of setq
    ) ;_ end of zerop
  (setq *LS* 1)
) ;_ end of if
  (if (and
        (progn
          (initget 6)
          (princ "\nEnter line spasing value <")
          (princ *LS*)
          (princ ">: ")
          (if (setq ls (getreal))
            (progn
              (setq *LS* ls)
              (setcfg "AppData/MTEXTLS/LS" (rtos *LS* 2 2))
              )
            (setq ls *LS*)
            )
        )
        (setq lst nil ss (ssget "_:L" '((0 . "MTEXT,ATTDEF,INSERT,MULTILEADER"))))
        (repeat (setq i (sslength ss)) ;_ end setq
         (setq lst (cons (ssname ss (setq i (1- i))) lst))
         ) ;_ en
        )
    (progn
      (setq ss nil)
      (foreach itm lst
        (if (and itm (setq itm (vlax-ename->vla-object itm))
           (vlax-property-available-p itm 'Hasattributes)
	   (eq :vlax-true (vla-get-HasAttributes itm))
                 )
          (setq ss (append ss
                           (mapcar 'vlax-vla-object->ename
                           (append (vlax-invoke itm 'Getattributes)(vlax-invoke itm 'Getconstantattributes))
                                   )
                           )
                )
		  )
        )
      (setq lst (append lst ss))
      (foreach itm lst (mtext-paragraph ls nil itm))
    )
    )
  (princ)
)
(defun mtext-paragraph (value abz obj / ss i mtext ent pat)
;;; MText Line Spacing
;;; Изменить межстрочный интервал мтекста и многострочных аттрибутов
;;; Change Line Spacing
;;; http://forum.dwg.ru/showthread.php?t=54857
;;; Измените значение системной переменной ATTIPE на 1 и будет
;;; в редакторе многострочных атрибутов полноценный вариант редактора
;;; value - значение междустрочного интервала параграфа ( положительное - форматирование \\pxse, отрицательное - форматирование \\pxsm ) или nil - нет
;;; abz - значение абзаца (форматирование \\pxa ) или nil - нет
  (vl-load-com)
  ;;(setq value (rtos value 2 5))
  (setq pat (strcat "\\px"
                              (if abz (strcat "a"(VL-STRING-RIGHT-TRIM "0" (mip-conv-to-str abz))",") "")
                              "se" (VL-STRING-RIGHT-TRIM "0" (mip-conv-to-str value))";"))
  (if (= (type obj) 'ENAME)(setq obj (vlax-ename->vla-object obj)))
  (setq ent (vlax-vla-object->ename obj))
  (if (and (vlax-write-enabled-p obj)
        (vlax-property-available-p obj 'Textstring)
                 (or (not (vlax-property-available-p obj 'MTextAttribute))
                     (and (vlax-property-available-p obj 'MTextAttribute)
                          (eq (vla-get-MTextAttribute obj) :vlax-true)
                          )
                     )
                 )
          (progn
            (setq mtext (bg:FieldCode ent))
            (if (not(setq i (vl-string-search "\\PX" (strcase mtext))))
              (setq i 0)
              )
            (if (wcmatch (strcase (substr mtext (1+ i) 3)) "\\PX")  ;;;абзац и междустрочный интервал \\PX[QITSBA]
              (setq mtext
                  (strcat (if (not (zerop i))(substr mtext 1 i) "")
                  pat  
                  (substr mtext (+ 2 (vl-string-search ";" mtext i))))
                    )
              (setq mtext (strcat pat mtext))
              )
            (vla-put-TextString obj mtext)
            (if (isFieldAvailable obj)
              (progn
                (vl-cmdf "_.updatefield" ent "")
                (entupd ent)
                )
              )
            )
        )
  )
(defun bg:FieldCode (ent / foo elst xdict dict field str)
  ;; credits gile gc:FieldCode
  (defun foo (field str / pos fldID objID)
    (setq pos 0)
    (if (setq pos (vl-string-search "\\_FldIdx " str pos))
      (while (setq pos (vl-string-search "\\_FldIdx " str pos))
        (setq fldId (entget (cdr (assoc 360 field)))
              field (vl-remove (assoc 360 field) field)
              str   (strcat
                      (substr str 1 pos)
                      (if (setq objID (cdr (assoc 331 fldId)))
                        (vl-string-subst
                          (strcat "ObjId " (itoa (gc:EnameToObjectId objID)))
                          "ObjIdx"
                          (cdr (assoc 2 fldId))
                        )
                        (foo fldId (cdr (assoc 2 fldId)))
                      )
                      (substr str (1+ (vl-string-search ">%" str pos)))
                    )
        )
      )
      str
    )
  )
      ;; gc:EnameToObjectId (gile)
;; Returns the ObjectID from an ename
;;
;; Argument : an ename

(defun gc:EnameToObjectId (ename)
  ;; credits gile
  ((lambda (str)
     (hex2dec
       (substr (vl-string-right-trim ">" str) (+ 3 (vl-string-search ":" str)))
     )
   )
    (vl-princ-to-string ename)
  )
)
    ;;============================================================;;

;; hex2dec (gile)
;; convert an hexadecimal into a decimal (int)
;;
;; Argument : un hexadedimal (string)

(defun hex2dec (s / r l n)
  (setq	r 0 l (vl-string->list (strcase s)))
  (while (setq n (car l))
    (setq l (cdr l)
          r (+ (* r 16) (- n (if (<= n 57) 48 55)))
    )
  )
)
  ;;--------------------------------------------------------;;
  
  (setq elst (entget ent))
  (if (vlax-property-available-p (vlax-ename->vla-object ent) 'Textstring)
    (cond ((= (cdr(assoc 0 elst)) "MULTILEADER")
           (setq str (cdr(assoc 304 elst)))
           )
          ((and ;;; MTEXT ATTRIB ADD VVA 2011-20-27
             (member (cdr(assoc 0 elst)) '("ATTRIB"))
             (member '(101 . "Embedded Object") elst)
             )
           (setq str (apply 'strcat (append (bg:massoc 3 elst)(bg:massoc 1 (member '(101 . "Embedded Object") elst)))))
           )
          
          ((member (cdr(assoc 0 elst)) '("TEXT" "MTEXT" "ATTRIB"))
           (setq str (apply 'strcat (append (bg:massoc 3 elst)(bg:massoc 1 elst))))
           )
          (t (setq str (vla-get-TextString (vlax-ename->vla-object ent))))
    )
    )
  (if (and
	(member (cdr (assoc 0 elst)) '("ATTRIB" "MTEXT" "TEXT" "MULTILEADER"))
	(setq xdict (cdr (assoc 360 elst)))
	(setq dict (dictsearch xdict "ACAD_FIELD"))
	(setq field (dictsearch (cdr (assoc -1 dict)) "TEXT"))
      )
    (setq str (foo field (cdr (assoc 2 field))))
  )
    str
)
(defun isFieldAvailable ( obj  / fc )
  (if (= (type obj) 'ENAME)
      (setq obj (vlax-ename->vla-object obj))
    )
  (and
    (setq fc (vla-GetExtensionDictionary  obj))
    (setq fc (vlax-vla-object->ename fc))
    (dictsearch fc "ACAD_FIELD")
    )
 )
(defun mip-conv-to-str (dat)
      (cond ((= (type dat) 'INT) (setq dat (itoa dat)))
            ((= (type dat) 'REAL) (setq dat (rtos dat 2 12)))
            ((null dat) (setq dat ""))
            (t (setq dat (vl-princ-to-string dat)))
      ) ;_ end of cond
    ) ;_ end of def
;|  ! ***************************************************************************
;; !                           bg:massoc
;; ! ***************************************************************************
;; ! Function : Utility function to get multiple group code
                Возвращает все вхождения ключа в списке
;; ! Argument : 'key'     - The DXF code to check / DXF код
;; !            'alist' -    The List to check  / Список
;; ! Returns  : The value of the DXF dotted pair, if it exists else returns nil
                Значение точечной пары, если есть или nil
;; ! ****************************************************************************|;
;;; Utility function to get multiple group code CDRs
(defun bg:massoc (key alist)
  (mapcar 'cdr (vl-remove-if-not (function (lambda (x) (= key (car x)))) alist)))
__________________
Как использовать код на Лиспе читаем здесь

Последний раз редактировалось VVA, 07.04.2012 в 22:45. Причина: bg:massoc
VVA вне форума  
 
Автор темы   Непрочитано 21.07.2010, 14:08
1 | #4
Vova

Engineer
 
Регистрация: 05.09.2003
New-York
Сообщений: 10,288


Спасибо, как за это
Цитата:
Измените значение системной переменной ATTIPE на 1 и будет в редакторе многострочных атрибутов полноценный вариант редактора
(оно пригодится многим) так и за лисп. Он хорошо работает. Можно-ли сделать так, чтобы по-умолчанию выдавалось предыдущее настроенное расстояние, а не каждый раз новое?
Vova вне форума  
 
Автор темы   Непрочитано 25.07.2010, 03:16
#5
Vova

Engineer
 
Регистрация: 05.09.2003
New-York
Сообщений: 10,288


Тема не вызвала интереса. Рискну предположить что вы не делаете столь плотных чертежей, в которых-бы потребовалось ужимать текст. Mtext более разлапистый чем Dtext. Но если текста по нескольку строк при использовании Dtext и при команде Move и др запросто можно потерять строку. Mtext как-бы блок, и с ним надежнее. Лисп от VVA делает Mtext таким-же сжатым как и Dtext.
Привожу в пример чертеж, в котором без сжатого Mtext-a было-бы трудно.
Заодно здесь демонстрация работы с ВЭ. Я дам сюда ссылку из другой темы, где этот вопрос обсуждается, если возникнет желание обсудить ВЭ, то сюда
http://forum.dwg.ru/showthread.php?t=24058
Вложения
Тип файла: dwg
DWG 2007
FA-R-f.dwg (1.06 Мб, 4245 просмотров)
Vova вне форума  
 
Непрочитано 26.07.2010, 09:03
#6
vrtm

рисование
 
Регистрация: 19.02.2009
Сообщений: 212
<phrase 1=


Vova, про то что, можно со столбцами работать (маркеры) - не знал. Спасибо, потыкаю, поизучаю.
Цитата:
Можно-ли сделать так, чтобы по-умолчанию выдавалось предыдущее настроенное расстояние, а не каждый раз новое?
Думаю нет. Только копированием отформатированного мтекста.
По поводу ВЭ: Меня бы заставили из такого одного файла сделать 13 файлов (по числу вкладок)
vrtm вне форума  
 
Непрочитано 26.07.2010, 12:05
#7
atollon


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


Цитата:
Сообщение от vrtm Посмотреть сообщение
По поводу ВЭ: Меня бы заставили из такого одного файла сделать 13 файлов (по числу вкладок)
Сатрапы, варвары, ...
А "экранное меню" не заставляют Вкл/использовать, а также Лимиты, Сетку, Шаг и Орто, ну и чертить в "масштабе"?
__________________
Толстов Евгений
atollon вне форума  
 
Автор темы   Непрочитано 26.07.2010, 14:19
#8
Vova

Engineer
 
Регистрация: 05.09.2003
New-York
Сообщений: 10,288


Цитата:
Сообщение от vrtm Посмотреть сообщение
По поводу ВЭ: Меня бы заставили из такого одного файла сделать 13 файлов (по числу вкладок)
Не заставили-бы. Здесь и ежу ясно, что иначе схема-бы не читалась в модели, и любая вертикальная связь, новая или измененная старая, привела-бы к большим трудозатратам
Vova вне форума  
 
Непрочитано 26.07.2010, 15:01
#9
vrtm

рисование
 
Регистрация: 19.02.2009
Сообщений: 212
<phrase 1=


Цитата:
Сообщение от atollon Посмотреть сообщение
Сатрапы, варвары, ...
А "экранное меню" не заставляют Вкл/использовать, а также Лимиты, Сетку, Шаг и Орто, ну и чертить в "масштабе"?
В "масштабе" нет; сетка/шаг/орто нет. Могут по поводу привязки придраться или если линии не параллельны.
Заставляют пользоваться СПДСовской рамкой, таблицами... А также при выводе на печать отображать границу листа - будь то А4, А3, А2.... И пофиг что А3/А4 я печатаю на А3/А4 принтере
А еще есть общая база основных "суперблоков" - чуть ли ни каждая черточка/буковка засунута в блок

Vova, смотрю твой пример. Да, небольших текстовых объектов много (можно сделать еще меньше объектов - см. приложение). Почему ты использовал межстрочное сжатие мне тоже непонятно - можно же шрифт поменьше взять - "там" это не карается вроде.
Зачем ты сделал "динамические столбцы" (маркеры у текста) я так и не понял? - поясни чем они удобны
По поводу больших трудозатрат - в моем случае народу побарабану, работают как привыкли. Ибо руководство лучше нас знает как должно быть. А аргументируя я "трудозатратами и сложность", ответ был бы "ну чтож....". Автокадовскую таблицу однажды использовал - так сказали забыть про нее, т.к. "не редактируется" она.
Вложения
Тип файла: dwg
DWG 2007
FA-R-f-2.dwg (131.3 Кб, 4044 просмотров)

Последний раз редактировалось vrtm, 26.07.2010 в 15:08.
vrtm вне форума  
 
Автор темы   Непрочитано 26.07.2010, 16:41
#10
Vova

Engineer
 
Регистрация: 05.09.2003
New-York
Сообщений: 10,288


Текст и так сделан немного меньше, чем обычно делается в таком масштабе. Уменьшать далее значит делать его плохо читабельным для лудей с не очень острым зрением.
Чертеж твой открою дома.
У вас в конторе какие-то драконовские ограничения на автокад, хорошо это или плохо? Скорее, плохо
Vova вне форума  
 
Непрочитано 26.07.2010, 20:02
#11
VVA

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


Цитата:
Сообщение от Vova Посмотреть сообщение
Можно-ли сделать так, чтобы по-умолчанию выдавалось предыдущее настроенное расстояние, а не каждый раз новое?
Обновил #3
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Автор темы   Непрочитано 26.07.2010, 20:14
#12
Vova

Engineer
 
Регистрация: 05.09.2003
New-York
Сообщений: 10,288


Цитата:
Сообщение от VVA Посмотреть сообщение
Обновил #3
Спасибо, работает

Последний раз редактировалось Vova, 26.07.2010 в 20:20.
Vova вне форума  
 
Непрочитано 27.07.2010, 10:55
#13
kor99


 
Регистрация: 28.02.2007
Riga
Сообщений: 19


Возможно ли, чтобы этот лисп работал на мтекст в мултилидере?
kor99 вне форума  
 
Непрочитано 27.07.2010, 13:58
#14
VVA

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


Цитата:
Сообщение от kor99 Посмотреть сообщение
Возможно ли, чтобы этот лисп работал на мтекст в мултилидере?
Обновил #3
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Непрочитано 27.07.2010, 16:06
#15
kor99


 
Регистрация: 28.02.2007
Riga
Сообщений: 19


Цитата:
Сообщение от VVA Посмотреть сообщение
Обновил #3
Спасибо - работает
kor99 вне форума  
 
Автор темы   Непрочитано 02.08.2010, 16:39
#16
Vova

Engineer
 
Регистрация: 05.09.2003
New-York
Сообщений: 10,288


Цитата:
Сообщение от vrtm Посмотреть сообщение
Vova, смотрю твой пример. Да, небольших текстовых объектов много (можно сделать еще меньше объектов - см. приложение)
Интересная идея-разбить мтекст на колонки и уменьшить тем самым количество объектов. Но это-ведь не самоцель, и делается с бОльшими трудозатратами. Расстояние между элементами схемы далеко не всегда одинаковое и при компоновке схемы оно может меняться.
Есть лисп копирования содержимого текстовых объектов, классный лисп, (кстати, сделан по моему заказу) и здесь он не будет работать.
http://www.caduser.ru/forum/index.ph...D=44&TID=21894
Vova вне форума  
 
Непрочитано 23.08.2010, 15:00
#17
Sokolov_Art


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


Лисп в сообщении №3 я так понял делает (х) кратное значение межстрочного интервала.
типа х1... х3...

А что там надо поменять чтобы он задавал "точное" значение межстрочного интервала??
Sokolov_Art вне форума  
 
Непрочитано 23.08.2010, 19:04
1 | #18
VVA

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


Измени строку форматирования с "\\pxsm" на "\\pxse" (в #3 выделил красным) + на запрос "Enter line spasing value" введи нужное число. Говорю число, так как если в редакторе мтекста выставить режим "точно", то для значения 3.3 у меня код форматирования выглядит как \\pxse1.32. Как 3.3 преобразуется в 1.32 закономерности не установил. Поэтому отформатируй текст на нужное тебе "точное" значение, посмотри коэффициент и введи на запрос. Должно работать (не проверял)
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Непрочитано 24.08.2010, 08:32
#19
Sokolov_Art


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


Урррраа!!! Заработало!!!!!
Спасибо тебе огромное!!!!
теперь баг с мультивыносками можно решать таким путём!
Sokolov_Art вне форума  
 
Непрочитано 24.08.2010, 20:28
1 | #20
VVA

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


Цитата:
Сообщение от Sokolov_Art Посмотреть сообщение
теперь баг с мультивыносками можно решать таким путём
Ты имеешь ввиду "прилипание" текста к мультивыноске?
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > AutoCAD > Mеждустрочное расстояние в MTEXT



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как сосчитать сумму цифр из отдельных мтекстов (и лисп для подсчета спецификаций) Red Nova LISP 666 07.06.2023 14:00
Требуется помощь,что бы Mleader не опускался Composter Программирование 79 04.12.2018 18:03
Возникла необходимость в суммировании большого количества чисел и забивать каждое число в формулу очень нудно и долго Макс Тал. LISP 77 21.12.2016 18:27
Увеличение всех отметок на определенную величину Drweb Программирование 103 22.01.2016 13:52
Требуется помощь с циклом в лиспе Composter LISP 28 13.05.2009 11:14