| Правила | Регистрация | Пользователи | Сообщения за день | | Поиск | | Справка по форуму | Файлообменник | |
|
Поиск в этой теме |
04.07.2016, 18:35 | #1 | |
Как сделать масштабирование с предпросмотром (как в дефолтной функции автокада)
Регистрация: 02.07.2016
Сообщений: 249
|
||
Просмотров: 6870
|
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,850
|
Цитата:
vla-getboundingbox; acet-ent-geomextents... На форуме можно поискать - варианты были. Что vla-, что acet- имеют свои ограничения.
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
|
||||
Регистрация: 02.07.2016
Сообщений: 249
|
Цитата:
https://youtu.be/jFxSRtNNIQo Разбивал блок двумя способами Код:
|
|||
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,850
|
http://autolisp.ru/2014/07/29/explode-vs-vla-explode/
Глобальное переназначение обработчика ошибок... Точно жить надоело! http://autolisp.ru/2009/09/13/error-catch/ + http://autolisp.ru/2012/03/16/user-request/ + http://autolisp.ru/2016/01/11/undo-error-acad/ СОздание блока, конечно, сделано по принципу "В Баку через Москву из Питера с заездом в Магадан". Да еще и с постоянным созданием примитива... Если по-другому никак, то см. функции getcorner, или grvecs, grdraw. Заодно и подумай, что и как будет происходить Поищи разницу между vla-erase и vla-delete. ----- добавлено через ~3 мин. ----- P.S. Кстати, посмотри опцию команды _.scale: _reference
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
|
||||
Регистрация: 02.07.2016
Сообщений: 249
|
Цитата:
Цитата:
Цитата:
Но главная проблема так и осталась. При разбиении блока, разбивается и всё внутри него https://youtu.be/e8NWWb1TCpU Пробовал создавать блок через командную строку командой (command "._block".....) и вставлял его командой (command "._insert" ....), при этом проблема с разбиением объектов исчезает! Очевидно я как-то не правильно создаю или вставляю блоки, может не указываю каких-то параметров, которые указываются по умолчанию при использовании командной строки. Но при использовании командной строки появляется другая проблема - моргание, видимо этот способ медленнее, меня это моргание вообще не устроило. Сейчас ищу другой способ создания блоков. Нашёл команду (vla-add blocks ...), которая создаёт пустой блок. Пока не могу найти способ добавить в этот пустой блок выделенные объекты. Всё же интересует чем не правилен этот код Код:
Искал, нашёл описание функций на английском.. понял довольно смутно, как будто erase удаляет полностью, а delete не полностью... хз правильно ли понял. Вот про это даже не знал, выходит велосипед изобретаю. Но мне мой велосипед всё равно нравится больше дефолтного, он мне кажется проще и понятней (если работать заставлю) |
|||
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,850
|
Если мне не изменяет мой склероз, то vla-erase для графических примитивов, а vla-delete - для неграфических. Удалить описание блока через vla-erase невозможно.
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
|
||||
Регистрация: 20.03.2008
Сообщений: 2,653
|
Цитата:
|
|||
|
||||
Инженер LISP Регистрация: 11.05.2005
Минск
Сообщений: 6,992
|
Цитата:
Об этом в функции даже написано в примечании Цитата:
__________________
Как использовать код на Лиспе читаем здесь Последний раз редактировалось VVA, 09.07.2016 в 09:02. |
|||
|
||||
Регистрация: 02.07.2016
Сообщений: 249
|
Цитата:
Цитата:
Прикладываю файл, там есть несколько лишних функций (просто экспериментирую с другими способами создания блока) |
|||
|
||||
Инженер LISP Регистрация: 11.05.2005
Минск
Сообщений: 6,992
|
В качестве предположения. В этом коде при вставке в блок удаляются dxf группы 5 и 330
----- добавлено через ~1 ч. ----- Цитата:
__________________
Как использовать код на Лиспе читаем здесь |
|||
|
||||
Регистрация: 02.07.2016
Сообщений: 249
|
Попробовал использовать ту функцию, результат аналогичный моему. Блок разбивается, объекты внутри блока тоже разбиваются.
----- добавлено через ~22 мин. ----- То что надо! Это и искал, спасибо Всё заработало) https://youtu.be/bAnfRGI5X1k ----- добавлено через ~42 мин. ----- Обнаружил вероятную причину того, почему при разбиении блока, у меня разбивались элементы внутри него. Сейчас для вставки блока использую функцию Код:
Код:
Ты был прав. Последний раз редактировалось valerik88, 09.07.2016 в 14:19. |
|||
|
||||
Регистрация: 20.03.2008
Сообщений: 2,653
|
Я сначала как-то пропустил мимо ушей этот код, поскольку не мог себе представить, где смогу его применить. Сейчас запустил и понял: стандартный предпросмотр при масштабировании, который мало того, что моргает, к тому же я не знаю, как нежно надо уметь водить мышью, чтобы хоть приблизительно суметь поймать нужный размер, - барахло по сравнению с такой визуализацией. Я никогда и не связывался с этим делом: чаще всего нужен точный масштаб - и вводишь коэффициент, Enter. А тут прям послушно так увеличивается/уменьшается - мне понравилось. Серьезно, как идея, так и реализация. По крайней мере то, что я увидел - в код особо не вникал.
Понимаю, что программка создавалась скорее всего для визуализации масштаба "на глазок", однако, позволю себе пару замечаний, как пользователь. 1. Почему бы не сделать стандартный выбор объектов (ssget)? Имею в виду, не опоясывающей рамкой, а универсальной, да еще и с возможностью единичного выбора? Полагаю, такой подход принят с целью исключить указание базовой точкиДа, придется указывать базовую точку отдельно, но привычка на это уже выработана у всех годами. 2. Динамический прямоугольник на мой взгляд - вообще лишний. Если его контур совпадет с прямоугольным объектом, то это затрудняет восприятие визуализации, а толку от этой пунктирной рамки мне понять не удалось. 3. Хорошо бы иметь возможность ввести нужный коэффициент, по-моему, с grvecs реально такое провернуть. 4. Ну и курсор во время визуализации я бы тоже убрал. И смело - на замену стандартному _scale |
|||
|
||||
Регистрация: 02.07.2016
Сообщений: 249
|
Цитата:
https://youtu.be/qNfjoFGVGhw В русской локализации при масштабирование это называется "опорный отрезок", нужно выбрать опорный отрезок и тогда масштабировать можно плавно, как в моей функции. Минус в том, что нужно дополнительно выбирать этот самый опорный отрезок и в том, что пунктиром виден ещё не масштабированный вид (для кого-то это может даже плюс) и в том, что изображение моргает. Плюс же в том, что при масштабировании работает привязка (в моей функции почему-то привязка во время масштабирования не работает( и с целью исключить указание опорного отрезка. Вообще изначально я хотел без рамочки сделать простым ssget, а вместо указания опорной точки и опорного отрезка вычислить их через функции, которые мне во 2м посте посоветовали getboundingbox и др... это тоже вариант, который можно попробовать проработать. Цитата:
Цитата:
Тоже пока без понятия как это сделать, но я бы лучше его оставил и добавил бы как-нибудь возможность привязки... а то не работает зараза во время масштабирования. |
|||
|
||||
Инженер LISP Регистрация: 11.05.2005
Минск
Сообщений: 6,992
|
Не grvecs а grread
Примеры http://elpanov.com/index.php?id=26 http://www.lee-mac.com/grtext.html http://www.lee-mac.com/searchresults...lee-mac.com%2F Очень много примеров здесь https://www.theswamp.org/index.php?topic=12813.135
__________________
Как использовать код на Лиспе читаем здесь |
|||
|
||||
Регистрация: 20.03.2008
Сообщений: 2,653
|
Да-да, прошу прощения, конечно, grread. Один из ее аргументов позволяет считывать ввод данных с устройства указания, еще один - как раз отвечает за форму курсора (или его отсутствие).
Поищи - было решение и с привязками, точнее, с "псевдопривязками", работающими в купе с семейством gr-функций. Поведение их было, насколько я помню, не совсем привычным, но лучше, чем никаких. |
|||
|
||||
Продуман Регистрация: 22.02.2007
Питер
Сообщений: 2,840
|
Решение с привязками (псевдопривязками) - видео во вложении
__________________
Когда в руках молоток все вокруг кажется гвоздями. |
|||
|
||||
Регистрация: 02.07.2016
Сообщений: 249
|
Немного доработал под свои нужды: Сделал, что бы при масштабировании размерные линии тоже масштабировались (высота текста, размеры стрелок, выноски линий, отступ текста от линии), но при этом сам размер остаётся прежним (за счёт изменения параметра масштаба размерной линии).
Короче, демонстрация https://youtu.be/jvAuxf5HN-Q Так же добавил вывод цифрами масштаба, с помощью функций от Mac Lee из поста товарища VVA. Как сделать ввод масштаба с клавиатуры при использовании grread не знаю. С привязками пока разобраться не пробовал. |
|||
|
||||
Регистрация: 23.04.2015
Сообщений: 163
|
Прикольная штука!
Цитата:
Я там ещё поменял немножко, чтоб при пересечении начальной точки не вылетало, и рамку выбора сделал наподобие стандартной, секущей/охватывающей. С вашего позволения. Курсор гасить тоже пробовал, но мне не понравилось - во время ёрзания неприятно мигает, а так хотя бы за прицелом меньше заметно. |
|||
|
||||
Регистрация: 02.07.2016
Сообщений: 249
|
Клёво! Осталось привязку присобачить))
PS: правда ты там накосячил, в твоей функции не работает моё масштабирование размерных линий. Но я поправил. Последний раз редактировалось valerik88, 21.07.2016 в 21:16. |
|||
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Разработка ПОС, искусство проектирования | Tyhig | Технология и организация строительства | 117 | 25.11.2021 17:38 |
Как сделать выражение в таблицах под тип ExсeL | dim5678 | AutoCAD | 8 | 12.06.2013 14:57 |
как сделать твердотельную модель и сделать ее чертеж, потом перенести в солидворкс | denya43 | AutoCAD | 5 | 24.12.2012 18:42 |
как сделать сопряжение в нужной точке? | rtyu | AutoCAD | 4 | 08.08.2012 16:43 |