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

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Как найти угол поворота блока, вставленного в ПСК, отличной от мировой

Как найти угол поворота блока, вставленного в ПСК, отличной от мировой

Ответ
Поиск в этой теме
Непрочитано 25.03.2015, 17:42 #1
Как найти угол поворота блока, вставленного в ПСК, отличной от мировой
480725
 
Москва
Регистрация: 06.10.2007
Сообщений: 132

Случайно обнаружил, что код 50 списка примитива блок, вставленного в произвольной ПСК не соответствует углу поворота блока, заданному при вставке. Если ПСК получена поворотом МСК - то угол соответствует повороту блока в МСК, в более сложных случаях никакой логики не видно. Например вставка блока в ПСК заданной тремя точками 0,0,0 1,1.1 и -1,1,0 с углом поворота 0 при чтении примитива дает угол поворота 1.5708 (90 градусов). Т.е. понять под каким углом вставлялся блок не получается. Кто нибудь ЗНАЕТ решение?
Просмотров: 10506
 
Непрочитано 25.03.2015, 17:44
#2
Кулик Алексей aka kpblc
Moderator

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


По-моему, координаты точки вставки и угол поворота блока задаются в системе координат объекта.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 25.03.2015, 18:32
#3
480725


 
Регистрация: 06.10.2007
Москва
Сообщений: 132


Повторюсь, вставка блока в ПСК заданной тремя точками 0,0,0 1,1.1 и -1,1,0 с углом поворота 0 (в этой ПСК) при чтении примитива дает угол поворота 1.5708 (90 градусов а не 0). Это не трудно проверить!
480725 вне форума  
 
Непрочитано 25.03.2015, 18:55
#4
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,990
<phrase 1= Отправить сообщение для VVA с помощью Skype™


проверяй еще 210 поле (Extrusion direction)
About trans and OCS in 3D
Point transformation from Block OCS to WCS
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Автор темы   Непрочитано 25.03.2015, 19:24
#5
480725


 
Регистрация: 06.10.2007
Москва
Сообщений: 132


Цитата:
Сообщение от VVA Посмотреть сообщение
проверяй еще 210 поле (Extrusion direction)
About trans and OCS in 3D
Point transformation from Block OCS to WCS
Я спрашиваю как узнать под каким углом был вставлен блок.. Может быть вы на что-то намекаете.. Если так - я не понял. В приведенном выше примере этот код (210 -0.408248 -0.408248 0.816497). Полный список примитива ((-1 . <Имя объекта: 7eed6900>) (0 . "INSERT") (330 . <Имя объекта: 7eed4cf8>) (5 . "290") (100 . "AcDbEntity") (67 . 0) (410 . "Model") (8 . "0") (100 . "AcDbBlockReference") (2 . "22") (10 -60.9619 1641.63 -1135.54) (41 . 1.0) (42 . 1.0) (43 . 1.0) (50 . 1.5708) (70 . 0) (71 . 0) (44 . 0.0) (45 . 0.0) (210 -0.408248 -0.408248 .816497))
Вы можете объяснить как из этих данных получить угол поворота блока равный нулю?
480725 вне форума  
 
Непрочитано 25.03.2015, 20:15
#6
Кулик Алексей aka kpblc
Moderator

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


480725, файл со своим блоком предоставь - это будет проще всего.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 25.03.2015, 22:58
#7
480725


 
Регистрация: 06.10.2007
Москва
Сообщений: 132


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
480725, файл со своим блоком предоставь - это будет проще всего.
Пожалуйста. Автокад 2012.
Вложения
Тип файла: dwg
DWG 2010
Чертеж1.dwg (73.6 Кб, 1616 просмотров)
480725 вне форума  
 
Непрочитано 26.03.2015, 02:49
#8
zamtmn

КИПиА
 
Регистрация: 21.03.2005
Tyumen
Сообщений: 1,352
<phrase 1=


>>в более сложных случаях никакой логики не видно
А какаая нужна логика? Блок вставлен "трехмерно" - (210 -0.408248 -0.408248 .816497), само понятие угла поворота уже совсемо не то что вы от него ждете))
Логика примерно такая - из нормали (210) восстанавливаются оси системы координат блока (читаем Arbitrary Axis Algorithm в DXF Reference), затем эта система координат поворачивается вокруг нормали на угол заданный в (50) и имеем что имеем)). Хотите знать под каким углом блок вставлялся в какойто пск - пересчитывайте эти значения в ту пск
zamtmn вне форума  
 
Автор темы   Непрочитано 26.03.2015, 13:11
#9
480725


 
Регистрация: 06.10.2007
Москва
Сообщений: 132


Цитата:
Сообщение от zamtmn Посмотреть сообщение
>>в более сложных случаях никакой логики не видно
Логика примерно такая - из нормали (210) восстанавливаются оси системы координат блока (читаем Arbitrary Axis Algorithm в DXF Reference), затем эта система координат поворачивается вокруг нормали на угол заданный в (50) и имеем что имеем)). Хотите знать под каким углом блок вставлялся в какойто пск - пересчитывайте эти значения в ту пск
КАК? Ну не знаю я английского...
480725 вне форума  
 
Непрочитано 26.03.2015, 21:05
#10
zamtmn

КИПиА
 
Регистрация: 21.03.2005
Tyumen
Сообщений: 1,352
<phrase 1=


Что конкретно как? тут не английский надо понимать, а геометрию
zamtmn вне форума  
 
Автор темы   Непрочитано 27.03.2015, 00:32
#11
480725


 
Регистрация: 06.10.2007
Москва
Сообщений: 132


Цитата:
Сообщение от zamtmn Посмотреть сообщение
Что конкретно как? тут не английский надо понимать, а геометрию
Как по списку примитива INSERT понять, под каким углом он был вставлен в ПСК отличной от мировой (см. заголовок).
Ну уж геометрию Вы наверняка понимаете! Выкладывайте, не томите!

Последний раз редактировалось 480725, 27.03.2015 в 13:04.
480725 вне форума  
 
Непрочитано 27.03.2015, 13:29
#12
Do$

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


Сами-то хоть понимаете чего хотите? В чертеже система координат WSC. Относительно какой USC Вы хотите поворот блока искать? DCS что ли?
__________________
Толковый выбор приходит с опытом, а к нему приводит выбор бестолковый. (The Mechanic)
Do$ вне форума  
 
Автор темы   Непрочитано 27.03.2015, 14:37
#13
480725


 
Регистрация: 06.10.2007
Москва
Сообщений: 132


Цитата:
Сообщение от Do$ Посмотреть сообщение
Сами-то хоть понимаете чего хотите? В чертеже система координат WSC. Относительно какой USC Вы хотите поворот блока искать? DCS что ли?
Спасибо... Понимаю...
Относительно той, в которой вставлял. Собственно и ожидал что код 50 будет именно для нее. Оказывается - нет.
480725 вне форума  
 
Непрочитано 27.03.2015, 18:12
#14
Do$

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


Цитата:
Сообщение от 480725 Посмотреть сообщение
Спасибо... Понимаю...
Покажите этот угол угловым размером на чертеже. А то, честно говоря, даже представить не могу, какой Вы ищете 2D угол поворота плоского блока, развернутого в 3D системе координат.
__________________
Толковый выбор приходит с опытом, а к нему приводит выбор бестолковый. (The Mechanic)
Do$ вне форума  
 
Автор темы   Непрочитано 27.03.2015, 20:45
#15
480725


 
Регистрация: 06.10.2007
Москва
Сообщений: 132


Цитата:
Сообщение от Do$ Посмотреть сообщение
Покажите этот угол угловым размером на чертеже. А то, честно говоря, даже представить не могу, какой Вы ищете 2D угол поворота плоского блока, развернутого в 3D системе координат.
Он идет в плоскости прямоугольника вдоль длинной стороны. Так как угол равен нулю показать его угловым размером невозможно. В принципе, я случайно вспомнил, что когда-то читал про углы поворота таких блоков в документации по 10-му Автокаду. Еще ДОСовскому... Посмотрел. Надо перейти в ОСК этого блока и отрезок построенный под углом 0 даст направление угла поворота блока (каким бы он не был задан, это случайно, что у меня тоже был 0, просто ось X ОСК развернута параллельно развороту блока). Если преобразовать координаты отрезка в ПСК в которой вставляли блок - получим угол поворота при вставке. Т.е. проблема исчерпана, за исключением умозрительного теперь вопроса про код 50 и его непонятное значение... Во всяком случае данное решение очевиднее и проще, чем написано в Arbitrary Axis Algorithm, указанной уважаемым знатоком геометрии zamtmn, который сейчас, надеюсь, уже завершает перевод.
480725 вне форума  
 
Непрочитано 28.03.2015, 01:20
#16
zamtmn

КИПиА
 
Регистрация: 21.03.2005
Tyumen
Сообщений: 1,352
<phrase 1=


480725
>>В принципе, я случайно вспомнил, что когда-то читал
Я вспомнил неслучайно и посоветовал вам где что можно почитать прямо сейчас

>>Посмотрел. Надо перейти в ОСК этого блока и отрезок построенный под углом 0 даст направление угла поворота блока
>>(каким бы он не был задан, это случайно, что у меня тоже был 0, просто ось X ОСК развернута параллельно развороту блока).
>>Если преобразовать координаты отрезка в ПСК в которой вставляли блок - получим угол поворота при вставке.
>>Т.е. проблема исчерпана, за исключением умозрительного теперь вопроса про код 50 и его непонятное значение...
Имхо вы либо не понимаете что вам надо, либо не получается объяснить. а может и то и другое.

>>Во всяком случае данное решение очевиднее и проще, чем написано в Arbitrary Axis Algorithm, указанной уважаемым
>>знатоком геометрии zamtmn, который сейчас, надеюсь, уже завершает перевод
Зря иронизируете - ветка называется Программирование - тут не принято чертить, гораздо уместней понимать как посчитать. Arbitrary Axis таки почитайте, иначе в 3Д случаях вас будут ожидать еще большие "открытия"
zamtmn вне форума  
 
Непрочитано 28.03.2015, 11:47
1 | #17
Do$

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


Цитата:
Сообщение от zamtmn Посмотреть сообщение
Имхо вы либо не понимаете что вам надо, либо не получается объяснить. а может и то и другое.
У меня такое же сложилось впечатление.
__________________
Толковый выбор приходит с опытом, а к нему приводит выбор бестолковый. (The Mechanic)
Do$ вне форума  
 
Автор темы   Непрочитано 28.03.2015, 13:05
#18
480725


 
Регистрация: 06.10.2007
Москва
Сообщений: 132


Цитата:
Сообщение от Do$ Посмотреть сообщение
У меня такое же сложилось впечатление.
При чтении данных блока, вставленного в ПСК, отличной от мировой, код 50 в списке примитива этого блока дает значение не соответствующее углу поворота блока в ПСК. Это то что осталось от первоначального вопроса. А сам вопрос - как найти угол поворота блока решен без привлечения этого (50) кода. Не знаю, что тут непонятно.

----- добавлено через ~16 мин. -----
Цитата:
Сообщение от zamtmn Посмотреть сообщение
480725
Зря иронизируете - ветка называется Программирование - тут не принято чертить, гораздо уместней понимать как посчитать. Arbitrary Axis таки почитайте, иначе в 3Д случаях вас будут ожидать еще большие "открытия"
Я почитал. Выражение If (abs (Nx) < 1/64) and (abs (Ny)< 1/64) then... очень не понравилось... М.б. это полезный материал, но в данном случае он мне просто не потребовался, т.к. альтернатавный способ проще и, будучи предложен самим Autodesk, несомненно надежен.
480725 вне форума  
 
Непрочитано 28.03.2015, 13:51
1 | #19
zamtmn

КИПиА
 
Регистрация: 21.03.2005
Tyumen
Сообщений: 1,352
<phrase 1=


>>Выражение If (abs (Nx) < 1/64) and (abs (Ny)< 1/64) then... очень не понравилось...
Чем если не секрет?

>>Посмотрел. Надо перейти в ОСК этого блока и отрезок построенный под углом 0 даст направление угла поворота блока
>>(каким бы он не был задан, это случайно, что у меня тоже был 0
Я незнаю что вы делаете и на чем, но Надо перейти в ОСК этого блока какбы подразумевает то что я описал в #8 - т.е. получение базисных векторов системы координат блока из нормали и поворота. Жаль что "способ" с "дополнительными построениями" кажется вам более простым и надежным чем несколько математических действий
zamtmn вне форума  
 
Автор темы   Непрочитано 28.03.2015, 16:25
#20
480725


 
Регистрация: 06.10.2007
Москва
Сообщений: 132


Цитата:
Сообщение от zamtmn Посмотреть сообщение
>>Выражение If (abs (Nx) < 1/64) and (abs (Ny)< 1/64) then... очень не понравилось...
Чем если не секрет?

Жаль что "способ" с "дополнительными построениями" кажется вам более простым и надежным чем несколько математических действий
Не нравится тем что нет никакого объяснения, почему именно 1/64 а не 1/65 и т.д., потому, что есть идиотская вероятность ошибки в самых младших разрядах действительного числа и в случае равенства получим меньше, а также тем, что это не прямое указание Autodesk. То, что я предпочел и пересказал - написано в документации Автодеска идущей в комлекте с Автокадом.

Я не говорил о дополнительных построениях. Я просто неудачно выразился имелся в виду не отрезок в смысле примитива Автокада а пару точек, для того чтобы перевычислить угол в ПСК, в которой создавался блок, т.к. она не совпадает с ОСК. Переход в ОСК произвольного объекта делает команда АВТОКАДА.

Последний раз редактировалось 480725, 28.03.2015 в 20:55.
480725 вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Как найти угол поворота блока, вставленного в ПСК, отличной от мировой

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Угол поворота атрибута в составе блока rzinnurov AutoCAD 15 18.10.2017 08:08
Проблема с базовой точкой блока и вхождением блока в DXF nogaems Программирование 5 29.08.2013 15:46
Как найти имя предка анонимного блока. Kirill_Ja Программирование 4 16.04.2013 17:33
lisp из autocad 2004 некорректно выполняется в autocad 2008 sid_geo LISP 13 11.10.2012 11:20
VBA. 3D. Ориентация блоков (примитивов) в пространстве? Как определить угол поворота? shumilovvv Программирование 2 15.05.2009 12:18