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

Вернуться   Форум DWG.RU > Программное обеспечение > AutoCAD > Объединение разбитого на слова текста

Объединение разбитого на слова текста

Ответ
Поиск в этой теме
Непрочитано 30.11.2007, 14:08
Объединение разбитого на слова текста
Mist
 
Москва
Регистрация: 31.07.2007
Сообщений: 92

Подскажите как сделать так чтобы разбитый на слова текст объеденить в МТекст для нормально редактирования...???
Прислали данные, а весь текст разбит до отдельных слов, точек...
Редактировать замучаешься...
Просмотров: 47444
 
Непрочитано 11.06.2008, 08:57
#21
Bull

Конструктор по сути (машиностроитель)
 
Регистрация: 10.10.2005
Набережные Челны (это где КамАЗ)
Сообщений: 11,391


в шрифтах. 99.99%
__________________
Век живи, век учись - ...

Последний раз редактировалось Bull, 11.06.2008 в 09:15. Причина: Мудрый человек во всем сомневается, поэтому не 100% :)
Bull вне форума  
 
Непрочитано 11.06.2008, 09:04
#22
Кулик Алексей aka kpblc
Moderator

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


Я сильно подозреваю, что проблема в отсутствии shx-шрифтов... У тебя подкаталоги Fonts в каталогах установки AutoCAD'a одинаковы?
---
Пока с начальством базарил, уже опередили
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 11.06.2008, 09:58
#23
Черней Иван

Проектирование автомобильных дорог, мостов, аэродромов,изыскания
 
Регистрация: 20.05.2008
Санкт-Петербург
Сообщений: 41
<phrase 1=


Express tools _txt2mtxt
Черней Иван вне форума  
 
Непрочитано 11.06.2008, 10:13
#24
Bull

Конструктор по сути (машиностроитель)
 
Регистрация: 10.10.2005
Набережные Челны (это где КамАЗ)
Сообщений: 11,391


Ты сначала тему почитал бы
__________________
Век живи, век учись - ...
Bull вне форума  
 
Непрочитано 11.06.2008, 14:36
#25
skkkk


 
Регистрация: 20.03.2008
Сообщений: 2,674


Сделел папки Fonts одинаковыми в обоих КАДах. Многое поправилось . Но не всё. Некоторые тексты, которые в 2008-м были выровнены по левому краю, стали в 2007-м по правому.
skkkk вне форума  
 
Непрочитано 11.06.2008, 14:41
#26
skkkk


 
Регистрация: 20.03.2008
Сообщений: 2,674


Кулик Алексей aka kpblc, извиняюсь за назойливость.....Реально ли сделать объединение текстов твоим лиспом без пробелов??
skkkk вне форума  
 
Непрочитано 11.06.2008, 14:52
#27
Кулик Алексей aka kpblc
Moderator

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


Цитата:
Сообщение от skkkk Посмотреть сообщение
Кулик Алексей aka kpblc, извиняюсь за назойливость.....Реально ли сделать объединение текстов твоим лиспом без пробелов??
Запаковывать лениво, забирай так:
Код:
[Выделить все]
(defun c:text2mtext (/
                     *error*
                     *kpblc-activedoc*
                     kpblc-conv-text-to-mtext
                     _kpblc-error-catch
                     _kpblc-error-print
                     _kpblc-get-msg-norm
                     _kpblc-string-replace
                     _kpblc-conv-value-to-string
                     _kpblc-conv-ent-to-ename
                     _kpblc-conv-ent-to-vla
                     _kpblc-conv-selset-to-ename
                     _kpblc-conv-ent-to-vla
                     _kpblc-conv-vla-to-list
                     _kpblc-property-get
                     _kpblc-property-set
                     _kpblc-get-text-point
                     _kpblc-get-boundingbox
                     _kpblc-get-boundingbox-list
                     )

  (defun *error* (msg)
    (vla-endundomark *kpblc-activedoc*)
    (princ msg)
    (princ)
    ) ;_ end of defun

  (defun _kpblc-get-boundingbox-list (lst / pt_lst maxp minp)
                                     ;|
;**************** lst-getboundingbox.lsp *************
;   Библиотечная функция
;   определения габаритного контейнера
;   для списка VLA объектов
;   Автор  Евгений Елпанов.
;*****************************************************
;   Аргумент lst - список VLA объектов
;   пример получения списка с использованием (ssget) :
(if (setq sset (ssget))
 (setq lst
       (mapcar
        (function vlax-ename->vla-object)
        (vl-remove-if
         (function listp)
         (mapcar (function cadr) (ssnamex sset))
        ) ;_ vl-remove-if
       ) ;_  mapcar
 ) ;_  setq
)
;   Пример вызова:
 (_kpblc-get-boundingbox-list lst)

;   Возвращает список из двух 3d точек
;   '((левая нижняя) (правая верхняя))
|;
    (if (setq lst (cond
                    ((= (type lst) 'list) (mapcar '_kpblc-conv-ent-to-vla lst))
                    ((= (type lst) 'pickset) (_kpblc-conv-selset-to-vla lst))
                    (t nil)
                    ) ;_ end of cond
              ) ;_ end of setq
      (progn
        (setq pt_lst (apply 'append
                            (mapcar '(lambda (x / minp maxp)
                                       (vla-getboundingbox x 'minp 'maxp)
                                       (list (_kpblc-conv-vla-to-list minp)
                                             (_kpblc-conv-vla-to-list maxp)
                                             ) ;_ end of list
                                       ) ;_ end of lambda
                                    lst
                                    ) ;_ end of mapcar
                            ) ;_ end of apply
              ) ;_ end of setq
        (list (list (apply 'min (mapcar 'car pt_lst))
                    (apply 'min (mapcar 'cadr pt_lst))
                    (apply 'min (mapcar 'caddr pt_lst))
                    ) ;_ end of list
              (list (apply 'max (mapcar 'car pt_lst))
                    (apply 'max (mapcar 'cadr pt_lst))
                    (apply 'max (mapcar 'caddr pt_lst))
                    ) ;_ end of list
              ) ;_ end of list
        ) ;_ end of progn
      ) ;_ end of if
    ) ;_ end of defun

  (defun _kpblc-get-boundingbox (minpoint maxpoint)
                                ;|
*    Возвращает список из 4 подсписков - точек прямоугольника. Требуется после
* применения (vla-getboundingbox () 'minp 'maxp) для получения полного описания
* прямоугольника. Корректно работает только в мировой системе координат.
*    Возвращает список точек прямоугольника:
*  4---3
*  |   |
*  1---2
*    Параметры вызова:
*	minpoint	variant, полученный от vla-GetBoundingBox
*	maxpoint	то же
*    В задании точек является критичной последовательность передачи параметров.
* Если первой указать не minpoint, a maxpoint, то получится
*  2---1
*  |   |
*  3---4
*    Примеры вызова:
(vla-GetBoundingBox (vlax-ename->vla-object (car (entsel))) 'minp 'maxp)
(_kpblc-get-boundingbox minp maxp)
|;
    (setq minpoint (_kpblc-conv-vla-to-list minpoint)
          maxpoint (_kpblc-conv-vla-to-list maxpoint)
          ) ;_ end of setq
    (list minpoint
          (list (car maxpoint) (cadr minpoint) (caddr minpoint))
          maxpoint
          (list (car minpoint) (cadr maxpoint) (caddr minpoint))
          ) ;_ end of list
    ) ;_ end of defun

  (defun _kpblc-property-set (obj property value / res)
                             ;|
*    Установка значения свойства объекта.
*    Параметры вызова:
*	obj		указатель на объект
*	property	наименование свойства
*	value		устанавливаемое значение
|;
    (_kpblc-error-catch
      (function
        (lambda ()
          (if (and obj
                   (vlax-property-available-p
                     (setq obj (_kpblc-conv-ent-to-vla obj))
                     property
                     t
                     ) ;_ end of vlax-property-available-p
                   (vlax-read-enabled-p obj)
                   (vlax-write-enabled-p obj)
                   (not (vlax-erased-p obj))
                   ) ;_ end of and
            (progn
              (vlax-put-property obj property value)
              (setq res (vlax-get-property obj property))
              ) ;_ end of progn
            ) ;_ end of if
          ) ;_ end of lambda
        ) ;_ end of function
      '(lambda (x)
         (_kpblc-error-print
           (strcat
             "_kpblc-property-set :"
             " obj->"
             (_kpblc-conv-value-to-string (_kpblc-property-get obj 'objectname))
             " property->"
             (_kpblc-conv-value-to-string property)
             " value-> "
             (_kpblc-conv-value-to-string value)
             ) ;_ end of strcat
           ) ;_ end of _kpblc-error-print
         ) ;_ end of lambda
      ) ;_ end of _kpblc-error-catch
    res
    ) ;_ end of defun

  (defun _kpblc-property-get (obj property / res)
                             ;|
*    Получение значения свойства объекта
|;
    (_kpblc-error-catch
      (function
        (lambda ()
          (if (and obj
                   (vlax-property-available-p
                     (setq obj (_kpblc-conv-ent-to-vla obj))
                     property
                     ) ;_ end of vlax-property-available-p
                   ) ;_ end of and
            (setq res (vlax-get-property obj property))
            ) ;_ end of if
          ) ;_ end of lambda
        ) ;_ end of function
      '(lambda (x)
         (_kpblc-error-print
           (strcat "_kpblc-property-get :"
                   " obj->"
                   (_kpblc-conv-value-to-string
                     (if (vlax-property-available-p
                           (setq obj (_kpblc-conv-ent-to-vla obj))
                           'objectname
                           ) ;_ end of vlax-property-available-p
                       (vla-get-objectname obj)
                       obj
                       ) ;_ end of if
                     ) ;_ end of _kpblc-conv-value-to-string
                   " property->"
                   (_kpblc-conv-value-to-string property)
                   ) ;_ end of strcat
           x
           ) ;_ end of _kpblc-error-print
         ) ;_ end of lambda
      ) ;_ end of _kpblc-error-catch
    res
    ) ;_ end of defun

  (defun _kpblc-get-text-point (ent / res)
                               ;|
*    Определение точки вставки одно- или многострочного текста
*    Параметры вызова:
*	ent	указатель на примитив
*    Примеры вызова:
(_kpblc-get-text-point (_kpblc-get-ent-with-type "*text" nil))
*    Возвращает точечную пару из DXF-кода и его значения.
|;
    (if
      (and (wcmatch (strcase (_kpblc-property-get ent 'objectname)) "ACDBTEXT")
           (/= (_kpblc-property-get ent 'alignment) 0)
           ) ;_ end of and
       (_kpblc-conv-vla-to-list (_kpblc-property-get ent 'textalignmentpoint))
       (_kpblc-conv-vla-to-list (_kpblc-property-get ent 'insertionpoint))
       ) ;_ end of if
    ) ;_ end of defun

  (defun _kpblc-conv-vla-to-list (value / res)
                                 ;|
*    Преобразовывает vlax-variant или vlax-safearray в список.
|;
    (_kpblc-error-catch
      (function
        (lambda ()
          (setq res (cond
                      ((= (type value) 'variant)
                       (_kpblc-conv-vla-to-list (vlax-variant-value value))
                       )
                      ((= (type value) 'safearray)
                       (if (>= (vlax-safearray-get-u-bound value 1) 0)
                         (vlax-safearray->list value)
                         ) ;_ end of if
                       )
                      (t value)
                      ) ;_ end of cond
                ) ;_ end of setq
          ) ;_ end of lambda
        ) ;_ end of function
      '(lambda (x) (_kpblc-error-print "_kpblc-conv-vla-to-list" x))
      ) ;_ end of _kpblc-error-catch
    res
    ) ;_ end of defun

  (defun _kpblc-conv-selset-to-vla (selset)
                                   ;|
*    Функция преобразования набора, полученного через (ssget), в список
* vla-примитивов.
*    Параметры вызова:
*	selset	набор примитивов
*    Примеры вызова:
(_kpblc-conv-selset-to-vla (ssget))
|;
    (if selset
      (mapcar '_kpblc-conv-ent-to-vla
              (_kpblc-conv-selset-to-ename selset)
              ) ;_ end of mapcar
      ) ;_ end of if
    ) ;_ end of defun

  (defun _kpblc-conv-selset-to-ename (selset)
                                     ;|
*    Функция преобразования набора, полученного через (ssget), в список
* ename-примитивов.
*    Параметры вызова:
*	selset	набор примитивов
*    Примеры вызова:
(_kpblc-conv-selset-to-ename (ssget))
|;
    (if selset
      (vl-remove-if 'listp (mapcar 'cadr (ssnamex selset)))
      ) ;_ end of if
    ) ;_ end of defun

  (defun _kpblc-conv-ent-to-vla (ent_value / res)
                                ;|
*    Функция преобразования полученного значения в vla-указатель.
*    Параметры вызова:
*	ent_value	значение, которое надо преобразовать в указатель. Может
*			быть именем примитива, vla-указателем или просто
*			списком.
*			Если не принадлежит ни одному из указанных типов,
*			возвращается nil
*    Примеры вызова:
(_kpblc-conv-ent-to-vla (entlast))
(_kpblc-conv-ent-to-vla (vlax-ename->vla-object (entlast)))
|;
    (_kpblc-error-catch
      (function
        (lambda ()
          (setq
            res
             (cond
               ((= (type ent_value) 'vla-object) ent_value)
               (t
                (vlax-ename->vla-object (_kpblc-conv-ent-to-ename ent_value))
                )
               ) ;_ end of cond
            ) ;_ end of setq
          ) ;_ end of lambda
        ) ;_ end of function
      '(lambda (x) (_kpblc-error-print "_kpblc-conv-ent-to-vla " x))
      ) ;_ end of _kpblc-error-catch
    res
    ) ;_ end of defun

  (defun _kpblc-conv-ent-to-ename (ent_value / res)
                                  ;|
*    Функция преобразования полученного значения в ename
*    Параметры вызова:
*	ent_value	значение, которое надо преобразовать в примитив. Может
*			быть именем примитива, vla-указателем или просто
*			списком.
*			Если не принадлежит ни одному из указанных типов,
*			возвращается nil
*    Примеры вызова:
(_kpblc-conv-ent-to-ename (entlast))
(_kpblc-conv-ent-to-ename (vlax-ename->vla-object (entlast)))
|;
    (_kpblc-error-catch
      (function
        (lambda ()
          (setq res (cond
                      ((= (type ent_value) 'vla-object)
                       (vlax-vla-object->ename ent_value)
                       )
                      ((= (type ent_value) 'ename) ent_value)
                      ((= (type ent_value) 'str) (handent ent_value))
                      ((= (type ent_value) 'list) (cdr (assoc -1 ent_value)))
                      (t nil)
                      ) ;_ end of cond
                ) ;_ end of setq
          ) ;_ end of lambda
        ) ;_ end of function
      '(lambda (x) (_kpblc-error-print " _kpblc-conv-ent-to-ename " x))
      ) ;_ end of _kpblc-error-catch
    res
    ) ;_ end of defun

  (defun _kpblc-conv-value-to-string (value /)
                                     ;|
*    конвертация значения в строку.
|;
    (if value
      (vl-princ-to-string value)
      ""
      ) ;_ end of if
    ) ;_ end of defun

  (defun _kpblc-string-replace (string old_substr new_substr / pos)
                               ;|
*    Функция замены вхождений подстроки в исходную строку на новые.
* Регистрозависимо
*    Параметры вызова:
*	string		исходная строка
*	ols_substr	старая подстрока
*	new_substr	новая подстрока
*    Примеры вызова:
(_kpblc-string-replace "Здесь были ВаВася и ВаВаВаня. Вася" "Ва" "Бу")
	; "Здесь были Буся и Буня. Буся"
|;
    (if (/= old_substr new_substr)
      (while (setq pos (vl-string-search old_substr string))
        (setq string
               (strcat
                 (substr string 1 pos)
                 new_substr
                 (_kpblc-string-replace
                   (substr string (+ (strlen old_substr) pos 1))
                   old_substr
                   new_substr
                   ) ;_ end of _kpblc-string-replace
                 ) ;_ end of strcat
              ) ;_ end of setq
        ) ;_ end of while
      ) ;_ end of if
    string
    ) ;_ end of defun

  (defun _kpblc-get-msg-norm (msg)
                             ;|
*    Нормализация строки запроса для использования в запросах ком.строки
|;
    (vl-string-trim "][ :\n<>" msg)
    ) ;_ end of defun

  (defun _kpblc-error-print (func-name msg)
                            ;|
*    Функция вывода сообщения об ошибке для (_kpblc-error-catch)
*    Параметры вызова:
*	func-name	имя функции, в которой возникла ошибка
*	msg		сообщение об ошибке
|;
    (princ (strcat "\n ** "
                   (_kpblc-get-msg-norm
                     (_kpblc-string-replace
                       (strcase (_kpblc-conv-value-to-string func-name) t)
                       "error"
                       ""
                       ) ;_ end of _kpblc-string-replace
                     ) ;_ end of _kpblc-get-msg-norm
                   " ERROR #"
                   (if msg
                     (strcat
                       (_kpblc-conv-value-to-string (getvar "errno"))
                       ": "
                       (_kpblc-conv-value-to-string msg)
                       ) ;_ end of strcat
                     ": undefined"
                     ) ;_ end of if
                   "\n"
                   ) ;_ end of strcat
           ) ;_ end of princ
    (princ)
    ) ;_ end of defun

  (defun _kpblc-error-catch (protected-function
                             on-error-function
                             /
                             catch_error_result
                             )
                            ;|
*** Функция взята из книжной версии ruCAD'a без каких бы то ни было переделок,
*** кроме переименования.
*    Оболочка отлова ошибок.
*    Параметры вызова:
*	protected-function	- "защищаемая" функция
*	on-error-function	- функция, выполняемая в случае ошибки
|;
    (setq catch_error_result (vl-catch-all-apply protected-function))
    (if (and (vl-catch-all-error-p catch_error_result)
             on-error-function
             ) ;_ end of and
      (apply on-error-function
             (list (vl-catch-all-error-message catch_error_result))
             ) ;_ end of apply
      catch_error_result
      ) ;_ end of if
    ) ;_ end of defun

  (defun kpblc-conv-text-to-mtext (/ selset str mtext minp maxp source *error*)
                                  ;|
*    Функция преобразовывает несколько объектов однострочного и многострочного
* текста в один многострочный (форматирование многострочных текстов оставляется
* на месте).
* Порядок выбора примитивов роли не играет. Выравнивание однострочных текстов
* также не имеет значения.
*    Вставка нового примитива выполняется на текущий слой, с текущими установками.
*    Функция сделана для работы в мировой системе координат.
*    Параметры вызова:
*	нет
*    Примеры вызова:
(kpblc-conv-text-to-mtext)
|;

    (vla-startundomark *kpblc-activedoc*)
    (_kpblc-error-catch
      (function
        (lambda ()
          (if
            (setq
              selset (_kpblc-conv-selset-to-vla (ssget '((0 . "TEXT,MTEXT"))))
              ) ;_ end of setq
             (progn
               ;; Сортируем выбранные примитивы
               ;; Но перед сортировкой им надо сделать нормальные точки
               ;; вставки - меняем y для них по следующей методике:
               ;; Берем 1 элемент, с него получаем контрольную точку и
               ;; проверяем на совпадение у с остальными с точностью до
               ;; высоты текста. Потом то же самое со вторым, третьим и т.п.
               ;; Проходим только по следующим за "отбираемым примитивом".
               (foreach item selset
                 (foreach subitem (cdr (member item selset))
                   (if (equal
                         (cadr (_kpblc-get-text-point item))
                         (cadr (_kpblc-get-text-point subitem))
                         (vla-get-height item)
                         ) ;_ end of equal
                     ;; Меняем эту точку
                     (vla-put-insertionpoint
                       subitem
                       (vlax-3d-point
                         (list (car (_kpblc-get-text-point subitem))
                               (cadr (_kpblc-get-text-point item))
                               (caddr (_kpblc-get-text-point subitem))
                               ) ;_ end of list
                         ) ;_ end of vlax-3d-point
                       ) ;_ end of vla-put-InsertionPoint
                     ) ;_ end of if
                   ) ;_ end of foreach
                 ) ;_ end of foreach
               (setq selset (vl-sort
                              (vl-sort selset
                                       '(lambda (c d)
                                          (< (car (_kpblc-get-text-point c))
                                             (car (_kpblc-get-text-point d))
                                             ) ;_ end of <
                                          ) ;_ end of lambda
                                       ) ;_ end of vl-sort
                              '(lambda (a b)
                                 (> (cadr (_kpblc-get-text-point a))
                                    (cadr (_kpblc-get-text-point b))
                                    ) ;_ end of <
                                 ) ;_ end of lambda
                              ) ;_ end of vl-sort
                     ) ;_ end of setq
               (foreach item selset
                 (if (= (length selset) (length (member item selset)))
                   (setq str (vla-get-textstring item))
                   (setq str
                          (strcat
                            str
                            (if
                              (=
                                (cadr (_kpblc-get-text-point item))
                                (cadr
                                  (_kpblc-get-text-point
                                    (nth
                                      (1-
                                        (- (length selset)
                                           (length (member item selset))
                                           ) ;_ end of -
                                        ) ;_ end of 1-
                                      selset
                                      ) ;_ end of nth
                                    ) ;_ end of _kpblc-get-text-point
                                  ) ;_ end of caddr
                                ) ;_ end of =
                               "" ; вот здесь была вставка пробела
                               "\\P" ; а здесь вставка переноса абзаца. Не надо - сноси
                               ) ;_ end of if
                            (vla-get-textstring item)
                            ) ;_ end of strcat
                         ) ;_ end of setq
                   ) ;_ end of if
                 ) ;_ end of foreach
               (vla-getboundingbox (car selset) 'minp 'maxp)
               (setq
                 mtext (vla-addmtext
                         (vla-objectidtoobject
                           *kpblc-activedoc*
                           (_kpblc-property-get (car selset) 'ownerid)
                           ) ;_ end of vla-ObjectIDToObject
                         (vlax-3d-point
                           (caddr (_kpblc-get-boundingbox minp maxp))
                           ) ;_ end of vlax-3d-point
                         (abs (- (caadr (_kpblc-get-boundingbox-list selset))
                                 (caar (_kpblc-get-boundingbox-list selset))
                                 ) ;_ end of -
                              ) ;_ end of abs
                         str
                         ) ;_ end of vla-addmtext
                 ) ;_ end of setq
               (vla-put-visible mtext :vlax-false)
               (setq source
                      ((lambda (/ tmp)
                         (if
                           (and (not (vl-catch-all-error-p
                                       (vl-catch-all-apply
                                         '(lambda ()
                                            (setq tmp
                                                   (car
                                                     (entsel
                                                       "\nИсточник свойств <Первый элемент набора> : "
                                                       ) ;_ end of entsel
                                                     ) ;_ end of car
                                                  ) ;_ end of setq
                                            ) ;_ end of lambda
                                         ) ;_ end of vl-catch-all-apply
                                       ) ;_ end of VL-CATCH-ALL-ERROR-P
                                     ) ;_ end of not
                                tmp
                                (wcmatch (cdr (assoc 0 (entget tmp))) "*TEXT")
                                ) ;_ end of and
                            tmp
                            (car selset)
                            ) ;_ end of if
                         ) ;_ end of lambda
                       )
                     ) ;_ end of setq
               (foreach prop '("Alignment"         "Backward"
                               "Color"             "elevation"
                               "Fit"               "Height"
                               "HorizontalAlignment"
                               "HorizontalTextPosition"
                               "Invisible"         "Layer"
                               "Linetype"          "LinetypeScale"
                               "Lineweight"        "Normal"
                               "ObliqueAngle"      "ScaleFactor"
                               "StyleName"         "TextColor"
                               "TextGap"           "TextGenerationFlag"
                               "TextHeight"        "TextInside"
                               "TextInsideAlign"   "TextMovement"
                               "TextStyle"         "Thickness"
                               "Type"              "UpsideDown"
                               "Verify"            "VerticalAlignment"
                               "VerticalTextPosition"
                               "Visible"
                               )
                 (_kpblc-property-set
                   mtext
                   prop
                   (_kpblc-property-get source prop)
                   ) ;_ end of _kpblc-property-set
                 ) ;_ end of foreach
               (vla-put-visible mtext :vlax-true)
               (foreach item selset
                 (vla-erase item)
                 ) ;_ end of foreach
               ) ;_ end of progn
             ) ;_ end of if
          ) ;_ end of lambda
        ) ;_ end of function
      '(lambda (x)
         (if mtext
           (vla-erase mtext)
           ) ;_ end of if
         (_kpblc-error-print "kpblc-conv-text-to-mtext" x)
         ) ;_ end of lambda
      ) ;_ end of _kpblc-error-catch
    (vla-endundomark *kpblc-activedoc*)
    (princ)
    ) ;_ end of defun

  (vl-load-com)
  (setq *kpblc-activedoc* (vla-get-activedocument (vlax-get-acad-object)))
  (kpblc-conv-text-to-mtext)
  ) ;_ end of defun
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 11.06.2008, 19:05
#28
skkkk


 
Регистрация: 20.03.2008
Сообщений: 2,674


Суперкайф!!!!! Отлично работает. Огрооооомное спасибо Буду в Питере с меня ящик
skkkk вне форума  
 
Непрочитано 18.06.2008, 01:36
#29
skkkk


 
Регистрация: 20.03.2008
Сообщений: 2,674


Алексей aka kpblc, обнаружил такую вещь: вертикальные мтексты в одну строку при объединении становятся горизонтальными и в несколько срок. Сложно поправить? Ну и, конечно, хочется, чтоб остальные тексты присоединялись к первому, а он оставался на месте. И думаю, в Готовые программы ему путь должен лежать....Славный лиспик
skkkk вне форума  
 
Непрочитано 19.06.2008, 01:15
#30
Кулик Алексей aka kpblc
Moderator

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


Образец бы (исходник + чего надо в результате)... А то я с трудом соображаю последнее время. Такого могу наваять, что потом фиг разберешь.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 19.06.2008, 03:28
#31
skkkk


 
Регистрация: 20.03.2008
Сообщений: 2,674


Вот образец с пояснениями внутри
Вложения
Тип файла: dwg
DWG 2007
Чертеж.dwg (66.5 Кб, 1373 просмотров)
skkkk вне форума  
 
Непрочитано 20.06.2008, 00:59
#32
Кулик Алексей aka kpblc
Moderator

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


Просмотрел. Честно говоря, у меня сейчас головы не хватает на такую проработку Суть в том, что все выбранные тексты сортируются по точке вставки - сначала выбираются те, которые имеют одинаковую координату Y, и предполагается, что это одна строка. Все, что имеет Y меньше, является следующей строкой. То, что не учитывается угол поворота текста, в общем-то вытекает отсюда же (добавить можно, но результат будет неверным в общем случае). Надо по идее дополнительно выполнять анализ на угол поворота текста, но тут моментально вопрос: а что делать, если попало несколько текстов с разными углами поворота (например, 3 штуки с углом 30 градусов, 2 - с 90 градусами и 16 - с 0)?
Вторую часть увидеть увидел, но пока "как победить", еще не придумал. Спать сильно хочется
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 11.08.2008, 17:46
#33
skkkk


 
Регистрация: 20.03.2008
Сообщений: 2,674


Алексей, а реально ли в принципе таким же образом, как в #27 объединять атрибуты внутри блока?
skkkk вне форума  
 
Непрочитано 11.08.2008, 22:36
#34
Кулик Алексей aka kpblc
Moderator

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


Это как?
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 11.08.2008, 23:09
#35
skkkk


 
Регистрация: 20.03.2008
Сообщений: 2,674


Выбираешь несколько атрибутов и превращаешь их в один. С именем первого, с содержимым из всех исходных....Ну или превратить их в один мтекст. Во вложении три красных объекта-текста (но лучше мтексты, т.к. мне нужно использовать индексы-степени). Каждый из них обрабатывается отдельно разными командами, а потом, в целях соблюдения нужных интервалов (количество знаков ведь может изменяться), их надо объединить в один текст. С помощью твоей программы я так и делал, но таскать эти куски неудобно, к тому же верхний связан с выноской. С группами тоже много движений. А вот выноска с блоком и атрибутами была бы удобнее на мой взгляд.
Я плохо знаю свойства атрибутов, и интересно, можно ли с ними проделать такие махинации?
Вложения
Тип файла: dwg
DWG 2007
Шаблон выноски.dwg (63.0 Кб, 1320 просмотров)
skkkk вне форума  
 
Непрочитано 17.08.2008, 04:26
#36
skkkk


 
Регистрация: 20.03.2008
Сообщений: 2,674


kpblc, лисп с #27 стал всегда теперь сдвигать объединенный текст (см. пример во вложении из #31, часть 2) Не подскажешь, что делать??
skkkk вне форума  
 
Непрочитано 18.08.2008, 21:48
#37
Кулик Алексей aka kpblc
Moderator

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


skkkk, а в каком конкретном месте? Скорее всего, дело в том, что мтексты имеют выравнивание не TopLetf вкупе с переналожением точек вставки.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 18.08.2008, 22:20
#38
skkkk


 
Регистрация: 20.03.2008
Сообщений: 2,674


Раньше он корректно делал тот, что во вложении с пометкой "правильно", а теперь и его перестал (самый верхний в части 2, а результат обведен желтым кругом)
skkkk вне форума  
 
Непрочитано 18.08.2008, 22:23
#39
Кулик Алексей aka kpblc
Moderator

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


Ясно... Проблема в том, что надо, похоже, перепрописывать сортировку. Сейчас попробую...
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 18.08.2008, 22:25
#40
skkkk


 
Регистрация: 20.03.2008
Сообщений: 2,674


А можешь туда еще добавить функцию смены цвета текста-результата?? Пожалуйста
skkkk вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > AutoCAD > Объединение разбитого на слова текста

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
LISP. Вставка в таблицу поля, соотвествующего площади примитива Profan Готовые программы 272 06.06.2021 23:12
Привязка текста в размерах Piton AutoCAD 30 05.01.2017 00:58
Редактирование текста в AutoCAD2008 kkiak AutoCAD 7 01.10.2009 12:29
нужен лисп с заменой текста Rwb LISP 28 03.08.2008 23:57
Изменение форматированного текста посредством lisp Tramp LISP 4 03.03.2006 11:28