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

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > Как выбрать текст АвтоЛиспом не только из текущего слоя но из всех доступных слоев (использую entnext)?

Как выбрать текст АвтоЛиспом не только из текущего слоя но из всех доступных слоев (использую entnext)?

Ответ
Поиск в этой теме
Непрочитано 25.08.2009, 14:14 #1
Как выбрать текст АвтоЛиспом не только из текущего слоя но из всех доступных слоев (использую entnext)?
lexluther
 
Регистрация: 19.03.2009
Сообщений: 51

Всем привет.

Следуя вашим советам и ответам на мои предыдущие вопросы написал следующий код:

Код:
[Выделить все]
(defun export-text-to()
(vl-load-COM)
  (setq exp-str-exist nil)
  (if (setq lm-object (vlax-get-or-create-object "ACADLMConnector.ACADLMConnectorKern"))
    (progn      
      (vlax-invoke-method lm-object "LMClear")
      (setq text-entity (entnext))
      (while text-entity
    (setq text-element (entget text-entity)
          text-type (cdr (assoc 0 text-element))
          )
    (if (or (= text-type "TEXT") (= text-type "MTEXT"))
      (progn
        (setq text  (remove-mtext-formatting (cdr (assoc 1 text-element))))
        (vlax-invoke-method lm-object "LMAddToLM" text)
        (setq exp-str-exist 666)        )
      )
    (setq text-entity (entnext text-entity))
    )
      (cond
    (exp-str-exist (progn
             (vlax-invoke-method lm-object "LMExportToLM")
             (alert "All done")))
    (t (alert "No TEXT/MTEXT objects found"))        
    )   
      (vlax-release-object lm-object)
      (setq lm-object nil)
      )
    (alert "ACADLMConnector.ACADLMConnectorKern not found. You need to reinstall LabelMark and LabelMark AutoCAD Add-ins.")
    )
  )
Я тут не привожу кода функций remove-mtext-formatting он просто убирает форматирование MTEXT, также код COM объекта предельно прост, состоит из трех методов формирующих внутренний массив строк и я его здесь тоже не привожу (так как они не имеют отношения к проблеме и стабильно работают).

Сегодня с утра наши тестеры меня шокировали, оказывается что текст который я экспортирую выбирается только из текущего слоя (Layer), можно как то видоизменить код чтобы выбирать из всех слоев сразу?

С уважением.
Просмотров: 1586
 
Непрочитано 25.08.2009, 14:24
#2
Кулик Алексей aka kpblc
Moderator

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


Код:
[Выделить все]
(defun export-text-to (/ _dwgru-conv-pickset-to-list exp-str-exist lm-object)

  (defun _dwgru-conv-pickset-to-list (value / tab item)
    (repeat (setq tab  nil
                  item (sslength value)
                  ) ;_ end setq
      (setq tab (cons (ssname value (setq item (1- item))) tab))
      ) ;_ end repeat
    ) ;_ end defun

  (vl-load-com)
  (setq exp-str-exist nil)
  (if (setq lm-object (vlax-get-or-create-object "ACADLMConnector.ACADLMConnectorKern"))
    (progn
      (vlax-invoke-method lm-object "LMClear")
      (foreach item (_dwgru-conv-pickset-to-list (ssget "_X" '((0 . "*TEXT"))))
        (setq item (remove-mtext-formatting (vla-get-textstring (vlax-ename->vla-object item))))
        (vlax-invoke-method lm-object "LMAddToLM" item)
        (setq exp-str-exist 666)
        ) ;_ end of foreach
      (cond
        (exp-str-exist
         (progn
           (vlax-invoke-method lm-object "LMExportToLM")
           (alert "All done")
           ) ;_ end of progn
         )
        (t (alert "No TEXT/MTEXT objects found"))
        ) ;_ end of cond
      (vlax-release-object lm-object)
      (setq lm-object nil)
      ) ;_ end of progn
    (alert
      "ACADLMConnector.ACADLMConnectorKern not found. You need to reinstall LabelMark and LabelMark AutoCAD Add-ins."
      ) ;_ end of alert
    ) ;_ end of if
  ) ;_ end of defun
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 25.08.2009, 14:40
#3
lexluther


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


Люди, прошу прощения за оффтоп, но вы СУПЕР!!!!! ВЫ ПРОСТО ГЕНИИ!! Я таких шарящих, профессиональных и дружественных людей ни на одном форуме не видел. ВАМ ПРОСТО ПЛАНЕТАРНЫЙ РЕСПЕКТ!!! Спасибо за ваш ресурс и вообще!!! Дополнительное спасибо Кулик Алексей aka kpblc. Я вас просто уважаю. Еще раз огромное спасибо!!!!!!
lexluther вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > Как выбрать текст АвтоЛиспом не только из текущего слоя но из всех доступных слоев (использую entnext)?

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Рифмоплетство. Kryaker Разное 554 14.11.2023 11:59
Для чего нужны фильтры слоев?Как ими пользоваться? Aysulu AutoCAD 43 17.04.2019 10:59
Как получить MTEXT но без форматирования, только текст? lexluther Программирование 14 13.09.2009 22:52
ЮМОР 2006 =) Perezz!! Разное 1122 04.01.2007 00:46