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

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

Как создать набор из текстовых объектов по части содержимого?

Ответ
Поиск в этой теме
Непрочитано 24.01.2011, 15:59 #1
Как создать набор из текстовых объектов по части содержимого?
SilvioManuel
 
Регистрация: 11.08.2010
Сообщений: 124

Как создать набор из текстовых объектов по части содержимого? Возникла необходимость перенести на отдельный слой значения архивных номеров, кот. описаны так: (арх.N )
Просмотров: 3528
 
Непрочитано 24.01.2011, 16:14
1 | #2
АлексЮстасу

топограф, технолог
 
Блог
 
Регистрация: 24.05.2009
Москва
Сообщений: 3,072


Quick Select-->Text-->Contents, включить опцию *Wildcard Match, ввести в строку Value (арх.N)* или *арх.N*

Последний раз редактировалось АлексЮстасу, 24.01.2011 в 16:19.
АлексЮстасу вне форума  
 
Непрочитано 24.01.2011, 16:18
#3
Лиспер


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


Либо использовать быстрый выбор, либо программку:
Код:
[Выделить все]
 (vl-load-com)

(defun c:chtlayer (/ adoc mask caps layer)
  (vla-startundomark
    (setq adoc (vla-get-activedocument (vlax-get-acad-object)))
    ) ;_ end of vla-startundomark
  (if
    (and
      (= (type
           (setq
             mask (vl-catch-all-apply
                    (function
                      (lambda ()
                        (getstring t
                                   "\nВведите маску текста <Отмена> : "
                                   ) ;_ end of getstring
                        ) ;_ end of lambda
                      ) ;_ end of function
                    ) ;_ end of vl-catch-all-apply
             ) ;_ end of setq
           ) ;_ end of type
         'str
         ) ;_ end of =
      (/= mask "")
      (=
        (type
          (setq
            caps (vl-catch-all-apply
                   (function
                     (lambda ()
                       (initget "Да Нет Yes No _ Y N Y N")
                       (cond
                         ((getkword
                            "\nУчитывать регистр [Да/Нет] <Нет> : "
                            ) ;_ end of GETKWORD
                          )
                         (t "N")
                         ) ;_ end of cond
                       ) ;_ end of lambda
                     ) ;_ end of function
                   ) ;_ end of vl-catch-all-apply
            ) ;_ end of setq
          ) ;_ end of type
        'str
        ) ;_ end of =
      (= (type (setq layer
                      (vl-catch-all-apply
                        (function
                          (lambda ()
                            (getstring
                              t
                              "\nИмя слоя, на который надо поместить тексты <Отмена> : "
                              ) ;_ end of getstring
                            ) ;_ end of lambda
                          ) ;_ end of function
                        ) ;_ end of vl-catch-all-apply
                     ) ;_ end of setq
               ) ;_ end of type
         'str
         ) ;_ end of =
      (/= layer "")
      ) ;_ end of and
     (progn
       (if (= caps "Y")
         (setq mask (strcase mask))
         ) ;_ end of if
       (foreach item
                ((lambda (/ tab item selset)
                   (repeat (setq tab  nil
                                 item (sslength (setq selset (ssget "_X"
                                                                    (list '(0 . "TEXT")
                                                                          (cons 1 mask)
                                                                          ) ;_ end of list
                                                                    ) ;_ end of ssget
                                                      ) ;_ end of setq
                                                ) ;_ end of sslength
                                 ) ;_ end setq
                     (setq
                       tab (cons (ssname selset (setq item (1- item)))
                                 tab
                                 ) ;_ end of cons
                       ) ;_ end of setq
                     ) ;_ end of repeat
                   ) ;_ end of lambda
                 )
         (vl-catch-all-apply
           (function
             (lambda ()
               (entmod (subst (cons 8 layer)
                              (assoc 8 (entget item))
                              (entget item)
                              ) ;_ end of subst
                       ) ;_ end of entmod
               (entupd item)
               ) ;_ end of lambda
             ) ;_ end of function
           ) ;_ end of vl-catch-all-apply
         ) ;_ end of foreach
       ) ;_ end of progn
     ) ;_ end of if
  (vla-endundomark adoc)
  (princ)
  ) ;_ end of defun

(princ "\nPress chtlayer to start command")
(princ)
__________________
(/= RegDate StartReadDate)
Лиспер вне форума  
 
Непрочитано 24.01.2011, 20:26
#4
Кулик Алексей aka kpblc
Moderator

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


То, что касается оформления, перенесено в http://forum.dwg.ru/showthread.php?t=9952
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 25.01.2011, 09:25
#5
SilvioManuel


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


Цитата:
Сообщение от Лиспер Посмотреть сообщение
Либо использовать быстрый выбор, либо программку:
мне не нужен выбор букв (арх.). Мне нужен выбор (арх.) со всеми приписанными номерами. У меня русифицированная версия автокада и я перепробовал все значения выбора по опции (Соntents или Содержимое) - не выходит. Я загрузил ваш лисп, ввёл команду и она мне что-то предлагает. Не подскажите как дальше действовать? Вводить символ ">" и писать значение? Да, и возможно ли более краткое описание функции для ввода?

Последний раз редактировалось SilvioManuel, 25.01.2011 в 09:27. Причина: дополнение вопроса
SilvioManuel вне форума  
 
Непрочитано 25.01.2011, 09:28
#6
Лиспер


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


Маска текста: арх.*
То есть обязательны символы "арх." и потом любое количество любых символов.
Учитывать регистр - решать пользователю. Если ответить "Да", то будут выбираться тексты и "арх.", и "Арх.", и "аРх."
Ну а имя слоя надо вколачивать руками. Если слой не существует, он будет создан.
__________________
(/= RegDate StartReadDate)
Лиспер вне форума  
 
Автор темы   Непрочитано 25.01.2011, 09:51
#7
SilvioManuel


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


когда я вбиваю после символов (_> значение (арх. и ептег, то он добавляет ещё одну скобку к этим трём символам. Я что-то не так сделал?
SilvioManuel вне форума  
 
Непрочитано 25.01.2011, 10:05
#8
Лиспер


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


Если есть символы "(_ >", значит, скопировано не все: нарушено согласование скобок.
__________________
(/= RegDate StartReadDate)
Лиспер вне форума  
 
Автор темы   Непрочитано 25.01.2011, 10:18
#9
SilvioManuel


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


Т.е. не всё скопированно что выложенно или то может быть ещё выложенно? Ctrl+A,Ctrl+C,Ctrl+V - это правильно? Всё равно эти символы выходят. Тот код который выложен корректен?
SilvioManuel вне форума  
 
Непрочитано 25.01.2011, 11:46
#10
Лиспер


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


SilvioManuel, посмотри видео http://forum.dwg.ru/showpost.php?p=6...postcount=2554 - там все нормально показано.
Плюс статья Как использовать лисп, опубликованный на форуме
__________________
(/= RegDate StartReadDate)
Лиспер вне форума  
 
Автор темы   Непрочитано 25.01.2011, 12:26
#11
SilvioManuel


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


может я неправильно команду ввожу?(defun c:chtlayer (/ adoc mask caps layer). или не тот блокнот ипользую? А тип операцинной системы имеет значение? у меня ХР
SilvioManuel вне форума  
 
Непрочитано 25.01.2011, 12:32
1 | #12
Лиспер


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


Если лисп уже загружен, то в ком.строку достаточно ввести chtlayer - и команда будет запущена на выполнение
__________________
(/= RegDate StartReadDate)
Лиспер вне форума  
 
Автор темы   Непрочитано 25.01.2011, 12:39
#13
SilvioManuel


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


всё заработало. Спасибо. Видно впервый раз я неполностью скопировал, когда ввёл команду chtlayer он выдал что незнает её. Сейчас проблема в том что я ввожу маску "(арх.", затем подтверждаю регистр, потом вбиваю название слоя и ... ничего не происходит. Может подредактировать код чтобы он просто выделял ввесь текст с содержанием(арх. а там я его сам закину в слой

Последний раз редактировалось SilvioManuel, 25.01.2011 в 12:51.
SilvioManuel вне форума  
 
Непрочитано 27.01.2011, 10:48
#14
privodnik

ЭС.
 
Регистрация: 15.05.2009
МО
Сообщений: 191


лисп запускается, предлагает ввести маску, регистр да\нет, запрашивает имя слоя...но при попытке выполнения выдает:"; ошибка: неверный тип аргумента: lselsetp nil"
privodnik вне форума  
 
Непрочитано 27.01.2011, 10:51
#15
Лиспер


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


Файлик хотелось бы глянуть и критерии выполнения. Мне лениво как-то выдумывать...
__________________
(/= RegDate StartReadDate)
Лиспер вне форума  
 
Непрочитано 27.01.2011, 11:36
#16
Disney

Геодезист
 
Регистрация: 12.03.2009
Сибирь (где медведи по улицам ходят)
Сообщений: 860
Отправить сообщение для Disney с помощью Skype™


Ещё раз посмотри внимательно "Быстрый выбор"
Вложения
Тип файла: flv арх.flv (1.23 Мб, 79 просмотров)
__________________
Почему все вдруг становятся умными, когда уже не надо?
Disney вне форума  
 
Непрочитано 27.01.2011, 13:08
#17
privodnik

ЭС.
 
Регистрация: 15.05.2009
МО
Сообщений: 191


Цитата:
Сообщение от Disney Посмотреть сообщение
Ещё раз посмотри внимательно "Быстрый выбор"
ага, с текстом понятно...
а еще мне надо найти мультивыноски с определенной частью текста, это как-то возможно? а то что-то не выходит...
privodnik вне форума  
 
Непрочитано 27.01.2011, 14:02
#18
Disney

Геодезист
 
Регистрация: 12.03.2009
Сибирь (где медведи по улицам ходят)
Сообщений: 860
Отправить сообщение для Disney с помощью Skype™


privodnik, у мультивыносок есть точно такое же свойство "содержимое"
[IMG]http://s39.***********/i086/1101/6b/4ac7f852dea3.jpg[/IMG]
, правда если в качестве содержимого выбрать блок
[IMG]http://s41.***********/i094/1101/f5/d95a43d5288c.jpg[/IMG]
, который в свою очередь может содержать текст или атрибут, то через быстрый выбор, по содержимому его уже не найдёшь
__________________
Почему все вдруг становятся умными, когда уже не надо?
Disney вне форума  
 
Непрочитано 27.01.2011, 15:05
#19
privodnik

ЭС.
 
Регистрация: 15.05.2009
МО
Сообщений: 191


вот ведь, блин, я ж так и пробовал-не получалось)
а ща все пашет! СПС за разъяснения!
privodnik вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > AutoCAD > Как создать набор из текстовых объектов по части содержимого?



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Набор объектов DEM Программирование 21 26.03.2014 19:11
Редактирование группы текстовых объектов с минимальной затратой времени FedoZZZ AutoCAD 1 10.12.2008 01:57
FILTER / фильтр BM60 Справочник команд 0 08.07.2008 15:35
-= Вместо текстовых объектов видны только рамки =- CADastr AutoCAD 5 21.06.2005 11:53
Есть ли "клонирование" объектов (текстовых и др.) gress AutoCAD 4 16.04.2004 13:42