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

Помогите пожалуйста с нодой

Тема в разделе "Maya", создана пользователем Andots, 17 дек 2015.

Модераторы: Dark™, Skif
  1. Andots

    Andots Знаток

    С нами с:
    12.03.2009
    Сообщения:
    520
    Симпатии:
    95
    Баллы:
    31
    Добрый день. Пытаюсь написать ноду. Это тригер, есть 2 объекта, мне необходимо чтоб при сближении этих объектов параметр TRIG был равен 1, при удалении 0.. Атрибуты позиций объектов аффектятся. Сложность в том как сохранить позицию distance ( d ) до афекта чтоб потом из нее вычесть реальную дистанцию в данный момент времени и логикой уже выставить тригер 0 или 1. Заранее благодарю за ответы.
    Тело НОДЫ:
    "
    import maya.OpenMayaMPx as OpenMayaMPx
    import maya.OpenMaya as OpenMaya
    class triggerNode(OpenMayaMPx.MPxNode):
    kPluginNodeId = OpenMaya.MTypeId(0x00000520)
    po1 = OpenMaya.MObject()
    po2 = OpenMaya.MObject()
    distance = OpenMaya.MObject()
    trig = OpenMaya.MObject()

    def __init__(self):
    OpenMayaMPx.MPxNode.__init__(self)
    def compute(self, plug, data):
    p1 = data.inputValue(triggerNode.po1).asDouble3()
    p2 = data.inputValue(triggerNode.po2).asDouble3()
    d1=??????????
    d = ((p1[0]-p2[0])**2+(p1[1]-p2[1])**2+(p1[2]-p2[2])**2)**.5
    с=d-d1
    If c<0: trig=1 else: trig=0
    aOutput = data.outputValue(triggerNode.distance)
    aOutput.setFloat(d)
    bOutput = data.outputValue(triggerNode.trig)
    bOutput.setFloat(trig)


    data.setClean(plug)
    def creator():
    return OpenMayaMPx.asMPxPtr(triggerNode())
    def initialize():
    nAttr = OpenMaya.MFnNumericAttribute()

    triggerNode.distance = nAttr.create("distance","dist", OpenMaya.MFnNumericData.kFloat,0.0)
    nAttr.setWritable(True)
    nAttr.setStorable(True)
    triggerNode.addAttribute(triggerNode.distance)

    triggerNode.distance = nAttr.create("trig","trig ", OpenMaya.MFnNumericData.kFloat,0.0)
    nAttr.setWritable(True)
    nAttr.setStorable(True)
    triggerNode.addAttribute(triggerNode.trig )

    triggerNode.pos1 = nAttr.create("po1","in1", OpenMaya.MFnNumericData.k3Double,0.0)
    triggerNode.addAttribute(MeasureNode.pos1)
    triggerNode.attributeAffects(triggerNode.po1, triggerNode.distance)
    triggerNode.attributeAffects(triggerNode.po1, triggerNode.trig)


    triggerNode.pos2 = nAttr.create("po2","in2", OpenMaya.MFnNumericData.k3Double,0.0)
    triggerNode.addAttribute(triggerNode.po2)
    triggerNode.attributeAffects(triggerNode.po2, triggerNode.distance)
    triggerNode.attributeAffects(triggerNode.po2, triggerNode.trig)
     
  2. Andots

    Andots Знаток

    С нами с:
    12.03.2009
    Сообщения:
    520
    Симпатии:
    95
    Баллы:
    31
    Неужели никто на знает? Может я в неверном направлении рыть начал? Как то по другому это сделать, а то задачка то вроде как простая кажется, а голову уже сломал.
     
Модераторы: Dark™, Skif

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