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

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > Собрать содержимое МТЕкста с разных листов в один документ/объект

Собрать содержимое МТЕкста с разных листов в один документ/объект

Ответ
Поиск в этой теме
Непрочитано 08.02.2017, 12:40 #1
Собрать содержимое МТЕкста с разных листов в один документ/объект
Immortal_6666
 
вольный копейщик
 
Регистрация: 03.11.2010
Сообщений: 132

Добрый день)
Ситуация следующая - есть проект с листами, на каждом листе есть Мтекст с названием листа. Листов в проекте много >10. По завершении проекта требуется составить список из этих названий (список листов). Сейчас приходится щелкать на каждый лист, заходить в Мтекст, все выделять, копировать в Word и так для каждого листа. Получается долго и нудно. Хотелось бы как-то автоматизировать это дело. Знаком с блоками, полями, просто в данном случае никак не могу придумать решение. Может кто-то подскажет оригинальный способ.

Упрощая задачу - можно просто собрать содержимое этих мтекстов в список внутри файла, а потом уже 1 раз скопировать в word. Но как это сделать не придумать... Насколько я понимаю, взять содержимое объекта на листе через поле и вставить значение в модель нельзя..

Были мысли писать эти названия внутри 1 мтекста в модели, а потом вставлять в листы через ВЭ нужную часть этого списка, но листы в процессе работы постоянно меняются местами, названия меняются тоже - так еще большая головная боль получается.

Почти все части проекта смог автоматизировать настолько, насколько это возможно - через дин. блоки, поля, свойства документа, палитры, аннотативность, а вот с этой задачей бьюсь уже давно.
Спасибо.
Просмотров: 8139
 
Непрочитано 08.02.2017, 13:42
#2
baksconstructor


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


Пример файла приложите.
baksconstructor вне форума  
 
Непрочитано 08.02.2017, 13:59
#3
kp+

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


Цитата:
Сообщение от Immortal_6666 Посмотреть сообщение
Знаком с блоками, полями, просто в данном случае никак не могу придумать решение.
Извлечение данных (_dataextraction) может работать со многими чертежами одновременно.
Цитата:
Сообщение от Immortal_6666 Посмотреть сообщение
на каждом листе есть Мтекст с названием листа
Гарантированно один Мтекст на каждый лист? Тогда вообще элементарно. Но если есть другие надписи, выполненные Мтекстом, нужные надо будет отфильтровать (по цвету, слою или другим признакам).
Или просто убрать из результатов (таблицы или внеш. файла) то, что явно не подходит.

Цитата:
Сообщение от Immortal_6666 Посмотреть сообщение
Почти все части проекта смог автоматизировать настолько, насколько это возможно - через дин. блоки, поля, свойства документа, палитры, аннотативность, а вот с этой задачей бьюсь уже давно.
Осваивайте подшивки.
kp+ вне форума  
 
Автор темы   Непрочитано 08.02.2017, 14:01
#4
Immortal_6666

вольный копейщик
 
Регистрация: 03.11.2010
Сообщений: 132


baksconstructor, примерно так.

kp+, нет, текст там конечно не один.

Подшивки мне тут ничем не помогут, как мне кажется. Если я работаю в 1 файле и без коллективной работы, вообще не вижу смысла в подшивках - публикация решает все те же задачи.
Вложения
Тип файла: dwg
DWG 2007
пример.dwg (91.9 Кб, 17 просмотров)
Immortal_6666 вне форума  
 
Непрочитано 08.02.2017, 14:12
1 | #5
baksconstructor


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


Цитата:
Сообщение от Immortal_6666 Посмотреть сообщение
примерно так.
Тю, я то думал что там штампы чертежей.
У Вас по одной строчке в листе, тогда kp+ прав, смотрите принтскрин. (если Вы нас не обманули и реальный чертеж не другой)
Миниатюры
Нажмите на изображение для увеличения
Название: 3.jpg
Просмотров: 65
Размер:	190.7 Кб
ID:	183293  
baksconstructor вне форума  
 
Непрочитано 08.02.2017, 14:14
#6
kp+

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


Цитата:
Сообщение от Immortal_6666 Посмотреть сообщение
нет, текст там конечно не один.
По файлу примера этого не скажешь Но, думаю, Вы уж как-нибудь разберетесь, чем нужный текст отличается от прочих.

Offtop:
Цитата:
Сообщение от Immortal_6666 Посмотреть сообщение
Если я работаю в 1 файле и без коллективной работы, вообще не вижу смысла в подшивках - публикация решает все те же задачи.
А он есть даже при таком раскладе. И кроется в том, что нумерация листов, их наименования и перекрестные ссылки хранятся в подшивке и автоматически обновляются. Без подшивки надо все хранить в голове. Впрочем, это сотни раз обсуждалось в "профильных" темах и здесь не к месту.
kp+ вне форума  
 
Непрочитано 08.02.2017, 14:56
1 | #7
skkkk


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


Примерно так?
Код:
[Выделить все]
 (defun C:TEST ( / ss i str)
	(vl-load-com)
	(setq ss (ssget "_X" '((0 . "MTEXT")(8 . "текст"))))
	(repeat (setq i (sslength ss))
		(setq vla-txt (vlax-ename->vla-object (ssname ss (setq i (1- i)))))
		(if (null str)
			(setq str (vla-get-TextString vla-txt))
			(setq str (strcat str "\n" (vla-get-TextString vla-txt)))
		)
	)
	(vla-AddMText 
		(vla-get-ModelSpace (vla-get-activedocument (vlax-get-acad-object)))
		(vlax-3d-point (list 0.0 0.0 0.0))
		0
		str
	)
	(vl-cmdf "_CUTCLIP" (entlast) "")
	(vl-cmdf "_PASTECLIP" pause)
)
Тестовая версия, запускать в модели. Соберет содержимое всех мтекстов на слое "текст" и на курсоре повиснет мтекст с собранным содержимым. Порядок названий пока зависит от очередности создания мтекстов на листах, но это поправимо. Для того, чтобы эта команда стала "рабочей" (могла бы использоваться на реальных чертежах), помимо прочих доработок,
Цитата:
Сообщение от kp+ Посмотреть сообщение
нужные надо будет отфильтровать (по цвету, слою или другим признакам)
Иными словами создать для таких текстов отдельный слой или дать им особенный вес, например, и следить за тем, чтобы лишних мтекстов с такими свойствами не было.
skkkk вне форума  
 
Автор темы   Непрочитано 08.02.2017, 17:34
#8
Immortal_6666

вольный копейщик
 
Регистрация: 03.11.2010
Сообщений: 132


Спасибо всем огромное!

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

Слой отдельный сделать для этого вообще не проблема. Про извлечение данных почему-то не подумал в данном случае! Спасибо за наводку. Код тоже попробую, чуть позже отпишусь, что вышло. Желательно, чтобы порядок сбора соответствовал порядку листов в файле.

Насчет подшивок - я с ними игрался, но кроме "лишних" действий по их созданию для своей практики пользы в них не нашел. Номер листа у меня в штампе заполняется через CTAB - пробовал много способов, этот - самый удобный. Вся инфа в штампе - опять же поля, из централизованного источника все попадает в нужное место на каждом листе. Фамилии - аналогично. Машстаб ВЭ - тоже сам попадаем в штамп через поле. Печать - через экспорт в PDF - в один клик все листы. Я против подшивок ничего не имею, уточняю, чтобы камни в меня не полетели Просто для себя сделал вывод, что это удобно, если работа "типовая" - т.е настроить все местозаполнители блока и т.п., формировать сами листы и виды через подшивку. Но это специфический метод и мало кто так умеет. Большинство используют подшивки просто как способ собрать готовые листы из разных файлов в одно место для печати - а для этого и _publish подходит отлично.


skkkk, код почему-то не заработал. Я создал слой Текст2, туда перенес Мтексты с листов. В коде заменил слово "текст" на "Текст2", после запуска просто открывается диспетчер слоев, либо справка, либо какая-то рандомная команда и все... больше ничего не происходит.

Последний раз редактировалось Immortal_6666, 08.02.2017 в 19:59.
Immortal_6666 вне форума  
 
Непрочитано 08.02.2017, 18:08
#9
kp+

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


Цитата:
Сообщение от Immortal_6666 Посмотреть сообщение
Желательно, чтобы порядок сбора соответствовал порядку листов в файле.
Для простых Мтекстов средствами "извлечения данных" не получится Offtop: Зато с помощью подшивки можно было бы.
Впрочем, можно сделать иначе: вместо обычных Мтекстов создать блоки с двумя атрибутами:
- в первом - поле вида %<\AcVar ctab>%
- во втором (многострочном) - наименование чертежа.
Первый атрибут может быть на непечатаемом слое, а может использоваться - дело вкуса. Тогда результаты извлечения данных можно сортировать по первому атрибуту.
Цитата:
Сообщение от Immortal_6666 Посмотреть сообщение
Вся инфа в штампе - опять же поля, из централизованного источника все попадает в нужное место на каждом листе.
Что используется в качестве централизованного источника, если не секрет?

Последний раз редактировалось kp+, 08.02.2017 в 18:24.
kp+ вне форума  
 
Автор темы   Непрочитано 08.02.2017, 18:15
#10
Immortal_6666

вольный копейщик
 
Регистрация: 03.11.2010
Сообщений: 132


kp+, свойства документа - там заполняю нужные строки.

С извлечением данных вышла какая-то ерунда... не нашел там фильтра по слоям, и почему-то служебные знаки отображает в тексте.. не пойму как искать только по мтекстам с листов..

UPDATE
Только по Мтекстам искать научился, но он выдергивает вообще все... и кучу "мусора" в строку вставляет - \pxqc,t18;
Опять же, никакого порядка и последовательности.. не очень подходит метод.

Вариант с кодом был бы оптимален. Очень надеюсь на skkkk =)
Миниатюры
Нажмите на изображение для увеличения
Название: Снимок.JPG
Просмотров: 25
Размер:	35.1 Кб
ID:	183313  

Последний раз редактировалось Immortal_6666, 08.02.2017 в 18:21.
Immortal_6666 вне форума  
 
Непрочитано 08.02.2017, 18:28
#11
kp+

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


Цитата:
Сообщение от Immortal_6666 Посмотреть сообщение
Опять же, никакого порядка и последовательности.. не очень подходит метод.
перечитайте мой пост #9, там есть добавка.
По поводу очистки форматирования Мтекста есть отдельная тема, поиск по форуму в помощь. Знаки \P (абзац) в результатах извлечения данных нетрудно поиском-заменой убрать.
kp+ вне форума  
 
Автор темы   Непрочитано 08.02.2017, 18:32
#12
Immortal_6666

вольный копейщик
 
Регистрация: 03.11.2010
Сообщений: 132


Да, я прочитал.
Теорически можно. Правда от Мтекстов не очень хочется уходить - у меня из них потом тоже через поля "улетает" всё в другое место листа это раз. И сами эти Мтексты формируются из полей. Наверное. можно загнать поле в текст атрибута, но я так еще не пробовал и это все усложняет процесс работы.
Тут задача "минимизировать" пляски с бубном, а с поиском заменой уже набирается процесс посложнее, чем просто по листам пройтись с CTRL+C =))

Самый оптимальный вариант - как-то "считать" все Мтексты с каждого листа по параметру слой (для них я бы сделал уникальный слой) и собрать их в одно место.
Immortal_6666 вне форума  
 
Непрочитано 08.02.2017, 18:43
#13
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,990
<phrase 1= Отправить сообщение для VVA с помощью Skype™


Это не подойдет? Автозаполнение ведомости рабочих чертежей
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Автор темы   Непрочитано 08.02.2017, 18:49
#14
Immortal_6666

вольный копейщик
 
Регистрация: 03.11.2010
Сообщений: 132


Цитата:
Сообщение от VVA Посмотреть сообщение
Как крайний случай, видимо, да. Но там чуть другая цель изначально, и смущает "Обязательно использование блока с атрибутами "ЛИСТ" и "НАИМЕНОВАНИЕ.ЧЕРТЕЖА"." Мне бы тоже самое но попроще (таблица вообще не нужна) и считывание не через блок.

Оффтоп: где бы (и у кого) в Питере программированию под AutoCAD поучиться?...
Immortal_6666 вне форума  
 
Непрочитано 08.02.2017, 19:02
#15
kp+

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


Цитата:
Сообщение от Immortal_6666 Посмотреть сообщение
Мне бы тоже самое но попроще (таблица вообще не нужна)
А в результате получается сложнее и хуже...впрочем, код под именно Ваши нужды тоже можно написать...но это больше в "поиск исполнителей".
Offtop:
Цитата:
Сообщение от Immortal_6666 Посмотреть сообщение
Оффтоп: где бы (и у кого) в Питере программированию под AutoCAD поучиться?...
Сначала см. тут, потом целый раздел "программирование" к Вашим услугам. Опять же, питерские форумчане чуть не каждый месяц бухают обмениваются опытом в том или ином составе, следите за объявлениями
kp+ вне форума  
 
Непрочитано 08.02.2017, 20:37
1 | #16
skkkk


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


Цитата:
Сообщение от Immortal_6666 Посмотреть сообщение
skkkk, код почему-то не заработал. Я создал слой Текст2, туда перенес Мтексты с листов. В коде заменил слово "текст" на "Текст2", после запуска просто открывается диспетчер слоев, либо справка, либо какая-то рандомная команда и все... больше ничего не происходит.
Код с номерами строк вставился в файл что ли? Нужно копировать код кнопкой в правом верхнем углу окна с кодом. Еще может быть дело в кодировке, тогда бы попробовать сделать имя слоя на латинице (правда, в этом случае в командной строке высветилась бы ошибка типа "неверный тип аргумента selsetp nil").
Я тестировал на 2011-й и 2015-й версиях - работает.
skkkk вне форума  
 
Непрочитано 08.02.2017, 20:39
#17
Boxa

КЖ; C#
 
Регистрация: 03.11.2005
Санкт-Петербург
Сообщений: 2,588


Цитата:
Сообщение от Immortal_6666 Посмотреть сообщение
где бы (и у кого) в Питере программированию под AutoCAD поучиться?...
тут питерских полно, ищите в разделе Программирование и через личку спрашивайте... хотя, если на лисп свет клином не сошелся, то на youtube есть обучалки по VBA и C#. Было бы желание.
Boxa вне форума  
 
Автор темы   Непрочитано 08.02.2017, 20:44
#18
Immortal_6666

вольный копейщик
 
Регистрация: 03.11.2010
Сообщений: 132


skkkk, копировал кнопками, пробовал в разных файлах. пробовал запихнуть код в .lsp файл - тоже не помогло... попробую еще слой на латинице сделать.

UPDATE! Со слоем латинскими буквами заработало!!! Спасибо! Похоже, что это то, что нужно!

skkkk, Вы - гений! Работает и в 2017 версии - похоже, что во всех. С порядком правда, да - беда.

А сделать так, чтобы еще и русские слои понимал и порядок по порядку листов очень сложно? Или номер листа перед текстом добавлял - у меня листы названы просто цифрами, можно из CTAB брать значение, но Ваш код я не понимаю, потому не знаю куда это добавить. А отсортировать потом можно уже и в ворде.

Пока начал разбираться с функциями setq и ssget. =) буду дальше гуглить.

Как я пытаюсь понять Ваш код:
Мы объявили о создании команды TEST, создали две локальные переменные ss и i и сказали, что они типа string
Далее присвоили переменной ss значение, возвращаемое функцией ssget, которая выделила объекты типа MTEXT - т.к указан групповой код 0 на конкретном слое (т.к. код 8).

Вот тут я правда не понял - ssget выделяет объекты по критериям, и получается в переменную ss мы сразу содержимое всех мтекстов засунули??? как он понял, что надо именно содержимое взять?
И вот что дальше в коде происходит мне уже непонятно..

Последний раз редактировалось Immortal_6666, 08.02.2017 в 22:11.
Immortal_6666 вне форума  
 
Непрочитано 08.02.2017, 21:59
#19
baksconstructor


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


Immortal_6666
Тогда Вам прямая дорога к Реверс.
Эта прога найдёт Вам наименование, номера листов и другую инфу, воздаст ведомость в нужном порядке и т.д.
А Ваш пример файла - нужна только рамка со штампом, логотип можете удалить.
baksconstructor вне форума  
 
Автор темы   Непрочитано 08.02.2017, 22:04
#20
Immortal_6666

вольный копейщик
 
Регистрация: 03.11.2010
Сообщений: 132


baksconstructor, для моих целей - это микроскоп. Слишком наворочено и много лишнего.

Код skkkk в принципе оптимальное решение, за исключением порядка строк.
Immortal_6666 вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > Собрать содержимое МТЕкста с разных листов в один документ/объект

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
LISP. Копирование, сортировка, переименование листов (layout) VVA Готовые программы 96 08.12.2023 14:11
Печать в один PDF фаил нескольких листов YuryKlimchuk AutoCAD 103 24.05.2018 20:47
Упорядочивание вкладок (листов) Малюк AutoCAD 15 18.11.2015 17:03
Как собрать несколько DWF файлов в один koks AutoCAD 7 24.06.2013 11:44
Как собрать несколько оформленных чертежей в один E.D. AutoCAD 33 16.07.2009 09:42