Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 5 additions & 3 deletions src/ForwardDeclarations.inl
Original file line number Diff line number Diff line change
@@ -1,12 +1,16 @@
py::class_<MAngle> Angle(m, "Angle");
py::class_<MDAGDrawOverrideInfo> DAGDrawOverrideInfo(m, "DAGDrawOverrideInfo");
py::class_<MDGModifier> DGModifier(m, "DGModifier");
py::class_<MDagModifier, MDGModifier> DagModifier(m, "DagModifier");
py::class_<MDagPath> DagPath(m, "DagPath");
py::class_<MDagPathArray> DagPathArray(m, "DagPathArray");
py::class_<MDataBlock> DataBlock(m, "DataBlock");
py::class_<MDataHandle> DataHandle(m, "DataHandle");
py::class_<MDistance> Distance(m, "Distance");
py::class_<MFn> Fn(m, "Fn");
py::class_<MFnDependencyNode> FnDependencyNode(m, "FnDependencyNode");
py::class_<MFnBase> FnBase(m, "FnBase");
py::class_<MFnDependencyNode, MFnBase> FnDependencyNode(m, "FnDependencyNode");
py::class_<MFnDagNode, MFnDependencyNode> FnDagNode(m, "FnDagNode");
py::class_<MMatrix> Matrix(m, "Matrix");
py::class_<MObject> Object(m, "Object");
py::class_<MObjectArray> ObjectArray(m, "ObjectArray");
Expand All @@ -24,7 +28,5 @@ py::class_<MVector> Vector(m, "Vector");
py::enum_<MFn::Type> fn_type(Fn, "Type");
py::class_<MUuid> Uuid(m, "Uuid");
py::class_<MNodeClass> NodeClass(m, "NodeClass");
py::class_<MDGModifier> DGModifier(m, "DGModifier");
py::class_<MFnDagNode> FnDagNode(m, "FnDagNode");
py::class_<MBoundingBox> BoundingBox(m, "BoundingBox");
py::class_<MColor> Color(m, "Color");
4 changes: 1 addition & 3 deletions src/MDagModifier.inl
Original file line number Diff line number Diff line change
Expand Up @@ -25,9 +25,7 @@
"If it is not a transform type then the doIt() will raise a RuntimeError."


#include "MDGModifier.inl"

py::class_<MDagModifier, MDGModifier>(m, "DagModifier")
DagModifier
.def(py::init<>())

.def("createNode", [](MDagModifier & self, std::string type, MObject parent = MObject::kNullObj) -> MObject {
Expand Down
57 changes: 57 additions & 0 deletions src/MFnBase.inl
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
#define _doc_FnBase_type \
"Returns the type of the function set."

#define _doc_FnBase_hasObj \
"Returns True if the function set is compatible with the specified Maya object."

#define _doc_FnBase_object \
"Returns a reference to the object to which the function set is currently attached, or MObject.kNullObj if none."

#define _doc_FnBase_setObject \
"Attaches the function set to the specified Maya object."

#define _doc_FnBase_className \
"Returns the name of this class."

#define _doc_FnBase_typeString \
"Returns the type string for a given type."

#define _doc_FnBase_isValid \
"Returns true if type is in the range of valid types."


FnBase
.def("type", &MFnBase::type, _doc_FnBase_type)

.def("hasObj", [](MFnBase& self, MFn::Type mtype) -> bool
{ return self.hasObj(mtype); },
py::arg("mtype"), _doc_FnBase_hasObj)

.def("hasObj", [](MFnBase& self, const MObject& object) -> bool
{ return self.hasObj(object); },
py::arg("object"), _doc_FnBase_hasObj)

.def("object", [](MFnBase& self) -> MObject {
MStatus status;
MObject result = self.object(&status);
CHECK_STATUS(status);
return result;
}, _doc_FnBase_object)

.def("setObject", [](MFnBase& self, const MObject & object) -> void {
if (!self.setObject(object)) throw std::runtime_error(
"Invalid parameter passed for node - "
"not a DAG Node, "
"Node does not exist or "
"no valid pointer to Node"
);
}, py::arg("object"), _doc_FnBase_setObject)

.def("className", &MFnBase::className, _doc_FnBase_className)

// These methods are new in maya 2020+
#if MAYA_APP_VERSION >= 2020
.def_static( "typeString", &MFnBase::typeString, py::arg("mtype"), _doc_FnBase_typeString)
.def_static("isValid", &MFnBase::isValid, py::arg("mtype"), _doc_FnBase_isValid)
#endif
;
13 changes: 0 additions & 13 deletions src/MFnDagNode.inl
Original file line number Diff line number Diff line change
Expand Up @@ -97,9 +97,6 @@
#define _doc_FnDagNode_setObject \
"Attaches the function set to the specified node or DAG path."

#define _doc_FnDagNode_setObject \
"Attaches the function set to the specified node or DAG path."

#define _doc_FnDagNode_transformationMatrix \
"Returns the object space transformation matrix for this DAG node."

Expand Down Expand Up @@ -388,16 +385,6 @@ FnDagNode
return self.removeChildAt(index);
}, py::arg("index"), _doc_FnDagNode_removeChildAt)

.def("setObject", [](MFnDagNode& self, MObject& object) -> void {
if (!self.setObject(object)) throw std::runtime_error(
"Invalid parameter passed for node - "
"not a DAG Node, "
"Node does not exist or "
"no valid pointer to Node"
);
}, py::arg("object"),
_doc_FnDagNode_setObject)

.def("setObject", [](MFnDagNode& self, MDagPath path) {
if (!self.setObject(path)) throw std::runtime_error(
"Invalid parameter passed for objectPath - "
Expand Down
6 changes: 4 additions & 2 deletions src/main.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@
#include <maya/MDGModifier.h>
#include <maya/MEulerRotation.h>
#include <maya/MFn.h>
#include <maya/MFnBase.h>
#include <maya/MIntArray.h>
#include <maya/MMatrix.h>
#include <maya/MNodeClass.h>
Expand Down Expand Up @@ -73,10 +74,11 @@ PYBIND11_MODULE(cmdc, m) {
#include "MDagPath.inl"
#include "MDGModifier.inl"
#include "MFn.inl"
#include "Types.inl"
#include "MObject.inl"
#include "MFnBase.inl"
#include "MFnDependencyNode.inl"
#include "MFnDagNode.inl"
#include "Types.inl"
#include "MObject.inl"
#include "MBoundingBox.inl"
#include "MPlug.inl"
#include "MSelectionList.inl"
Expand Down
3 changes: 3 additions & 0 deletions tests/test_MDagModifier.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,9 @@

from . import assert_equals, as_obj, as_plug, new_scene

def test_subclassDGModifier():
assert issubclass(cmdc.DagModifier, cmdc.DGModifier)

def test_createNode():
return

Expand Down
62 changes: 62 additions & 0 deletions tests/test_MFnBase.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,62 @@
import cmdc
import maya.api.OpenMaya as om
import nose
from nose.tools import raises


def test_type():
sel = cmdc.SelectionList().add("persp")
persp = sel.getDependNode(0)
fn = cmdc.FnDagNode(persp)
assert cmdc.FnBase.type(fn) == cmdc.Fn.kDagNode

def test_hasObj():
# we have to test this on a subclass of FnBase as it can't be instantiated
sel = cmdc.SelectionList().add("persp")
persp = sel.getDependNode(0)
fn = cmdc.FnDagNode(persp)
assert fn.hasObj(persp)

def test_object():
# we have to test this on a subclass of FnBase as it can't be instantiated
sel = cmdc.SelectionList().add("persp")
persp = sel.getDependNode(0)
fn = cmdc.FnDagNode(persp)
assert fn.object() == persp

@raises(RuntimeError)
def test_object_invalid():
fn = cmdc.FnDagNode()
fn.object()

def test_setObject():
# we have to test this on a subclass of FnBase as it can't be instantiated
sel = cmdc.SelectionList().add("persp").add("perspShape")
persp = sel.getDependNode(0)
persp_shape = sel.getDependNode(1)

fn = cmdc.FnDagNode(persp)
assert fn.object() == persp

fn.setObject(persp_shape)
assert fn.object() == persp_shape

def test_className():
assert cmdc.FnBase.className() == cmdc.FnBase.__name__

def test_typeString():
if om.MGlobal.apiVersion() < 20200000:
raise nose.SkipTest(
"MFnBase::typeString is not defined prior to maya 2020."
)

assert cmdc.FnBase.typeString(cmdc.Fn.kDagNode) == "kDagNode"

def test_isValid():
if om.MGlobal.apiVersion() < 20200000:
raise nose.SkipTest(
"MFnBase::isValid is not defined prior to maya 2020."
)

assert cmdc.FnBase.isValid(cmdc.Fn.kDagNode) is True
assert cmdc.FnBase.isValid(cmdc.Fn.kLast) is False
2 changes: 2 additions & 0 deletions tests/test_MFnDagNode.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,8 @@
assert_equals,
)

def test_inherits_FnDependencyNode():
assert issubclass(cmdc.FnDagNode, cmdc.FnDependencyNode)

def test_create():
fn = cmdc.FnDagNode()
Expand Down
4 changes: 4 additions & 0 deletions tests/test_MFnDependencyNode.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
import cmdc

def test_inherits_FnBase():
assert issubclass(cmdc.FnDependencyNode, cmdc.FnBase)