|
||
| Правила | Регистрация | Пользователи | Сообщения за день | | Поиск | | Справка по форуму | Файлообменник | |
|
![]() |
Поиск в этой теме |
![]() |
#1 | |
Как визуализировать создаваемый объект?
инженер-конструктор
Беларусь
Регистрация: 20.12.2006
Сообщений: 498
|
||
Просмотров: 10174
|
|
||||
Остекляем!!! Алюминим!!! Регистрация: 21.02.2005
Москва
Сообщений: 3,917
![]() |
Цитата:
А насчет отображения объекта созданного сторонней программой, то это как позволяет программа, у меня например отображает. А насчет определить длину текста, то насколько я знаю при построении выноски КАД сам рисует полку под текстом, али не рисует в зависимости от настроек выноски.
__________________
Мы можем делать быстро, качественно и недорого, выбирайте любые 2 условия.:search: |
|||
![]() |
|
||||
Регистрация: 14.03.2006
Сообщений: 863
|
два варианта как всегда
1. функции семейства gr... (grclear, grdrav, grread, grtext, grvecs) вам помогут. Но в тексте программы вам понадобятся две очень похожие функции - одна отрисовывает объект во время динамического ввода, вторая собственно создает этот объект в чертеже здесь есть пример реализации http://dwg.ru/forum/viewtopic.php?t=...er=asc&start=0 наверное еще где-то найдете 2. сделать наоборот - сначала нарисовать объект а потом натравить на него команду move например |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,411
|
Лучше не _.move, а _.change ИМХО - там можно за компанию еще и угол поворота установить
![]()
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
инженер-конструктор Регистрация: 20.12.2006
Беларусь
Сообщений: 498
|
Цитата:
__________________
Инженер-конструктор. |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,411
|
При _change 100% виден
![]()
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Регистрация: 14.03.2006
Сообщений: 863
|
Цитата:
Цитата:
кидайте текст программы вместе доведем ее до ума или хотя бы попытаемся |
|||
![]() |
|
||||
инженер-конструктор Регистрация: 20.12.2006
Беларусь
Сообщений: 498
|
Вообще говоря хочу сделать программу рисования выноски (для конкретики).
(defun c:my () (setq text1 (getstring "\nУкажите текст над полкой: ")) (setq text2 (getstring "\nУкажите текст под полкой: ")) (command "_insert" "my_block" pause "" "" "" text2 text1) ) "my_block" - это блок с атрибутами (верхний и нижний текст). Задача: после активации команды "my" - вводим текст над полкой, текст под полкой, указываем точку выноски, далее хотелось бы чтобы рисовался прототип полки с надписями и "висел" на курсоре, ожидая когда пользователь укажет место размещения выноски, при этом хотелось бы чтобы от первой указанной точки до полки шла резиновая линия, меняющаяся в зависимости от текущего положения курсора. Попутная проблема - определение длины наибольшего текста в линейных размерностях для отображения полки соответствующей длины.
__________________
Инженер-конструктор. |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,411
|
C наскоку если: использовать в цикле (grread) с проверкой на указание точки. Совместно с (grvecs) и, возможно, (gertext).
С (grtext) не работал, так что там я мимо кассы ![]()
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Thượng Tá Quân Đội Nhân Dân Việt Nam Регистрация: 14.03.2005
44d32'44"С, 33d26'51"В
Сообщений: 13,372
|
Цитата:
В твоей идее есть порочный момент - использовать блок для двойной надписи. На нем и сломаешься. Как сделать, чтобы блок визуально висел на курсоре расписано в упомянутой книге - это не так просто, с учетом множества глюков разных версий Автокада. Лучше делать просто - тексты и отрезки. Но и тут немало нюансов - определение ориентации текстов в зависимости от конечной точки выноски, длины текстов. Надо учесть еще и возможность работы не в МСК, в том числе и в 3D. Программа должна не просто быть написана, но еще и работать, и работать надежно. Вот функция из ruCAD, которая и делает двойные выноски. Для демонстрации алгоритма. Код:
Вот один из "секретов" правильного поределения длины текста Код:
|
|||
![]() |
|
||||
Регистрация: 14.03.2006
Сообщений: 863
|
Респекты: VVA, kpblc, Лентяй спасибо за советы по поводу entmake/entmode
Эпиграф: каждый LISP-любитель должен за свою жизнь состряпать прогу для построения выносок Собственно прежде всего преследовалась цель изготовить обыкновенную с точки зрения acada выноску, но с двухэтажным текстом... ну и пример "визуализации" по принципу сначала изготавливаем объект, потом натравливаем на него команду MOVE Эпилограф: комментарии приветствуются [ATTACH]1173857386.zip[/ATTACH] |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,411
|
Ну ты сам напросился
![]() 1. Не учитываются варианты локализованных версий. 2. В функции Код:
То же самое относится к Код:
--- Тестил на ADT 2006 Rus + SP1. --- Ну это уже так, побрюзжать немного ![]() - Когда я вижу слово "Укажите", меня тянет именно "Указать" на примитив. Замени на "Введите". - То, что текст создается сначала в точке начала выноски, может ввергнуть пользователей в панику (акад сломался!) - Я б нарисовал какой-никакой а диалог для более "нормального" вида. Эта задача из разряда тех, в которых красота вида важнее чего бы то ни было. Вот так вот... Надеюсь, охоту не отбил дальше программировать?
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Регистрация: 14.03.2006
Сообщений: 863
|
1. не вопрос... хотя очень хочется расставить метки отката без вызова функции command
2. по правой кнопке в данном варианте будут пустые строки только и всего, по esc программа завершится как и любая другая команда только и всего. getusrtext , getusrpt оформить можно как угодно, вплоть до повтора последних введенных значений... косметика в общем позже будет 3. странно вчера работало : ))) сейчас попробовал в функции crle строчку (cons 73 0) заменить на (cons 73 1) вроде оно. кстати в предыдущем посте файлик я переаттачил на брюзжание такой ответ: вообще сакральный смысл именно этой реализации заключен всего в двух строчках кода - все остальное обряды и пассы руками |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,411
|
Вот только не надо, не надо! Попробуй выполнить (setq tmp (getusrtext)) и в ответ на первый запрос сделай правый пинок, а на второй - Esc. И погляди, чему у тебя будет равен tmp. А еще лучше - сразу после этого сделай попытку сформировать строку многострочника. Веселье практически гарантирую!
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,411
|
Упс, сорри. Как-то привык, что у меня каждая функция возвращает ожидаемое значение. Извини еще раз.
Идея с использованием дробей понравилась, спасибо ![]() ![]()
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Регистрация: 14.03.2006
Сообщений: 863
|
типа новый релиз:
добавлена визуализация с помощью (grdraw, ввод текстовых строк пока на прежнем примитивном уровне. кому интересно погоняйте пжалста на предмет насекомых [ATTACH]1175680330.zip[/ATTACH] кстати у проги есть некоторый принципиальный недостаток - так как выноска получается обыкновенная, то и редактировать ее можно через mtexteditor, но этот самый едитор после unstack/stack высоту символов делает 0,7 от установленной высоты текста |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,411
|
Цитата:
P.S. Интересно, а что будет, если будет использоваться внешний редактор? P.P.S. У меня из-за подобных выносок голова болит уже месяца два, не меньше - слишком многое надо учитывать по ходу дела.
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Регистрация: 14.03.2006
Сообщений: 863
|
с внешним редактором как раз проблем поменьше будет - можно заделать свой staker или просто вбить
"\\A0\\SТекстНадПолкой/ТекстПодПолкой;" правда сам пока не пробовал реактор прописывать не хоцца, потому как есть подозрение, что можно обойтись без них как понравилась визуализация? |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,411
|
еще не успел посмотреть.
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,411
|
Так, по поводу кода.
1. В обработчике ошибок используется (command). Это может породить приличное количество проблем (на autocad.ru как-то обсуждалось, результатов не помню - можно попробовать посмотреть поиском по "глюк в error" - вроде так). 2. Обработчик ошибок сделан глобальным. Не гуд в принципе. 3. Зачем выносить получение строк в отдельную функцию, я не очень понял. 4. Все равно, на запрос текста над (да и "под" тоже)полкой я нажал Esc и получил ошибку ![]() 5. На запросе точки нажал правую кнопку - ошибка. 6. Перемещение текста выноски либо полки при dimscale, dimldrblk, dimexe, dimgap, dimasz "не штатных значений" уводит полку черт-те куда. И длину этой полке тоже назначает бог знает какой. Вообще надо проверять для всех значений всех системных переменных dim*. 7. Не работает не в мировой системе координат. И не отслеживается вариант "немировой" системы координат. И все это только ради удовольствия видеть прямоугольник вокруг текста...
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Регистрация: 14.03.2006
Сообщений: 863
|
именно ради удовольствия... правда я не совсем безнадежен, иначе написал бы прям текст
получение строк, точек в отдельной функции мне удобнее редактировать так, к примеру на первое время добавлю (initget какой нибудь за 6 и 7 спасибо - буду думать, кстати конкретно про DIMGAP вот здесь Код:
чем может испортить жизнь глобальный обработчик ошибок? я его воткнул только с целью чистки хвостов по Esc и ^C^C, а корректность ввода пользователем планирую контролировать как раз в вынесенных функциях |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,411
|
Насчет получения текстов и точек, да и вообще чего бы то ни было можно попробовать использовать
Код:
Код:
Код:
=== Добавлено: (себе под нос) надеюсь, я никого не напугал, а то в http://dwg.ru/forum/viewtopic.php?t=12463 меня шуганули ![]()
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
|||||||||||||
Регистрация: 20.03.2008
Сообщений: 2,680
|
________________________________________________________________________________________________________________
...8 лет спустя В ходе обсуждения темы Поиск блоков пересекающих полилинию (автор - tujn08) был затронут вопрос о программной отрисовке мультивыноски, а также варианты интерактивной визуализации этого процесса против программной расстановки мультивыносок (что друг друга на мой взгляд взаимоисключает). Я полагаю, что этот, на мой взгляд, интересный разговор попадает аккурат в рамки данного топика, поэтому предлагаю продолжить его здесь. Итак, zamtmn показал (только зачем-то на каком-то стороннем сайте прикрепил) видео, точнее "гифку" (увидим ли мы ее через месяц?) ![]() в которой он при помощи своей программы весьма ловко и изящно расставил мультивыноски с нужным, заранее программно сформированным содержанием, вдоль полилинии и к блокам, почти пересекающим полилинию. По крайней мере, для меня это выглядело именно так, может, там отрезки и не блоки, но не суть. Далее приведу выдержки ответов участников этого разговора. Цитата:
Цитата:
Цитата:
Цитата:
Цитата:
Цитата:
Цитата:
Цитата:
Цитата:
Цитата:
Дима_, я тогда видел Ваш код, но даже сейчас, на первой лямбде у меня глаза поменялись местами, а тогда я вообще на лямбды и грвексы смотреть боялся. Честно, сейчас уже нет сил смотреть в кишки, как это работает, как в частности grvecs'ом (и им ли???) Вы нарисовали ttf-шрифт? Я специально проверил: блок с таким текстом прекрасно "висит" на курсоре во всей красе. Хотел я сделать примерно так: Express'ом взрывать текст до линий, брать координаты их концов и "скармливать" их grvecs'у. При этом добавив обработку (что мне и казалось и кажется самым сложным), чтоб при пересечении изломом выноски определенной черты grvecs'овская выноска как бы "зеркалилась", но не текст, конечно. На тот момент мне нецелесообразно было это делать, во-первых, в виду малого опыта программирования, а во-вторых, постольку, поскольку я уже имел то, что блок с текстом, висящий на курсоре, мог дать представление о размере получающейся выноски, и можно подыскать ей уютное местечко на чертеже; в точке же, куда должна бы указывать эта выноска я программно рисовал временную красную жирную метку. Знаю, по-дилетантски, но удобней, чем все выноски копировать из других чертежей и править их вручную, посчитав линейкой пикетаж, согласитесь? Подумаешь, не хватает "резиновой нити". Хотя на очень загруженных чертежах ее часто действительно, не хватает, но даже и там, больше нужно видеть размер текстовой части, а также ее содержимое, чтобы оперативно до вставки отреагировать и если что не так, исправить параметр (например, диаметр трубы) и продолжить в штатном режиме простановку всех выносок трассы. Это реализовано у нас уже несколько лет, по возможности выложу видео этого процесса. Функции acet-drug... или как они там, я тоже знаю давно. С тех пор. И даже пробовал сделать визуализацию выноски из них. Не понравилось, что объект который копируется или переносится, обязательно при этом "торчит" и на том месте, откуда ты его переносишь. Но хуже то, что заставить все это дело динамически зеркалиться на изломе мне не удалось. Пробовал также с их помощью написать свои функции переноса и копирования, более удобные, чтобы вставлять свое приглашение и по правой кнопке "подбирать" последний набор, но при тестировании обнаружилось, что при работе этих drug'ов не работает полярное отслеживание. Отказался. Александр Ривилис, спасибо. Стыдно, но за десять лет я этой темы не видел. Хотя в свое время усиленно искал примеры использования grvecs. Интересно, смогу ли я сделать из нее мультивыноску? ![]() ![]() |
||||||||||||
![]() |
|
||||
Думаю, что да. Более того никакой grvecs будет не нужен. Ты просто рисуешь выноску "на курсоре" и обновляешь её в зависимости от положения курсора. Ну а при помощи ключевых слов ты можешь переключаться между указанием вершины выноски или положением текста выноски.
__________________
Сообщество программистов Autodesk в СНГ - техническая поддержка |
||||
![]() |
|
||||
КИПиА Регистрация: 21.03.2005
Tyumen
Сообщений: 1,352
![]() |
>>По крайней мере, для меня это выглядело именно так, может, там отрезки и не блоки, но не суть.
Это блоки и полилинии, но не автокад. Выноска с гифки в автокаде будет набором линий и текстов, в программе - отдельный самомстоятельный примитив. Картинка была не про проблему програмной расстановки мультивыносок, а про "кабельное хозяйство")) |
|||
![]() |
|
||||
Регистрация: 20.03.2008
Сообщений: 2,680
|
Offtop: Эх бы к суткам еще часиков десять прибавить...
![]() Цитата:
![]() Offtop: Лично мне тот топик был вообще не близок, поскольку я далек от проектирования электрики, покуда не заговорили о мультивыносках. Я не ожидал, что возбудится такой нездорово живой (для той темы) интерес к ним. ![]() |
|||
![]() |
|
||||
Продуман Регистрация: 22.02.2007
Питер
Сообщений: 2,839
|
Там все автокад "рисует" - я ничего не рисовал - это копия объекта.
__________________
Когда в руках молоток все вокруг кажется гвоздями. |
|||
![]() |