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

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

Лисп для копирования данных нескольких мтекстов по принципу расположения.

Ответ
Поиск в этой теме
Непрочитано 13.06.2008, 11:29 #1
Лисп для копирования данных нескольких мтекстов по принципу расположения.
Red Nova
 
ՃԱՐՏԱՐԱԳԵՏ, Տ.Գ.Թ.
 
Торонто
Регистрация: 23.10.2007
Сообщений: 1,980

Задача вот какая.
Я таблицами не пользуюсь, спеку делаю из мтекстов. Удачно использую разработанный VVA лисп для подсчета спецификаций из мтекстов. Иногда берешь чужой файл, в нем таблица, тоже из мтекстов, но начерчена не по твоему. То есть высота букв, шрифт, направленность, вообще вместо мтекста часто бывает текст, и т.п. Иногда удается быстро скорректировать такую таблицу и приспособить ее к своему чертежу, но чаще нет. Еще проблемы возникают иногда даже со своими таблицами, скажем многократно скейлишь их, потом внезапно понимаешь что высота части букв одна, а других другая, залезаешь в свойства, ставишь им всем нужную высоту, но на тебе, ничего не меняется, хоть и задал высоту скажем 50, открываешь мтекст, а высота букв 66,6666.
Для решения подобных проблем я задумал вот какой лисп.
Рисуем быстренько по соседству с изменяемой таблицей новую, где тексты скажем исходно имеют некое содержание, не важно какое (mcopy тут то что надо), количество строк и столбцов выставляем те же.
Запускаем лисп, отмечаем рамкой исходную таблицу, лисп запоминает содержание очередность по Х и У всех текстов. Затем отмечаем созданную нами таблицу. Содержание текстов из первой таблицы вписывается в новую по принципу оверрайт.
Возможны некоторые проблемы. Случайно можно создать больше строк или столбцов, в этом случае содержание лишних текстов может быть записано как #####, и отмечено красным цветом. Это может быть полезно. Скажем таблица длинная, не охота считать количество строк, создаем с запасом, а после удаляем все красные.
Еще проблема может возникнуть при определении очередности по Y, если тексты в строках исходной таблицы не имеют одинаковую координату Y, (один текст чуть выше, другой чуть ниже), так что будет правильнее если лисп будет пытаться определить принадлежность строкам по отступу от средней координаты.
Надеюсь на вашу помощь.
__________________
Блог
Просмотров: 5581
 
Непрочитано 13.06.2008, 13:21
#2
Sleekka

-
 
Регистрация: 24.07.2005
Москва
Сообщений: 1,335


http://dwg.ru/dnl/1931
Уже все придумано.
Sleekka вне форума  
 
Автор темы   Непрочитано 13.06.2008, 14:33
#3
Red Nova

ՃԱՐՏԱՐԱԳԵՏ, Տ.Գ.Թ.
 
Регистрация: 23.10.2007
Торонто
Сообщений: 1,980
Отправить сообщение для Red Nova с помощью Skype™


Спасибо. Попробовал обновить одну таблицу в которой тексты разной высоты. К сожалению эти тексты так и сохраняют масштабный коэффициент. Высота букв исходного текста 62,59, в свойствах показывает 75,12, если скопировать это дело в новый текст высотой 50, то высота текста в нем станет 41,66, хотя в свойствах так и показывает 50. Не пойму почему так происходит. Может есть вариант это нормализовать?
Прикрепляю пример такого мтекста.
Вложения
Тип файла: dwg
DWG 2004
11.dwg (72.4 Кб, 822 просмотров)
__________________
Блог
Red Nova вне форума  
 
Непрочитано 13.06.2008, 16:40
#4
Sleekka

-
 
Регистрация: 24.07.2005
Москва
Сообщений: 1,335


http://www.caduser.ru/cgi-bin/f1/board.cgi?t=20905TQ
Почитай вот это.
Sleekka вне форума  
 
Автор темы   Непрочитано 13.06.2008, 17:49
#5
Red Nova

ՃԱՐՏԱՐԱԳԵՏ, Տ.Գ.Թ.
 
Регистрация: 23.10.2007
Торонто
Сообщений: 1,980
Отправить сообщение для Red Nova с помощью Skype™


Всю тему прошел. Там вроде как про форматирование текста, типа удалить символы {}, а про коррекцию высоты текста в свойствах и в натуре ничего нету.
__________________
Блог
Red Nova вне форума  
 
Автор темы   Непрочитано 15.06.2008, 14:32
#6
Red Nova

ՃԱՐՏԱՐԱԳԵՏ, Տ.Գ.Թ.
 
Регистрация: 23.10.2007
Торонто
Сообщений: 1,980
Отправить сообщение для Red Nova с помощью Skype™


Больше никто не знает как привести высоту текста в свойствах и в натуре к единому виду?
__________________
Блог
Red Nova вне форума  
 
Непрочитано 16.06.2008, 15:48
#7
Олег К.

Инженер-теплотехник
 
Регистрация: 17.08.2006
Смоленск
Сообщений: 307


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

Кстати, а почему бы не попробовать применить разные "unformat'илки" к текстам исходной таблицы, а потом оптом менять стиль текста, высоту и т.п.
Вложения
Тип файла: lsp Copytxt-v2.0.LSP (3.0 Кб, 151 просмотров)

Последний раз редактировалось Олег К., 17.06.2008 в 13:49. Причина: подправил программу
Олег К. вне форума  
 
Автор темы   Непрочитано 17.06.2008, 09:31
#8
Red Nova

ՃԱՐՏԱՐԱԳԵՏ, Տ.Գ.Թ.
 
Регистрация: 23.10.2007
Торонто
Сообщений: 1,980
Отправить сообщение для Red Nova с помощью Skype™


Цитата:
Кстати, а почему бы не попробовать применить разные "unformat'илки" к текстам исходной таблицы, а потом оптом менять стиль текста, высоту и т.п.
Знать бы какие "unformat'илки" применить. До того они не помогали.
Твой вариант работает, спасибо.
Если скопировать текст в новый, то в отличие от
лиспа указанного на #2 он оставляет высоту текста, и гак с разной высотой пропадает, если скопировать текст сам в себя, то он приобретет высоту указанную в свойствах, тоже хорошо.
Не знаю связанно ли это с форматированием, но помогает.
Можно несколько изменить алгоритм? Если исключить функцию копирования (в общем то копировальной программы с #2 для этих целей хватит) и оставить только форматирование, но так чтобы рамкой отметил мтексты, и все отформатировались.
__________________
Блог
Red Nova вне форума  
 
Непрочитано 17.06.2008, 15:02
#9
Олег К.

Инженер-теплотехник
 
Регистрация: 17.08.2006
Смоленск
Сообщений: 307


>> Red Nova
Вот делал когда-то себе такую штуку для снятия форматирования, сейчас малость подправил. Тестировать не на чем, но должно работать, так что проверяйте осторожнее. И проверьте работу в листе - вчера мне один раз какой-то странный глюк попался, а потом нормально работал.
Заодно исправил программу в предыдущем посте (и как она у Вас нормально работала? вроде не должна была ).

Добавлю еще.
В #4 как раз на "unformat'илки" и была ссылка. Некоторое время назад, на этом форуме обсуждалось снятие форматирования текста, но шло в темах со всякими "левыми" названиями (вот примерно как эта тема). Поиск надо внимательнее поковырять, может что получше обнаружится.
Вложения
Тип файла: lsp UnfTxt.lsp (2.5 Кб, 153 просмотров)

Последний раз редактировалось Олег К., 17.06.2008 в 15:13.
Олег К. вне форума  
 
Автор темы   Непрочитано 17.06.2008, 20:12
#10
Red Nova

ՃԱՐՏԱՐԱԳԵՏ, Տ.Գ.Թ.
 
Регистрация: 23.10.2007
Торонто
Сообщений: 1,980
Отправить сообщение для Red Nova с помощью Skype™


Нас одна штука, давай на ты.
Форматилки, (вернее та которую я пробовал) с #4 не корректировали высоту, причем спец символы шриштов СПДС становились вопросамы.
А твой лисп с #9 не заработал
Код:
[Выделить все]
Command:
Command: UNFTXT

 Выберите объекты: ; error: bad argument type: lselsetp nil

Command:
__________________
Блог
Red Nova вне форума  
 
Непрочитано 18.06.2008, 10:30
#11
Олег К.

Инженер-теплотехник
 
Регистрация: 17.08.2006
Смоленск
Сообщений: 307


Не, все работает, даже ZWCAD не ругается . При работе лиспа используется текущий набор, т.е. сначала нужно выбрать изменяемые тексты и после уже запускать лисп. Если нужно по-другому - попробуй разные ключи функции ssget, сейчас используется "_I".
Цитата:
... причем спец символы шриштов СПДС становились вопросамы.
В тексте используются отдельные символы со своими шрифтами, или для всего текста назначен СПДС'овский шрифт? Дело в том, что unformat'ами сносится всё внутреннее форматирование текста, остается только назначенный текстовому объекту стиль текста. Если в тексте есть символ из другого шрифта, то он автоматически (самим AutoCAD'ом) меняется на символ с точно таким же кодом из шрифта стиля текста.
Можно попробовать закомментировать некоторые строки:
Код:
[Выделить все]
(while (or 
           ; (setq startfnum (vl-string-search "{\\" textstr))
           ; (setq startfnum (vl-string-search "\\F" textstr))
           ; (setq startfnum (vl-string-search "\\f" textstr))
            (setq startfnum (vl-string-search "\\H" textstr))
            (setq startfnum (vl-string-search "\\T" textstr))
            (setq startfnum (vl-string-search "\\Q" textstr))
            (setq startfnum (vl-string-search "\\W" textstr))
            (setq startfnum (vl-string-search "\\A" textstr))
         )
...
(progn ; _2
            (setq formatstr (substr textstr (1+ startfnum) (1+ (- endfnum startfnum)))
              textstr (vl-string-subst "" formatstr textstr startfnum)
             ; textstr (vl-string-subst "" "}" textstr startfnum))
            (setq endfnum 0 formatstr nil)
          ) ; progn_2
Сложно сказать что получится. По идее, будет удалено только специальное форматирование: изменение высоты, сужение, расширение и т.п.
Значение управляющих кодов для текста есть здесь в #9 http://dwg.ru/f/showthread.php?t=12717
Олег К. вне форума  
 
Автор темы   Непрочитано 18.06.2008, 19:18
#12
Red Nova

ՃԱՐՏԱՐԱԳԵՏ, Տ.Գ.Թ.
 
Регистрация: 23.10.2007
Торонто
Сообщений: 1,980
Отправить сообщение для Red Nova с помощью Skype™


Ты так объяснил прям как будто я что-то в программирование понимаю.
Я в этом деле как говориться "долек от мысли".
Попробовал сперва выделить, усе работает. Спасибо. Собственно главная моя головоломка решена. Этот лисп, + то что на #2 есть то что я искал.
У меня текстовые шрифты спдс-овские, на твой лисп реакция нормальная, не то что я раньше пробовал.
А можно переделать лисп, чтобы не зависимо было с начала выделил или после?
__________________
Блог
Red Nova вне форума  
 
Непрочитано 18.06.2008, 19:44
#13
Олег К.

Инженер-теплотехник
 
Регистрация: 17.08.2006
Смоленск
Сообщений: 307


Ну-у, Вы (на этот раз во множественном числе ) так хорошо с VVA по спецификациям базарили, вот и я как к понимающему обращаюсь.
Значит так. Открываешь лисп из #9 в текстовом редакторе Notepad или подобном (или в редакторе VLISP, если знаешь где его в AutoCADе запускать) и ищешь строку
Код:
[Выделить все]
(setq text_nabor (ssget "_I" '((-4 . "<OR") (0 . "TEXT") (0 . "MTEXT") (-4 . "OR>"))) number 0)
Удаляешь в ней "_I" , должно получиться
Код:
[Выделить все]
(setq text_nabor (ssget '((-4 . "<OR") (0 . "TEXT") (0 . "MTEXT") (-4 . "OR>"))) number 0)
Сохраняешь и пробуешь.
PS: практически в отпуске, так что на вопросы сразу могу не ответить.
Олег К. вне форума  
 
Непрочитано 18.06.2008, 20:08
#14
skkkk


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


Red Nova, на мой взгляд, не очень понятное название темы
skkkk вне форума  
 
Автор темы   Непрочитано 18.06.2008, 22:08
#15
Red Nova

ՃԱՐՏԱՐԱԳԵՏ, Տ.Գ.Թ.
 
Регистрация: 23.10.2007
Торонто
Сообщений: 1,980
Отправить сообщение для Red Nova с помощью Skype™


Олег К.,
Цитата:
Открываешь лисп из #9 в текстовом редакторе Notepad
Ну это я знаю
Цитата:
Удаляешь в ней "_I" , должно получиться
Вот теперь понял. Работает.
А с VVA я можно сказать жестами объяснялся что за лиспу задумал, и как не странно но ему удавалось все перевести в программный вид (да еще и добавить своих идей).
skkkk,
Дык темка то с другого началась.
__________________
Блог
Red Nova вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > Лисп для копирования данных нескольких мтекстов по принципу расположения.

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вопросы по работе системы RuCAD Олег К. Прочее. Программное обеспечение 142 17.09.2019 05:06
Бетоны для гидротехнических сооружений Egor_II Железобетонные конструкции 9 03.02.2016 11:06
Сейсмозащита и сейсмоизоляция существующих, построенных зд. IANationalInformAgentstvo Прочее. Архитектура и строительство 216 20.01.2015 16:51
Предложения по расчетным моделям сооружений aldt Расчетные программы 8 06.07.2009 17:53
Кто знаком с системой Vault Олег Вещий Прочее. Программное обеспечение 39 14.11.2008 22:43