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

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

Как получить координаты ручек в дин. блоках?

Ответ
Поиск в этой теме
Непрочитано 03.03.2017, 19:02 #1
Как получить координаты ручек в дин. блоках?
power85
 
Регистрация: 03.02.2017
Сообщений: 56

Здравствуйте, эксперты.
Как получить координаты ручек в динамических блоках которые уже вставлены в чертеж?
Есть идеи?
Просмотров: 7784
 
Непрочитано 03.03.2017, 22:44
#2
Do$

AutoCAD/Civil3D LISP/C#
 
Регистрация: 15.08.2008
Санкт-Петербург
Сообщений: 1,702
Отправить сообщение для Do$ с помощью Skype™


Не могу не спросить. А зачем они Вам?
__________________
Толковый выбор приходит с опытом, а к нему приводит выбор бестолковый. (The Mechanic)
Do$ вне форума  
 
Автор темы   Непрочитано 04.03.2017, 12:13
#3
power85


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


Чтобы блок воздуховода изменять программно, непосредствено его концы.
power85 вне форума  
 
Непрочитано 04.03.2017, 12:38
| 2 #4
Do$

AutoCAD/Civil3D LISP/C#
 
Регистрация: 15.08.2008
Санкт-Петербург
Сообщений: 1,702
Отправить сообщение для Do$ с помощью Skype™


Для этого есть значения динамических параметров блока, которые можно получать и задавать программно. Ручки - это для пользователей. Тем более, что с помощью LISP с ними вообще ничего не сделать, насколько я помню.
__________________
Толковый выбор приходит с опытом, а к нему приводит выбор бестолковый. (The Mechanic)
Do$ вне форума  
 
Автор темы   Непрочитано 05.03.2017, 17:47
#5
power85


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


Цитата:
Сообщение от Do$ Посмотреть сообщение
Для этого есть значения динамических параметров блока, которые можно получать и задавать программно. Ручки - это для пользователей. Тем более, что с помощью LISP с ними вообще ничего не сделать, насколько я помню
А из параметра (дин. блока) vba объекта можно координаты получить (изменить)?
power85 вне форума  
 
Непрочитано 05.03.2017, 17:50
#6
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,787


Наверное, не из параметра, а из указателя на вхождение блока. Если так, то да, можно - был бы блок динамический.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 05.03.2017, 17:53
#7
power85


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


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
Наверное, не из параметра, а из указателя на вхождение блока. Если так, то да, можно - был бы блок динамический.
Поподробнее что такое указатель на вхождение блока?
power85 вне форума  
 
Непрочитано 05.03.2017, 23:26
#8
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,787


Ыыыы... http://autolisp.ru/2017/02/18/blockdef-and-blockref/ ?
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 09.03.2017, 11:54
#9
power85


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


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
Ясно.

Похоже как я понимаю по ответам это не возможно?
Что же придется как то вычислять по углу поворота блока, по параметрам длин, по методу GetBoundingBox (координаты крайних точек блока).
power85 вне форума  
 
Непрочитано 09.03.2017, 12:11
#10
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,787


1. Получить указатель на вхождение блока
2. Получить коллекцию динамических параметров вхождения (или сразу нужный параметр отфильтровать - это уже дело вкуса)
3. Установить новое значение нужного параметра
4. Обновить вхождение блока.

В чем проблема-то?
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 09.03.2017, 12:19
#11
power85


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


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
1. Получить указатель на вхождение блока
2. Получить коллекцию динамических параметров вхождения (или сразу нужный параметр отфильтровать - это уже дело вкуса)
3. Установить новое значение нужного параметра
4. Обновить вхождение блока.

В чем проблема-то?
Спасибо за ответ. Проблема что ты не меняешь координаты ручек сразу, а меняешь эти координаты косвенно через параметры блока.
Чтобы изменить координаты ручек надо менять параметры. Верно?
power85 вне форума  
 
Непрочитано 09.03.2017, 12:38
#12
Boxa

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


у BlockReference есть метод GetGripPoints(grips As GripDataCollection, curViewUnitSize As Double, gripSize As Integer, curViewDir As Vector3d, bitFlags As GetGripPointsFlags) As Boolean
работает это как то так:
Код:
[Выделить все]
Dim acBlock As BlockReference = CType(acEnt, BlockReference)
Dim grips As GripDataCollection = New GripDataCollection()
Dim curViewUnitSize As Double = 0
Dim gripSize As Integer = 0
Dim curViewDir As Vector3d = acDoc.Editor.GetCurrentView().ViewDirection
Dim bitFlags As GetGripPointsFlags = GetGripPointsFlags.GripPointsOnly

acBlock.GetGripPoints(grips, curViewUnitSize, gripSize, curViewDir, bitFlags)

For Each grip As GripData In grips
	Dim p1 As Point3d = New Point3d(grip.GripPoint.X, grip.GripPoint.Y, grip.GripPoint.Z)
Next

Правда это в рамках .net , как на других платформах, не знаю.

правда наверное лучше все же использовать параметры + матрицу трансформаций блока для вычисления положения и размера блока в модели.
Boxa вне форума  
 
Непрочитано 09.03.2017, 12:39
#13
kp+

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


Цитата:
Сообщение от power85 Посмотреть сообщение
Чтобы блок воздуховода изменять программно, непосредствено его концы.
Цитата:
Сообщение от power85 Посмотреть сообщение
Чтобы изменить координаты ручек надо менять параметры. Верно?
Судя по прежним высказываниям, в конечном счете Вам надо изменить графику блока, чтобы его "непосредствено его концы" оказались в нужных местах. Для этого надо изменить параметры блока.
"Ручки" - это уже вторично, но т.к. нормально настроенные параметры воздействуют как на графику, так и на "ручки", то при изменении параметров ручки тоже передвинутся, вместе с графикой.
Если же дин. блок кривой, косой и разваливается, этого может и не произойти.
Т.к. примера блока нет, то трудно о нем судить, но Вы сами можете проверить качество блока, принудительно задав значения параметров через панель свойств (CTRL+1). Результат будет налицо.

Цитата:
Сообщение от Boxa Посмотреть сообщение
у BlockReference есть метод GetGripPoints(grips As GripDataCollection, curViewUnitSize As Double, gripSize As Integer, curViewDir As Vector3d, bitFlags As GetGripPointsFlags) As Boolean
Мои познания в .net ниже нуля, но что-то мне подсказывает, что парного ему метода SetGripPoints может не быть, т.к.
Цитата:
Ручки - это для пользователей
Если что, поправьте.

Последний раз редактировалось kp+, 09.03.2017 в 12:53.
kp+ вне форума  
 
Непрочитано 09.03.2017, 12:53
#14
Boxa

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


Цитата:
Сообщение от kp+ Посмотреть сообщение
Мои познания в .net ниже нуля, но что-то мне подсказывает, что парного ему метода SetGripPoints может не быть, т.к.
MoveGripPointsAt(grips As GripDataCollection, offset As Vector3d, bitFlags As MoveGripPointsFlags)
Правда я ошибся, эти методы есть не только у BlockReference, они есть у наследников Entity
Boxa вне форума  
 
Автор темы   Непрочитано 09.03.2017, 13:04
#15
power85


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


Цитата:
Сообщение от Boxa Посмотреть сообщение
MoveGripPointsAt(grips As GripDataCollection, offset As Vector3d, bitFlags As MoveGripPointsFlags)
Правда я ошибся, эти методы есть не только у BlockReference, они есть у наследников Entity
Во то что надо. В C++ я ноль, можете сделать команду для Lisp на два метода?
MoveGripPointsAt - такого метода нет в Lisp и vba.
power85 вне форума  
 
Непрочитано 09.03.2017, 15:55
#16
Boxa

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


Цитата:
Сообщение от power85 Посмотреть сообщение
В C++ я ноль
Код вроде на VB.NEt был приведен.

Цитата:
Сообщение от power85 Посмотреть сообщение
можете сделать команду для Lisp на два метода?
нет, мне это было без надобности и я создание lisp функций еще не освоил.
Может более опытные товарищи помогут.
Boxa вне форума  
 
Автор темы   Непрочитано 09.03.2017, 16:05
#17
power85


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


Boxa
Спасибо за информацию. По последней книге Полещук вроде есть инф. как сделать функцию для lisp на другом языке.
В создание функций в NET как я знаю есть недостаток нужно создавать файлы компилированные для каждой версии автокад, а это не круто.
Хорошо я понял, буду выбирать.
power85 вне форума  
 
Непрочитано 09.03.2017, 16:34
#18
Boxa

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


я могу попробовать что то изобразить... но я с лисп совсем не дружу и мне для тестов нужен пример кода, который позволит выбрать объект и вызовет некую функцию передав ей id объекта и индекс ручки
Что то вроде: (GetGripPoints (entget (car (entsel))) 1) , вот только вместо выделенного, должен ID или хендл передаваться...
Boxa вне форума  
 
Автор темы   Непрочитано 09.03.2017, 16:45
#19
power85


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


Цитата:
Сообщение от Boxa Посмотреть сообщение
но я с лисп совсем не дружу
Кстати Lisp в 10 раз проще и понятнее. Советую изучить. vba после lisp тяжелее оказался.
Я попробую сначала сам эту функцию сделать basic я знаю.
Только скажите для каждой версии автокад нужен свой файл скомпилированный в NET?
power85 вне форума  
 
Непрочитано 09.03.2017, 17:33
#20
Александр Ривилис

программист, рыцарь ObjectARX
 
Регистрация: 09.05.2005
Киев
Сообщений: 2,405
Отправить сообщение для Александр Ривилис с помощью Skype™


Через GetGripPoints нельзя получить ручки динамического блока.
Александр Ривилис вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > Как получить координаты ручек в дин. блоках?

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
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