|
||
| Правила | Регистрация | Пользователи | Сообщения за день | | Поиск | | Справка по форуму | Файлообменник | |
|
![]() |
Поиск в этой теме |
![]() |
#1 | |
Как получить координаты ручек в дин. блоках?
Регистрация: 03.02.2017
Сообщений: 61
|
||
Просмотров: 8090
|
|
||||
Для этого есть значения динамических параметров блока, которые можно получать и задавать программно. Ручки - это для пользователей. Тем более, что с помощью LISP с ними вообще ничего не сделать, насколько я помню.
__________________
Толковый выбор приходит с опытом, а к нему приводит выбор бестолковый. (The Mechanic) |
||||
![]() |
|
||||
Регистрация: 03.02.2017
Сообщений: 61
|
А из параметра (дин. блока) vba объекта можно координаты получить (изменить)?
|
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,408
|
Наверное, не из параметра, а из указателя на вхождение блока. Если так, то да, можно - был бы блок динамический.
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,408
|
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Регистрация: 03.02.2017
Сообщений: 61
|
Цитата:
Похоже как я понимаю по ответам это не возможно? Что же придется как то вычислять по углу поворота блока, по параметрам длин, по методу GetBoundingBox (координаты крайних точек блока). |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,408
|
1. Получить указатель на вхождение блока
2. Получить коллекцию динамических параметров вхождения (или сразу нужный параметр отфильтровать - это уже дело вкуса) 3. Установить новое значение нужного параметра 4. Обновить вхождение блока. В чем проблема-то?
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Регистрация: 03.02.2017
Сообщений: 61
|
Цитата:
Чтобы изменить координаты ручек надо менять параметры. Верно? |
|||
![]() |
|
||||
КЖ; C# Регистрация: 03.11.2005
Санкт-Петербург
Сообщений: 2,611
|
у BlockReference есть метод GetGripPoints(grips As GripDataCollection, curViewUnitSize As Double, gripSize As Integer, curViewDir As Vector3d, bitFlags As GetGripPointsFlags) As Boolean
работает это как то так: Код:
Правда это в рамках .net , как на других платформах, не знаю. правда наверное лучше все же использовать параметры + матрицу трансформаций блока для вычисления положения и размера блока в модели. |
|||
![]() |
|
||||
идущий по граблям Регистрация: 26.05.2005
Сообщений: 5,174
|
Судя по прежним высказываниям, в конечном счете Вам надо изменить графику блока, чтобы его "непосредствено его концы" оказались в нужных местах. Для этого надо изменить параметры блока.
"Ручки" - это уже вторично, но т.к. нормально настроенные параметры воздействуют как на графику, так и на "ручки", то при изменении параметров ручки тоже передвинутся, вместе с графикой. Если же дин. блок кривой, косой и разваливается, этого может и не произойти. Т.к. примера блока нет, то трудно о нем судить, но Вы сами можете проверить качество блока, принудительно задав значения параметров через панель свойств (CTRL+1). Результат будет налицо. Цитата:
Цитата:
Последний раз редактировалось kp+, 09.03.2017 в 12:53. |
|||
![]() |
|
||||
КЖ; C# Регистрация: 03.11.2005
Санкт-Петербург
Сообщений: 2,611
|
Цитата:
Правда я ошибся, эти методы есть не только у BlockReference, они есть у наследников Entity |
|||
![]() |
|
||||
Регистрация: 03.02.2017
Сообщений: 61
|
Цитата:
MoveGripPointsAt - такого метода нет в Lisp и vba. |
|||
![]() |
|
||||
КЖ; C# Регистрация: 03.11.2005
Санкт-Петербург
Сообщений: 2,611
|
|
|||
![]() |
|
||||
Регистрация: 03.02.2017
Сообщений: 61
|
Boxa
Спасибо за информацию. По последней книге Полещук вроде есть инф. как сделать функцию для lisp на другом языке. В создание функций в NET как я знаю есть недостаток нужно создавать файлы компилированные для каждой версии автокад, а это не круто. Хорошо я понял, буду выбирать. |
|||
![]() |
|
||||
КЖ; C# Регистрация: 03.11.2005
Санкт-Петербург
Сообщений: 2,611
|
я могу попробовать что то изобразить... но я с лисп совсем не дружу и мне для тестов нужен пример кода, который позволит выбрать объект и вызовет некую функцию передав ей id объекта и индекс ручки
Что то вроде: (GetGripPoints (entget (car (entsel))) 1) , вот только вместо выделенного, должен ID или хендл передаваться... |
|||
![]() |
|
||||
Регистрация: 03.02.2017
Сообщений: 61
|
|
|||
![]() |
|
||||
Через GetGripPoints нельзя получить ручки динамического блока.
__________________
Сообщество программистов Autodesk в СНГ - техническая поддержка |
||||
![]() |
|
||||
КЖ; C# Регистрация: 03.11.2005
Санкт-Петербург
Сообщений: 2,611
|
|
|||
![]() |
|
||||
Я не правильно выразил свою мысль. В любом случае подвигать их при помощи MoveGripPointsAt не получится: https://forums.autodesk.com/t5/net/s...s/td-p/3738311
__________________
Сообщество программистов Autodesk в СНГ - техническая поддержка |
||||
![]() |
|
||||
Регистрация: 10.08.2013
Сообщений: 11,499
|
Ну если пишите общий код без залезания в дебри типа импорта функций - то по идее должно быть 2009, 2010-2012, 2013-2014, 2015-2016, 2017 и под соответствующую разрядность. Во всяком случае, такая градация у Александра Ривилиса в его знаменитейшей утилите ExplodeProxy, написанной на ObjectARX.
|
|||
![]() |
|
||||
Цитата:
__________________
Сообщество программистов Autodesk в СНГ - техническая поддержка |
||||
![]() |
|
||||
Регистрация: 10.08.2013
Сообщений: 11,499
|
|
|||
![]() |
|
||||
Нет. Теоретически можно на .NET сделать одну dll для 2007...2012 и вторую для 2013 и до 2017. Но не всегда.
__________________
Сообщество программистов Autodesk в СНГ - техническая поддержка |
||||
![]() |
|
||||
Регистрация: 10.08.2013
Сообщений: 11,499
|
Если писать библиотеку под самый младший NET фреймворк (который гарантированно присутствует при установленном акаде соответствующих версий) и использовать только не изменяющиеся во времени по вызовам и аргументам функции и типы данных?
|
|||
![]() |
|
||||
Да.
__________________
Сообщество программистов Autodesk в СНГ - техническая поддержка |
||||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,408
|
.NET? По-моему, необязательно (хотя, конечно, многое зависит от внутренностей dll)
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Необязательно если не используешь зависящие от разрядности библиотеки. Например, если используешь только AutoCAD .NET API, то от разрядности не зависит, а если используешь AutoCAD COM/ActiveX, то зависит.
__________________
Сообщество программистов Autodesk в СНГ - техническая поддержка |
||||
![]() |
|
||||
Регистрация: 10.08.2013
Сообщений: 11,499
|
Спасибо, забыл уже) Сталкивался с этим, когда только учился программировать в сборке через Interop - в офисе были еще старые х32 машины и приходилось под них компилировать отдельные сборки. А если чистый Net API и при параметрах компиляции AnyCPU - наборы инструкций MSIL при преобразовании в машинный код будут нужной разрядности.
|
|||
![]() |
|
||||
КЖ; C# Регистрация: 03.11.2005
Санкт-Петербург
Сообщений: 2,611
|
Цитата:
![]() зы. собрал сборку с настройками под 2014 акад проверил, работает и ее же запустил на 2017, так же работает. Последний раз редактировалось Boxa, 10.03.2017 в 09:53. Причина: добавил уточняющую картинку |
|||
![]() |
|
||||
Регистрация: 03.02.2017
Сообщений: 61
|
Цитата:
Интересует функция для lisp - MoveGripPointsAt и GetGripPoints, еще прошу описать аргументы для функций. Исходник я прошу чтобы если что не тревожить вас. Заранее спасибо. |
|||
![]() |
|
||||
КЖ; C# Регистрация: 03.11.2005
Санкт-Петербург
Сообщений: 2,611
|
Цитата:
Мне не жалко, но Вы ведь не знаете С#, какой Вам от них толк? |
|||
![]() |
|
||||
КЖ; C# Регистрация: 03.11.2005
Санкт-Петербург
Сообщений: 2,611
|
Еще раз, это просто набросок для проверки идеи, тут много чего не хватает и следует переделать, так что на свой страх и риск
Из приведенного кода сигнатура GetGripPoints думаю понятна, первый аргумент - objectId , второй - индекс ручки, возвращает точку. Код:
|
|||
![]() |
![]() |
|
|
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Lisp. Получить координаты точек 3D тела. | Golem-iq | LISP | 9 | 06.09.2013 13:38 |
Как получить координаты прямоугольника, в который вписаны все видимые объекты чертежа | swkx | Программирование | 2 | 31.07.2013 17:42 |
Быстро получить Набор объектов попадающих в Сферу | [N.S] | Программирование | 10 | 09.08.2009 11:04 |
Как получить координаты точек отображенных на четеже в виде таблици?? | nix-- | AutoCAD | 10 | 22.05.2009 13:41 |
Координаты области выделения | Тим Боль | Программирование | 6 | 04.11.2007 16:52 |