|
||
| Правила | Регистрация | Пользователи | Сообщения за день | | Поиск | | Справка по форуму | Файлообменник | |
|
![]() |
Поиск в этой теме |
|
||||
почту смотрю несколько раз в день, и целыми днями в аське и на телефоне...
__________________
Чем гениальнее ваш план, тем меньше людей с ним будут согласны. /Сунь Цзы/ |
||||
![]() |
|
||||
Каждый раз, как начинаю писать в теме, тлеет еле-еле надежда, что кто-нибудь подхватит идею и попытается ее реализовать. Вот сейчас опять приступ наивного оптимизма мучает.
Если в прокат не приклеивать отростков и не вычитать по краям цилиндрическими объектами, то и подрезка и extrude фасок оставляют в описании геометрии объекты ellipse-curve. Я проанализировал их и понял, что они дают вектор выдавливания профиля под каким бы углом они небыли бы срезаны. Если срезать цилиндр, то мы получим на торце элипс с центром по оси цилиндра, малым и большим радиусами. В ellipse-curve есть точка центра элипса, нормаль к плоскости элипса, большой вектор-радиус, а именно точка, в которую если провести линию из точки 0,0,0 получится отрезок равный длинне большого радиуса и направление в котором лежит эта точка. Проще говоря, если взять этот отрезок и за точку 0,0,0 перенести в центр элипса, получим отрезок большого радиуса. Есть еще коофициент элипсности, то есть цифра получаемая от деления длинны малого радиуса на большой. Но это все приамбула. Перемножив нормаль элипса и вектор-радиус получим малый вектор и останется только повернуть вектор нормали вокруг малого вектор-радиуса в сторону большого вектор-радиуса на угол, который легко вычисляется по теоремам прямоугольных треугольников. Большой вектор-радиус - это гипотенуза, а малый вектор-радиус - катет. Угол между ними и есть тот угол, на который надо повернуть нормаль элипса. Но это тоже пока приамбула. А вот это есть суть идеи: Вместо того, чтобы анализировать строение плоскостей 3Dсолида, зная основной вектор объекта (как его найти по данным элемента ellipse-curve я уже написал), Собираем со всех описаний в 3Dсолиде точки и считаем их как облако, расположенное вокруг основного вектора объекта. Каждая точка есть ничто иное, как точка плоскости, в которой вектор нормали - наш основной вектор. Находим точку пересечения этой плоскости с нашим вектором и вместо облака точек получаем кучу точек, расположенных на основном векторе. Проще говоря - проекции этих точек на вектор. Остается только найти две крайние точки. Это и будет длинна объекта. ![]() |
||||
![]() |
|
||||
КИПиА Регистрация: 21.03.2005
Tyumen
Сообщений: 1,352
![]() |
Supermax
>>Если в прокат не приклеивать отростков и не... много "не", зачем вообще солид с ограничениями? используй простую линию. когда нада строй вокруг нее солид >>В ellipse-curve есть точка центра элипса. если есть центры ограничивающих элипсов то длина - растояние между центрами. Не? >>Перемножив нормаль элипса и вектор-радиус получим малый вектор >>Большой вектор-радиус - это гипотенуза, а малый вектор-радиус - катет. Угол между ними и есть тот угол, на который надо повернуть нормаль элипса. если малый - результат произведения большого и нормали, то угол между большим и малым = 90. Не? у тебя талант использовать вещи не по назначению, это до хорошего не доведет)). Последний раз редактировалось zamtmn, 20.12.2009 в 01:36. |
|||
![]() |
|
|||||
Цитата:
Цитата:
Надо такую длинну, чтобы из такого куска можно было сделать то, что нарисовано. Цитата:
Цитата:
p.s. Когда проектируешь трассу водопровода или теплопровода из труб большого диаметра, надо составлять карту заказа труб. И не дай бог тебе ошибиться на какие-то 10см. И чем меньше размер трассы, тем больше напрягов с расчетом длин участков. А ты говоришь, от центра до центра. Привезут на участок трубу на трубовозе, а ее надо под углом резать (отводов таких не делают), а ее-то и не хватает. Из могилы достанут. Последний раз редактировалось Supermax, 20.12.2009 в 15:09. |
|||||
![]() |
|
||||
КИПиА Регистрация: 21.03.2005
Tyumen
Сообщений: 1,352
![]() |
>>Не. Ты забыл про то, что швеллер под углом срезан.
тогда еще + большой радиус*синус угла между нормалью и направлением выдавливания для каждого среза. (наверно вру, надо нарисовать на бумажке) один фиг солид для труб слишком универсальный и сложный инструмент Последний раз редактировалось zamtmn, 20.12.2009 в 15:57. |
|||
![]() |
|
||||
Не. Берем длинну большого вектор-радиуса и умножаем на кофициент элипсности, получаем длинну малого вектор-радиуса. Вычисляем арккосинус от деления длинны малого вектор-радиуса на большой - это получится угол в градусах на который надо повернуть (виртуально) вектор нормали плоскости элипса вокруг оси малого вектор-радиуса. Увы, формула поворота 3D точки вокруг оси на указанное число градусов мне не известна (пока). Я с детства с тригонометрией не дружил. Если бы все знал - давно бы застрелился.
|
||||
![]() |
|
||||
Регистрация: 01.12.2009
Сообщений: 62
|
Добрый день!
Для меня данная тема уже была решена, когда VVA написал в 11 ответе этой темы. Его функция прекрасно вычисляет длину. Спасибо ему ещё раз. Теперь прошу помощи для автоматизации данной задачи. Вручную я делаю так: открываю редактор блоков, запускаю функцию test и его значение забиваю в новый атрибут. Так вот хотелось бы получить команду, которая сама создавала атрибут для блока со значением функции test. Кто хорошо владеет программированием, помогите пожалуйста! И ещё, было бы неплохо перед вычислением команды test делать ориентацию ucs/object, где в качестве объекта указывать блок, над которым и должна проходить операция. |
|||
![]() |
|
||||
Инженер LISP Регистрация: 11.05.2005
Минск
Сообщений: 6,996
|
Имя атрибута задаем в переменной attname (выделено красным)
Не учитываются разные масштабы блока по осям. Т.е длина считается как для блока с масштабными коэффициентами=1 Код:
__________________
Как использовать код на Лиспе читаем здесь |
|||
![]() |
|
||||
Регистрация: 01.12.2009
Сообщений: 62
|
Спасибо огромное, VVA!
Но програма работает с некоторыми ограничениями, а именно: -команда sol выбирает только блоки, которые содержат атрибут solidlenth -если основные размеры расположены не вдоль осей системы координат, она работает неправильно Хотелось бы как-то автоматически переопредилить все существующие блоки и добавить к ним атрибут с заданым именем. Подскажите пожалуйста, как это можно сделать? |
|||
![]() |
![]() |
|
|
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Рифмоплетство. | Kryaker | Разное | 554 | 14.11.2023 11:59 |
Мониторы LCD CRT | Разное | 94 | 17.06.2008 10:51 | |
Как изменять, добавлять атрибуты у блока | Алексей К. | AutoCAD | 2 | 29.01.2007 10:59 |
Как программно узнать точку пересеч. линии с подприм. блока? | kp+ | AutoCAD | 3 | 21.10.2005 10:46 |
Как из блока програмно вычленить текст | Flint | Программирование | 5 | 17.02.2004 11:03 |