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

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > LISP. Команда TXTEXP. Передать объект.

LISP. Команда TXTEXP. Передать объект.

Ответ
Поиск в этой теме
Непрочитано 15.07.2025, 15:52 #1
LISP. Команда TXTEXP. Передать объект.
Gretech89
 
Регистрация: 13.02.2016
Сообщений: 64

Доброе время суток!

Споткнулся о команду TXTEXP. Цель: передать команде TXTEXP объект (Мтекст) для обработки и продолжить выполнение скрипта после обработки.
Стандартным методом через "command "_.TXTEXP" сделать не получается, возникает ошибка "Неизвестная команда "VLIDE".
Единственным способом, которым мне удалось передать объект команде TXTEXP, это с помощью vla-SendCommand. Полный листинг:
Код:
[Выделить все]
 (defun c:Text2line (/ actdoc ss)
  
(setq actdoc (vla-get-activedocument (vlax-get-acad-object)))
(setq ss (ssget "_X" '((0 . "MTEXT"))))
(sssetfirst nil ss)
(vla-SendCommand actdoc "_.TXTEXP ")

(setq ss (vla-get-ActiveSelectionSet actdoc))
(vla-Clear ss)
(vla-Select ss acSelectionSetAll nil nil (vlax-safearray-fill
(vlax-make-safearray vlax-vbinteger '(0 . 0)) '(0))
(vlax-safearray-fill (vlax-make-safearray vlax-vbvariant '(0 . 0))
'("POLYLINE")))

(vlax-for p2l ss (vla-Explode p2l))
(vlax-for p2l ss (vla-Delete p2l))

(vla-Clear ss)
(vla-Delete ss)

(princ)
)
Но в этом случае после обработки идёт прерывание и вторая часть лиспа не выполняется. Кто-нибудь знает как можно это побороть?

P.S. Команды WMFOUT/WMFIN (методы vla-Export/vla-Import) работают, но не обрабатывают к сожалению трафаретный шрифт (Trafaret Kit), поэтому не вариант.
P.S.S. Пробовал разбивать лисп на 2 отдельных скрипта и запускать последовательно через сценарий, но безуспешно.

Вложения
Тип файла: dwg
DWG 2010
Образец.dwg (79.1 Кб, 4 просмотров)

Просмотров: 379
 
Непрочитано 16.07.2025, 14:58
1 | #2
koMon


 
Блог
 
Регистрация: 26.09.2017
Сообщений: 1,813


Цитата:
Сообщение от Gretech89 Посмотреть сообщение
как можно это побороть?
например так
Код:
[Выделить все]
 
(defun c:explode_text_to_lines ()
	(ssget "_x" '((0 . "mtext")))
	(vla-postcommand (vla-get-activedocument (vlax-get-acad-object)) "_txtexp _p  ")
	(vla-postcommand (vla-get-activedocument (vlax-get-acad-object)) "_explode _p  ")
)
__________________
K Lisp
koMon вне форума  
 
Автор темы   Непрочитано 16.07.2025, 16:14
#3
Gretech89


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


koMon, как же вы меня выручили, спасибо огромное!
Gretech89 вне форума  
 
Автор темы   Непрочитано 16.07.2025, 22:23
#4
Gretech89


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


koMon, попробовал ради эксперимента зациклить команды и добавить сохранение файлов. Но похоже из txtexp и explode уже чего-то большего не вытянуть..

Лисп для проверки и экспериментов:
Код:
[Выделить все]
 (defun c:explode_text_to_lines ()

(setq actdoc (vla-get-activedocument (vlax-get-acad-object))
      mSpace (vla-get-ModelSpace actdoc)
      path (getvar "dwgprefix")
      pt (vlax-3D-point 0 0 0)
      nums '("1" "2" "3"))

(foreach num nums

  (vlax-for plines mSpace
    (if (= (vla-get-ObjectName plines) "AcDbPolyline")
      (vla-Delete plines)
    )
  )

  (vla-AddMText mSpace pt 0 (setq name (strcat "Drawing_" num)))

  (ssget "_x" '((0 . "mtext")))
  (vla-postcommand (vla-get-activedocument (vlax-get-acad-object)) "_txtexp _p  ")
  (vla-postcommand (vla-get-activedocument (vlax-get-acad-object)) "_explode _p  ")

  (setq path-name (strcat path name))
  (vla-saveas actdoc path-name)

)

(princ)

)
Gretech89 вне форума  
 
Непрочитано вчера, 07:31
#5
name02


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


23 и 24 строки можно вынести за пределы (foreach num nums ...)
name02 вне форума  
 
Непрочитано вчера, 08:29
#6
kp+

идущий по граблям
 
Регистрация: 26.05.2005
Сообщений: 5,182


Txtexp - это не стандартная команда, а лисп из et. Можно расковырять и вызывать не команду, а функции.
Ехplode тоже необязательно вызывать командой, лучше метод explode.
Зачем сначала создавать мтекст, а потом взрывать - тоже с утра непонятно ....
kp+ вне форума  
 
Непрочитано вчера, 09:05
#7
koMon


 
Блог
 
Регистрация: 26.09.2017
Сообщений: 1,813


Цитата:
Сообщение от kp+ Посмотреть сообщение
непонятно ....
чтобы получить напр. контуры литер в отрезках.

Цитата:
Сообщение от kp+ Посмотреть сообщение
расковырять
и без ковыряния понятно, что используется wmfout и wmfin.
Миниатюры
Нажмите на изображение для увеличения
Название: MT_vs_Lines.jpg
Просмотров: 8
Размер:	42.5 Кб
ID:	268849  
__________________
K Lisp
koMon вне форума  
 
Автор темы   Непрочитано вчера, 11:27
#8
Gretech89


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


Как уже указывал выше команды WMFOUT/WMFIN (методы vla-Export/vla-Import) не обрабатывают трафаретный шрифт - Trafaret Kit. В файлик WMF экспортируется текст, вместо кривых..

Код:
[Выделить все]
  (defun c:explode_text_to_lines (/ actdoc mSpace path pt nums wmfScale fname dir ss)

(setq actdoc (vla-get-activedocument (vlax-get-acad-object))
      mSpace (vla-get-ModelSpace actdoc)
      path (getvar "dwgprefix")
      pt (vlax-3D-point 0 0 0)
      nums '("1" "2" "3")
      wmfScale 2
)

(foreach num nums

  (vlax-for plines mSpace
    (if (= (vla-get-ObjectName plines) "AcDbPolyline")
      (vla-Delete plines)
    )
  )

  (vla-AddMText mSpace pt 0 (setq name (strcat "Drawing_" num)))

	    (vla-Regen actdoc acActiveViewport)
	    (setq fname (strcat (getvar "TEMPPREFIX") "text2poly.wmf"))
	    (setq dir (vl-string-subst "" ".wmf" fname))
	    (setq ss (vla-get-ActiveSelectionSet actdoc))
	    (vla-Clear ss)
	    (vla-Select ss acSelectionSetAll nil nil (vlax-safearray-fill
	    (vlax-make-safearray vlax-vbinteger '(0 . 0)) '(0))
	    (vlax-safearray-fill (vlax-make-safearray vlax-vbvariant '(0 . 0))
	    '("MTEXT")))
	    (vla-Export actdoc dir "wmf" ss)
	    (vla-Delete ss)
	    (vla-Import actdoc fname pt wmfScale)
 	    (vl-file-delete fname)

  (setq path-name (strcat path name))
  (vla-saveas actdoc path-name)

)

(princ)

)
----- добавлено через ~2 мин. -----
name02, не.. на выходе нужно получить 3 сохраненных файлика.
Вложения
Тип файла: zip Trafaret Kit.zip (17.3 Кб, 0 просмотров)

Последний раз редактировалось Gretech89, вчера в 11:50. Причина: Добавил лисп
Gretech89 вне форума  
 
Непрочитано вчера, 13:06
1 | #9
koMon


 
Блог
 
Регистрация: 26.09.2017
Сообщений: 1,813


Цитата:
Сообщение от Gretech89 Посмотреть сообщение
Trafaret Kit. В файлик WMF экспортируется текст, вместо кривых..
если отзеркалить текст перед экспортом в wmf (mirrtext = 1), то будут кривые)
__________________
K Lisp
koMon вне форума  
 
Автор темы   Непрочитано вчера, 14:43
#10
Gretech89


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


koMon, благодарствую я вот что-то не дошел до этого, хотя кучу всего перепробовал

----- добавлено через ~8 мин. -----
Ещё вариант обнаружил: менять коэффициент сжатия-растяжения, скажем, на 1.01

Последний раз редактировалось Gretech89, вчера в 14:52.
Gretech89 вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > LISP. Команда TXTEXP. Передать объект.



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
LISP. Команда BACTION. Как передать имя параметра? Gretech89 LISP 6 09.07.2025 14:22
LISP. Создание поля (field), ссылающегося на текстовое значение ячейки таблицы. skkkk Готовые программы 144 25.07.2024 10:48
После применения offset не удаляется (не редактируется) исходный объект Nata1 AutoCAD 7 07.04.2015 09:08
lisp команда смены слоя gesper LISP 9 28.03.2013 21:13
Lisp. Не вставляет значения в базу access. Zaghim LISP 2 11.07.2012 14:29