Register Latest Topics
 
 
 


Reply
  Author   Comment  
ruchit

Cooking networks
Registered:
Posts: 156
Reply with quote  #1 
Hi,
Is it possible to output direction vector in MPxLocator node using MFnNumericAttribute ??

Goal:
*Draw arrow shape openGL polygon using MPxLocatorNode::draw() method
*output direction vector
0
pshipkov

SOuP Jedi
Registered:
Posts: 4,639
Reply with quote  #2 
x = nAttr.create("x","x",MFnNumericData::kDouble);
y = nAttr.create("y","y",MFnNumericData::kDouble);
z = nAttr.create("z","z",MFnNumericData::kDouble);
dir = nAttr.create("direction", d", x,y,z);
0
ruchit

Cooking networks
Registered:
Posts: 156
Reply with quote  #3 
Below code is For creating arrow shape using MFnmesh, now i want to insert this in MPxLocator & output direction between vertex 13 & 12. And one more question why normal of resultant mesh is set to face ??
Help


Code:

import maya.OpenMaya as om
import maya.cmds as mc
import maya.mel as mm

locPos = [[-0.05000000074505806, 0.0, 0.05000000074505806], [0.05000000074505806, 0.0, 0.05000000074505806], [0.05000000074505806, 1.0, 0.05000000074505806], [-0.05000000074505806, 1.0, 0.05000000074505806], [0.05000000074505806, 0.0, -0.05000000074505806], [-0.05000000074505806, 0.0, -0.05000000074505806], [0.05000000074505806, 1.0, -0.05000000074505806], [-0.05000000074505806, 1.0, -0.05000000074505806], [-0.125, 1.0, -0.125], [-0.125, 1.0, 0.125], [0.125, 1.0, 0.125], [0.125, 1.0, -0.125], [-0.0014583021402359009, 1.5859489440917969, -0.0014583021402359009], [0.0, 0.0, 0.0]]
  
#Create Single Face
#Get Vert as MPoint from loc position
vertices = []
for locP in locPos:
  vertices.append(om.MFloatPoint(locP[0], locP[1], locP[2]))
  
  
#Create MFnmesh and its addPolygon command with a MPoint array for the face
meshFn = om.MFnMesh()
mergeVertices=True
pointTolerance = 0.001
faceArray = om.MFloatPointArray() 
faceArray.setLength(4)
#setting array with the vert and its index
faceArray.set(vertices[0],0)
faceArray.set(vertices[1],1)
faceArray.set(vertices[2],2)
faceArray.set(vertices[3],3)
#All at once
numVertices = 14
numPolygons = 16
vertexFloatPointArray = om.MFloatPointArray()
for vertex in vertices:
  vertexFloatPointArray.append(vertex)
  
count = [4,4,4,4,4,4,4,4,3,3,3,3,3,3,3,3]
polyCount = om.MIntArray()
for c in count:
  polyCount.append(int(c))
  
connections = [0,1,2,3,1,4,6,2,4,5,7,6,5,0,3,7,3,2,10,9,2,6,11,10,6,7,8,11,7,3,9,8,9,10,12,10,11,12,11,8,12,8,9,12,0,13,1,1,13,4,4,13,5,5,13,0]
#note, making all the connection counter clockwise, to get normal pointing outwards
polyConnection = om.MIntArray()
for connection in connections:
  polyConnection.append(int(connection))
  
  
meshFn.create(numVertices, numPolygons, vertexFloatPointArray, polyCount, polyConnection)

0
pshipkov

SOuP Jedi
Registered:
Posts: 4,639
Reply with quote  #4 
Your words "to output the direction between vertex 12 and 13" can mean many things. Can you specify ?

Find an example of a python scripted node in the devkit - there should be some.
If not, you can find one online - there should be plenty.
You can start with pyExpression, but it may be too confusing, because there is a lot of code.
Then the easiest way to draw something is to plop your code in the ::draw method for VP1 or in the yourNodeDrawOverride:draw method for VP2.

Why normals are set to face ?
That's the standard behavior.

Looking at your code - there are quite few things that are not right.
I would not say they are wrong, but not right for sure. :)

1. Try to use PythonApi 2 in general. Especially true for new code.
2. Do not use Python containers to store array data, they are slow.
3. Do not append to arrays if you know the number of elements.
4. No reason to use the ::set operator if you can just use the = one.
5. I understand this is a study, so i just state the obvious - stay away from python scripted nodes in production, especially for drawing on screen. Performance will be gone in no time from your Maya session.

Hope this can get you on the right track.
0
Previous Topic | Next Topic
Print
Reply

Quick Navigation: