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

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

Превращение однострочного текста в многострочный

Ответ
Поиск в этой теме
Непрочитано 23.10.2006, 08:46 #1
Превращение однострочного текста в многострочный
Паша П.М.
 
проектировщик
 
г. Владимир
Регистрация: 19.06.2006
Сообщений: 535

Переписал с сайта несколько программ которые могут превращать однострочный текст в многострочный но они объединяют много однострочных в один многострочный.
А мне очень надо чтобы текст просто становился многостр. без объеденения(остовался на своих местах и оставался отдельной единицей)
Прошу помощи!
Заранее признателен!
Просмотров: 6495
 
Непрочитано 23.10.2006, 09:13
#2
Кулик Алексей aka kpblc
Moderator

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


Кажется, я понимаю, откуда "уши растут" у этой темы. Лично я думаю, что у тебя какой-то глюк в каде. Попробуй на пустом профиле со стандартными установками только настроить текстовый стиль на отображение того же Arial.ttf (говорю сразу - 2005 и 2006 корректно отработали; на обоих - по сервис-паку). Замена Arial на Times New Roman ситуацию не изменила (все равно, скотина, нормально работает!).
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 23.10.2006, 09:33
#3
Profan


 
Регистрация: 25.12.2005
Москва
Сообщений: 13,627


При установленном "Express Tools".
Код:
[Выделить все]
(defun C:T1_MT1 ( / ss n ssn pp pp1)
(if (not C:txt2mtxt) (arxload "ctextapp"))
(setq ss (ssget))
   (setq ssn (sslength ss) n 0) 
   (repeat ssn
           (setq pp (ssname ss n))  
           (setq pp1 (entget pp))   
           (cond
           ((= (cdr (assoc '0 pp1)) "TEXT")
           (command "txt2mtxt" pp "")
           ))
           (setq n (+ n 1))
    )
    (princ)
)
Profan вне форума  
 
Автор темы   Непрочитано 23.10.2006, 09:45
#4
Паша П.М.

проектировщик
 
Регистрация: 19.06.2006
г. Владимир
Сообщений: 535


Цитата:
Сообщение от Profan
При установленном "Express Tools".
Код:
[Выделить все]
(defun C:T1_MT1 ( / ss n ssn pp pp1)
(if (not C:txt2mtxt) (arxload "ctextapp"))
(setq ss (ssget))
   (setq ssn (sslength ss) n 0) 
   (repeat ssn
           (setq pp (ssname ss n))  
           (setq pp1 (entget pp))   
           (cond
           ((= (cdr (assoc '0 pp1)) "TEXT")
           (command "txt2mtxt" pp "")
           ))
           (setq n (+ n 1))
    )
    (princ)
)
извините, но у меня нет "Express Tools".Можете ссылочку кинуть для 2006рус?
kpblc
в нулёвом файле у меня всё ок, однострочный текст принимает все шрифты.
а вот в старых всё попрежнему :?
Паша П.М. вне форума  
 
Непрочитано 23.10.2006, 10:00
#5
Profan


 
Регистрация: 25.12.2005
Москва
Сообщений: 13,627


Какая ссылочка? "Express Tools" входит в состав дистрибутива AutoCAD 2006. Я думаю, что можно добавить этот пакет, если запустить программу установки AutoCAD не через setup.exe, а через acad.msi.
Profan вне форума  
 
Автор темы   Непрочитано 23.10.2006, 10:10
#6
Паша П.М.

проектировщик
 
Регистрация: 19.06.2006
г. Владимир
Сообщений: 535


Цитата:
Сообщение от Profan
Какая ссылочка? "Express Tools" входит в состав дистрибутива AutoCAD 2006. Я думаю, что можно добавить этот пакет, если запустить программу установки AutoCAD не через setup.exe, а через acad.msi.
с этим у меня временные проблемы: нет доступа и т.д.
Когда будет обязательно попробую
Спасибо
Паша П.М. вне форума  
 
Непрочитано 23.10.2006, 10:42
#7
Кулик Алексей aka kpblc
Moderator

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


Насчет ET - они ж все равно не локализуются. И ставить их для 2006 все же лучше в процессе установки (ИМХО!!!).
И вот еще - попробуй скопировать (через DesignCenter) описание текстового стиля с нового файла на старый. Чего получается?
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 23.10.2006, 10:47
#8
Profan


 
Регистрация: 25.12.2005
Москва
Сообщений: 13,627


Вот файл ctextapp.arx. Скопируйте его в папку Support установленного AutoCAD'а. Может, сработает.
[ATTACH]1161586064.rar[/ATTACH]
Profan вне форума  
 
Автор темы   Непрочитано 23.10.2006, 12:49
#9
Паша П.М.

проектировщик
 
Регистрация: 19.06.2006
г. Владимир
Сообщений: 535


Цитата:
Сообщение от kpblc
Насчет ET - они ж все равно не локализуются. И ставить их для 2006 все же лучше в процессе установки (ИМХО!!!).
И вот еще - попробуй скопировать (через DesignCenter) описание текстового стиля с нового файла на старый. Чего получается?
ничего ге изменилось:?
Profan
тоже ничего
А всё таки нет ли такой проги какую я просил в первом посте?
Я думаю протянул бы сней неделю до переустановки ACAD
если есть у когонибудь
Паша П.М. вне форума  
 
Непрочитано 23.10.2006, 13:09
#10
Кулик Алексей aka kpblc
Moderator

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


Попробуй такое (без гарантии, что учел все):
Код:
[Выделить все]
(defun convtxt2mtxt (/ adoc ent minp maxp)
  (vl-load-com)
  (setq adoc (vla-get-activedocument (vlax-get-acad-object)))
  (vla-startundomark adoc)
  (foreach item (mapcar 'vlax-ename->vla-object
                        (vl-remove-if
                          'listp
                          (mapcar 'cadr (ssnamex (ssget '((0 . "TEXT")))))
                          ) ;_ end of vl-remove-if
                        ) ;_ end of mapcar
    (vla-getboundingbox item 'minp 'maxp)
    (setq minp (vlax-safearray->list minp)
          maxp (vlax-safearray->list maxp)
          ent  (vla-addmtext
                 (vla-objectidtoobject adoc (vla-get-ownerid item))
                 (vla-get-insertionpoint item)
                 (abs (- (car minp) (car maxp))
                      ) ;_ end of abs
                 (vla-get-textstring item)
                 ) ;_ end of vla-AddMText
          ) ;_ end of setq
    (mapcar '(lambda (x)
               (vl-catch-all-apply
                 '(lambda ()
                    (vlax-put-property ent x (vlax-get-property item x))
                    ) ;_ end of LAMBDA
                 ) ;_ end of VL-CATCH-ALL-APPLY
               ) ;_ end of LAMBDA
            '("color"         "lineweight"    "linetype"      "linetypescale"
              "layer"         "style"         "alignment"     "height" "rotation"
              )
            ) ;_ end of mapcar
    (vla-erase item)
    ) ;_ end of foreach
  (vla-endundomark adoc)
  (princ)
  ) ;_ end of defun
---
Добавлено:
Не учтен вариант поворота текста - возможны проблемы. Не учтен вариант "не текущей" системы координат. И наверняка еще что-нить...
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 23.10.2006, 13:59
#11
Паша П.М.

проектировщик
 
Регистрация: 19.06.2006
г. Владимир
Сообщений: 535


Цитата:
Сообщение от kpblc
Попробуй такое (без гарантии, что учел все):
Код:
[Выделить все]
(defun convtxt2mtxt (/ adoc ent minp maxp)
  (vl-load-com)
  (setq adoc (vla-get-activedocument (vlax-get-acad-object)))
  (vla-startundomark adoc)
  (foreach item (mapcar 'vlax-ename->vla-object
                        (vl-remove-if
                          'listp
                          (mapcar 'cadr (ssnamex (ssget '((0 . "TEXT")))))
                          ) ;_ end of vl-remove-if
                        ) ;_ end of mapcar
    (vla-getboundingbox item 'minp 'maxp)
    (setq minp (vlax-safearray->list minp)
          maxp (vlax-safearray->list maxp)
          ent  (vla-addmtext
                 (vla-objectidtoobject adoc (vla-get-ownerid item))
                 (vla-get-insertionpoint item)
                 (abs (- (car minp) (car maxp))
                      ) ;_ end of abs
                 (vla-get-textstring item)
                 ) ;_ end of vla-AddMText
          ) ;_ end of setq
    (mapcar '(lambda (x)
               (vl-catch-all-apply
                 '(lambda ()
                    (vlax-put-property ent x (vlax-get-property item x))
                    ) ;_ end of LAMBDA
                 ) ;_ end of VL-CATCH-ALL-APPLY
               ) ;_ end of LAMBDA
            '("color"         "lineweight"    "linetype"      "linetypescale"
              "layer"         "style"         "alignment"     "height" "rotation"
              )
            ) ;_ end of mapcar
    (vla-erase item)
    ) ;_ end of foreach
  (vla-endundomark adoc)
  (princ)
  ) ;_ end of defun
---
Добавлено:
Не учтен вариант поворота текста - возможны проблемы. Не учтен вариант "не текущей" системы координат. И наверняка еще что-нить...
не получилось запустить её, если можно дайте коротенькую инструкцию по запуску
Паша П.М. вне форума  
 
Непрочитано 23.10.2006, 14:10
#12
Кулик Алексей aka kpblc
Moderator

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


ET для 2006: http://www.rapidshare.ru/79562
А, черт, опять забыл поставить c: перед именем функции. Исправляемся:
Код:
[Выделить все]
(defun c:convtxt2mtxt (/ adoc ent minp maxp)
  (vl-load-com)
  (setq adoc (vla-get-activedocument (vlax-get-acad-object)))
  (vla-startundomark adoc)
  (foreach item (mapcar 'vlax-ename->vla-object
                        (vl-remove-if
                          'listp
                          (mapcar 'cadr (ssnamex (ssget '((0 . "TEXT")))))
                          ) ;_ end of vl-remove-if
                        ) ;_ end of mapcar
    (vla-getboundingbox item 'minp 'maxp)
    (setq minp (vlax-safearray->list minp)
          maxp (vlax-safearray->list maxp)
          ent  (vla-addmtext
                 (vla-objectidtoobject adoc (vla-get-ownerid item))
                 (vla-get-insertionpoint item)
                 (abs (- (car minp) (car maxp))
                      ) ;_ end of abs
                 (vla-get-textstring item)
                 ) ;_ end of vla-AddMText
          ) ;_ end of setq
    (mapcar '(lambda (x)
               (vl-catch-all-apply
                 '(lambda ()
                    (vlax-put-property ent x (vlax-get-property item x))
                    ) ;_ end of LAMBDA
                 ) ;_ end of VL-CATCH-ALL-APPLY
               ) ;_ end of LAMBDA
            '("color"         "lineweight"    "linetype"      "linetypescale"
              "layer"         "style"         "alignment"     "height" "rotation"
              )
            ) ;_ end of mapcar
    (vla-erase item)
    ) ;_ end of foreach
  (vla-endundomark adoc)
  (princ)
  ) ;_ end of defun
Вызов с ком.строки:
Код:
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 23.10.2006, 14:26
#13
Алекс


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


Может я чето не понимаю, но чем плоха команда txt2mtxt из Экспресс2006?
Я пользуюсь. Все устраивает.
Цитата:
А мне очень надо чтобы текст просто становился многостр. без объеденения(остовался на своих местах и оставался отдельной единицей)
Ну сделай txt2mtxt для каждого однострочного.
Алекс вне форума  
 
Непрочитано 23.10.2006, 14:30
#14
Кулик Алексей aka kpblc
Moderator

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


Она плоха несколькими вещами:
1. На сегодняшний момент у Паши не установлен ET, и до конца недели точно не предвидится (см.чуть выше)
2. Вот именно, что надо кликать на каждом тексте отдельно. В моем варинте можно выбрать сколько угодно - хоть все. Все равно объединяться не будут.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 23.10.2006, 14:35
#15
Паша П.М.

проектировщик
 
Регистрация: 19.06.2006
г. Владимир
Сообщений: 535


У меня получилось (уже трудностей будет меньше), но проблема в том что текста сдвигаются(примерно на величину высоты вниз), может както можно это испрввить?
Я вам уже благодарен за внимание!!!!!!!!!!!!!!
Паша П.М. вне форума  
 
Непрочитано 23.10.2006, 14:36
#16
Кулик Алексей aka kpblc
Moderator

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


Ну вот, я ж говорил что не все учел
Скорее всего, там у тебя выравнивание что-то типа TopCenter или подобного? Если да, то тогда приложи файлец, попробую поковырять.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 23.10.2006, 14:59
#17
Profan


 
Регистрация: 25.12.2005
Москва
Сообщений: 13,627


Паша П.М.
Да скачай ты ET, kpblc ведь дал ссылку. Там много интересных команд, не только txt2mtxt.
Profan вне форума  
 
Автор темы   Непрочитано 23.10.2006, 15:31
#18
Паша П.М.

проектировщик
 
Регистрация: 19.06.2006
г. Владимир
Сообщений: 535


Цитата:
Сообщение от Profan
Паша П.М.
Да скачай ты ET, kpblc ведь дал ссылку. Там много интересных команд, не только txt2mtxt.
я скачал, а как его установить(там нет setup и всё не понашему ?
Паша П.М. вне форума  
 
Автор темы   Непрочитано 23.10.2006, 16:20
#19
Паша П.М.

проектировщик
 
Регистрация: 19.06.2006
г. Владимир
Сообщений: 535


kpblc
вот[/b]
[ATTACH]1161606047.dwg[/ATTACH]
Паша П.М. вне форума  
 
Непрочитано 24.10.2006, 09:33
#20
Кулик Алексей aka kpblc
Moderator

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


Можно такое попробовать:
Код:
[Выделить все]
(defun c:convtxt2mtxt (/ adoc ent minp maxp pt)
  (vl-load-com)
  (setq adoc (vla-get-activedocument (vlax-get-acad-object)))
  (vla-startundomark adoc)
  (foreach item (mapcar 'vlax-ename->vla-object
                        (vl-remove-if
                          'listp
                          (mapcar 'cadr (ssnamex (ssget '((0 . "TEXT")))))
                          ) ;_ end of vl-remove-if
                        ) ;_ end of mapcar
    (vla-getboundingbox item 'minp 'maxp)
    (setq minp (vlax-safearray->list minp)
          maxp (vlax-safearray->list maxp)
          ent  (vla-addmtext
                 (vla-objectidtoobject adoc (vla-get-ownerid item))
                 (vlax-3d-point
                   ((lambda (/ pt)
                      (setq pt (vlax-safearray->list
                                 (vlax-variant-value (vla-get-insertionpoint item))
                                 ) ;_ end of vlax-safearray->list
                            pt (polar pt
                                      (+ (/ pi 2.) (vla-get-rotation item))
                                      (vla-get-height item)
                                      ) ;_ end of polar
                            ) ;_ end of setq
                      ) ;_ end of lambda
                    )
                   ) ;_ end of vlax-3d-point
                 (abs (- (car minp) (car maxp))
                      ) ;_ end of abs
                 (vla-get-textstring item)
                 ) ;_ end of vla-AddMText
          ) ;_ end of setq
    (mapcar '(lambda (x)
               (vl-catch-all-apply
                 '(lambda ()
                    (vlax-put-property ent x (vlax-get-property item x))
                    ) ;_ end of LAMBDA
                 ) ;_ end of VL-CATCH-ALL-APPLY
               ) ;_ end of LAMBDA
            '("color"        "lineweight"   "linetype"     "linetypescale"
              "layer"        "style"        "height"       "rotation"
              )
            ) ;_ end of mapcar
    (vla-erase item)
    ) ;_ end of foreach
  (vla-endundomark adoc)
  (princ)
  ) ;_ end of defun
Можно было сделать выбор в зависимости от типа выравнивания, но мне стало лениво прописывать все варианты и их сопоставлять. Может быть, именно это и потребуется.
---
Поправочка: Иногда некорректно распознает ширину нового mtext'a, и выполняет перенос строки. Есть несколько вариантов: либо править руками; либо ужимать текст, задавая ему форматирование.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > AutoCAD > Превращение однострочного текста в многострочный