1. Пользоваться форумом на планшетах и телефонах стало удобнее благодаря Tapatalk

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

Тема в разделе "MAXScript", создана пользователем -, 14 апр 2005.

Модераторы: Savin Denis
  1. Guest

    Привет всем !

    Прошу помощи.
    Не получется скриптом подсчитать превышение размера какой-либо 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 в метрах или хотя бы в юнитах?
     
  2. Savin Denis vip

    Savin Denis Moderator Команда форума

    С нами с:
    05.05.2005
    Сообщения:
    1.633
    Симпатии:
    0
    Баллы:
    210
    ну так на вскидку у тебя для второй точки
    берется номер вершины не из грани, а из фейса
    от сюда и ноги, в остальном все должно быть верно
    поменяй на p.GetEdgeVertex i 2

    будет в текущих единицах
     
  3. Guest

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

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

    Savin Denis Moderator Команда форума

    С нами с:
    05.05.2005
    Сообщения:
    1.633
    Симпатии:
    0
    Баллы:
    210
    значит у тебя обькт изначально делался с неправильными настройками
    системных единиц
    если хочеш работать в метрической, перед началом работы проверяй
    настройки unit setup, там настройки в двух местах везде нужно переключать
    на метрическую в таком случае
     
Модераторы: Savin Denis

Поделиться этой страницей