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

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > Преобразование текста в мультивыноску, с сохранением точки вставки текста

Преобразование текста в мультивыноску, с сохранением точки вставки текста

Ответ
Поиск в этой теме
Непрочитано 12.05.2019, 23:14 #1
Преобразование текста в мультивыноску, с сохранением точки вставки текста
maksorli
 
Регистрация: 12.05.2019
Сообщений: 5

Добрый день!
Нашел на форуме подобную ветку, но в ней задачи сохранения точки вставки текста(InsertionPoint) не стояла.
Алгоритм подразумевается следующий: выбираем текст, первой точке мультивыноски присваивается точка вставки текста , вторую выбираем самостоятельно, содержимое берем из текста.
На данный момент получается только вытащить содержимое текста в мультивыноску. В комментариях в лиспе нерабочие варианты. Ошибка следующая: ; error : bad argument type <<Entity name: 6a7efbf0>> ; expected VLA-OBJECT at [vla-get-insertionpoint].
Прошу помочь объяснить что я делаю не так.
Код:
[Выделить все]
 
(defun C:TXT-MLD ( / echo obj1 текст )
(vl-cmdf "_UNDO" "_BE")    
(setq echo (getvar "CMDECHO"))
(setvar "CMDECHO" 0)
(setq obj1 (car (entsel "\nВыберите текст: ")))
(if obj1
    (progn
;(setq p1 (vlax-safearray->list (vlax-variant-value (vla-get-InsertionPoint obj1))))
;(setq p1 (vlax-safearray->list (vlax-variant-value (vla-get-coordinates (vlax-ename->vla-object obj1))))) 
    (setq текст (vlax-get-property (vlax-ename->vla-object obj1) 'TextString))
     (princ "\n Построение мультивыноски ")
         (vl-cmdf "_mleader" p1 pause  текст)
         (vl-cmdf "_ERASE" obj1 "")
      
    ) ; progn
    (princ "\nНе выбрана строка 1.")
) ; if 
(setvar "CMDECHO" 0)
(vl-cmdf "_UNDO" "_E")
(princ)
)
Просмотров: 3480
 
Непрочитано 12.05.2019, 23:37
#2
Кулик Алексей aka kpblc
Moderator

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


Функции требуется vla-указатель, о чем она честно и сообщает. Преобразовывай ename в vla - и все заработает
__________________

---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 13.05.2019, 16:01
#3
maksorli


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


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
Функции требуется vla-указатель, о чем она честно и сообщает. Преобразовывай ename в vla - и все заработает
Спасибо, но если я правильно понял, я уж пытался это сделать ;(setq p1 (vlax-safearray->list (vlax-variant-value (vla-get-coordinates (vlax-ename->vla-object obj1)))))
результат такой же.
maksorli вне форума  
 
Непрочитано 13.05.2019, 17:02
#4
Кулик Алексей aka kpblc
Moderator

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


Для начала: разве у объекта TEXT / MTEXT вообще есть свойство Coordinates?
Туплю... Дай немного времени

----- добавлено через ~14 мин. -----
Как вариант:
Код:
[Выделить все]
 (vl-load-com)

(defun txt->mlead (/ ent adoc pt pt2 obj)
  (if (and (= (type (setq ent (vl-catch-all-apply (function (lambda () (ssget "_+.:S:E:L" '((0 . "MTEXT"))))))))
              'pickset
              ) ;_ end of =
           (setq ent (ssname ent 0))
           (setq ent (vlax-ename->vla-object ent))
           ) ;_ end of and
    (progn (setq pt (vlax-safearray->list (vlax-variant-value (vla-get-insertionpoint ent))))
           (if (and (= (type
                         (setq pt2 (vl-catch-all-apply (function (lambda () (getpoint pt "\nFinal point <Cancel> : ")))))
                         ) ;_ end of type
                       'list
                       ) ;_ end of =
                    pt2
                    ) ;_ end of and
             (progn (vla-startundomark (setq adoc (vla-get-activedocument (vlax-get-acad-object))))
                    (setq obj (vla-addmleader (vla-objectidtoobject adoc (vla-get-ownerid ent))
                                              (vlax-make-variant
                                                (vlax-safearray-fill (vlax-make-safearray vlax-vbdouble '(0 . 5)) (append pt pt2))
                                                ) ;_ end of vlax-make-variant
                                              0
                                              ) ;_ end of vla-addmleader
                          ) ;_ end of setq
                    (vla-put-contenttype obj acmtextcontent)
                    (vla-put-textstring obj (vla-get-textstring ent))
                    (vla-erase ent)
                    (vla-endundomark adoc)
                    ) ;_ end of progn
             ) ;_ end of if
           ) ;_ end of progn
    (princ "\nNothing selected")
    ) ;_ end of if
  (princ)
  ) ;_ end of defun
__________________

---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 14.05.2019, 15:14
#5
maksorli


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


Спасибо! но только с Mtext работает, а вот с обычным нет :

TXT->MLEAD
Укажите объекты:
Nothing selected
maksorli вне форума  
 
Автор темы   Непрочитано 17.05.2019, 17:31
#6
maksorli


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


Пробовал через expresstools c помощью txt2mtxt изменить тип, но похоже меняется insertionpoint, к тому же массово эта функция не работает. Попробую переформулировать задачу, что первой точкой мультивыноски должна быть левая нижняя точка текста. Прикладываю пример исходного документа. Для графического отображения необходимо "растащить" текс. т.к. текстовых полей очень много, искомая функция очень бы помогла.
Вложения
Тип файла: dwg
DWG 2013
Пример.dwg (25.4 Кб, 9 просмотров)
maksorli вне форума  
 
Непрочитано 19.05.2019, 17:35
#7
koMon


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


Цитата:
Сообщение от maksorli Посмотреть сообщение
с Mtext работает, а вот с обычным нет
1.
Код:
[Выделить все]
  (ssget "_+.:S:E:L" '((0 . "TEXT")))
2.
Код:
[Выделить все]
 (ssget "_+.:S:E:L" '((-4 . "<or") (0 . "MTEXT") (0 . "TEXT") (-4 . "or>")))
koMon вне форума  
 
Непрочитано 19.05.2019, 20:17
#8
Кулик Алексей aka kpblc
Moderator

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


Или
Код:
[Выделить все]
 (ssget "_+.:S:E:L" '((0 . "*TEXT")))
__________________

---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 19.05.2019, 21:39
#9
koMon


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



можно и так
Код:
[Выделить все]
 (ssget "_+.:S:E:L" '((0 . "TEXT,MTEXT")))
koMon вне форума  
 
Автор темы   Непрочитано 22.05.2019, 17:29
#10
maksorli


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


Спасибо!
maksorli вне форума  
 
Непрочитано 30.05.2019, 10:45
#11
Galiev_art


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


Добрый день. Подскажите пожалуйста, что надо изменить в коде выше, чтобы точкой привязки мультивыноски была не левая нижняя точка, а точка середины однострочного текста. Выравнивание текста "Середина".

----- добавлено через ~45 мин. -----
Или лучше будет сделать так, чтобы можно было выбирать любую точку привязки к тексту
Galiev_art вне форума  
 
Непрочитано 20.09.2019, 17:45
1 | #12
koMon


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


MTL_to_MLeader.fas.rar -> c:MTL_to_MLeader
Конвертация текста, мтекста, текстовой выноски в мвыноску.
Вложения
Тип файла: rar MTL_to_MLeader.fas.rar (8.1 Кб, 31 просмотров)
koMon вне форума  
 
Непрочитано 25.09.2019, 00:29
#13
skkkk

AutoCAD_2008->2011
 
Регистрация: 20.03.2008
Московская область
Сообщений: 2,289


koMon, почему-то пишет, что архив поврежден или имеет неизвестный формат.
skkkk на форуме  
 
Непрочитано 25.09.2019, 02:09
#14
Сергей812


 
Регистрация: 10.08.2013
Сообщений: 7,017


Цитата:
Сообщение от skkkk Посмотреть сообщение
что архив поврежден или имеет неизвестный формат.
rar5 формат архива, предыдущими версиями не поддерживается распаковка
Сергей812 вне форума  
 
Непрочитано 25.09.2019, 11:02
#15
koMon


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


Цитата:
Сообщение от Сергей812 Посмотреть сообщение
rar5 формат архива, предыдущими версиями не поддерживается распаковка
точно
Миниатюры
Нажмите на изображение для увеличения
Название: RAR.jpg
Просмотров: 34
Размер:	113.0 Кб
ID:	218221  
koMon вне форума  
 
Непрочитано 26.09.2019, 10:26
1 | #16
koMon


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


как это работает
Миниатюры
Нажмите на изображение для увеличения
Название: MTL_to_MLeader.gif
Просмотров: 66
Размер:	4.83 Мб
ID:	218258  
koMon вне форума  
 
Непрочитано 26.09.2019, 15:00
#17
skkkk

AutoCAD_2008->2011
 
Регистрация: 20.03.2008
Московская область
Сообщений: 2,289


Цитата:
Сообщение от Сергей812 Посмотреть сообщение
rar5 формат архива, предыдущими версиями не поддерживается распаковка
Что ж, удобно. А где скачать рартрувью не подскажете?
skkkk на форуме  
 
Непрочитано 26.09.2019, 15:15
1 | #18
Сергей812


 
Регистрация: 10.08.2013
Сообщений: 7,017


Offtop:
Цитата:
Сообщение от skkkk Посмотреть сообщение
А где скачать рартрувью не подскажете?
рартрувью 7-Zip называется) Бесплатная программа, поддержка распаковки rar5 c 2015 года.
Сергей812 вне форума  
 
Непрочитано 26.09.2019, 16:25
#19
koMon


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


Цитата:
Сообщение от skkkk Посмотреть сообщение
А где скачать рар
www.rarlab.com
koMon вне форума  
 
Непрочитано 01.10.2019, 11:38
#20
koMon


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


Больше удобства, больше прикольности в одной общей сессии.
Миниатюры
Нажмите на изображение для увеличения
Название: MTL_to_MLeader_2.gif
Просмотров: 52
Размер:	1.54 Мб
ID:	218404  
koMon вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > Преобразование текста в мультивыноску, с сохранением точки вставки текста

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
LISP Объединение нескольких объектов многострочного текста в один Cren LISP 8 26.02.2016 08:57
LISP. Выравнивание текста по двум точкам. Krieger Готовые программы 10 24.12.2011 16:02
Преобразование вершин TIN модели (треугольников) в точки с координатой Z WeMaN Разное 16 09.07.2009 13:49
Преобразование вершин горизонталей в точки WeMaN Программирование 4 05.03.2009 10:17
Rotate текстовых элементов относительно точки вставки plaz AutoCAD 2 19.09.2003 08:37