Render.ru

Как правильно подсчитать длину каждого edge в модели ?

#1
Привет всем !

Прошу помощи.
Не получется скриптом подсчитать превышение размера какой-либо edge в модели.
Вот скрипт:

p = convertToPoly($)
nEdgeCount = p.EditablePoly.GetNumEdges()
for i=1 to nEdgeCount do
(
vertex1 = p.GetVertex(p.GetEdgeVertex i 1)
vertex2 = p.GetVertex(p.GetFaceVertex i 2)
ndist = (distance vertex1 vertex2)
print ("v1: " + vertex1 as string)
print ("v2: " + vertex2 as string)
print ("dist: " + ndist as string)
if ndist > (nameof_high_limit.text as float) Then append result i
if ndist < (nameof_low_limit.text as float) Then append result i
)
p.SetSelection #Edge result
for q=1 to result.count do
(
deleteItem result q
)
)
)

Проблема в том, что результаты получаются не верны.
Единици измерения стоят в юнитах, т.к. как я попутно понял - скрипт кроме юнитов расстояние не в чем показывать не может.
Если мерять при помощи tape выбрав Tape инструмент в меню , то размер в метрах показывается правильный. Если вывести результат скрипта - то результат получается не верен, даже на кубе единичной длины сторон ! Что уж говорить о сложных моделях :( В ходе исследования было выявлено, что 3d max не правильно выдает координаты на второй вертекс vertex2 = p.GetVertex(p.GetFaceVertex i 2) , хотя по докумендации написано все вроде верно.

Помогите пожалуйста, убил на эту проблему 2 рабочих для. 3D max и MAx script вижу первый раз. Можно ли вообще получить длину каждого edge в метрах или хотя бы в юнитах?
 

Savin Denis

Модератор форума
Команда форума
Рейтинг
138
#2
ну так на вскидку у тебя для второй точки
берется номер вершины не из грани, а из фейса
от сюда и ноги, в остальном все должно быть верно
поменяй на p.GetEdgeVertex i 2

будет в текущих единицах
 
#3
Спасибо, да, вот что значит запарится и не видеть ошибку :) Спасибо !

Но... осталась проблема с метрикой. Опытным путем было установлено, что юнит = 0.025 метра. Если делать поправку на этот коэффициент, то все правильно. Иначе скрипт выдает размеры только в юнитах. Согласно документации, задать скрипту метрику не получится. Как быть ? Я где-то не прав , или действительно надо просто брать с поправочным коэффициентом ?
 

Savin Denis

Модератор форума
Команда форума
Рейтинг
138
#4
значит у тебя обькт изначально делался с неправильными настройками
системных единиц
если хочеш работать в метрической, перед началом работы проверяй
настройки unit setup, там настройки в двух местах везде нужно переключать
на метрическую в таком случае
 
Сверху