Init Repo
This commit is contained in:
@@ -0,0 +1,226 @@
|
||||
#include "BifrostArrayMapper.h"
|
||||
#include <maya/MFnNumericAttribute.h>
|
||||
#include <maya/MFnCompoundAttribute.h>
|
||||
#include <maya/MFnTypedAttribute.h>
|
||||
#include <maya/MFnVectorArrayData.h>
|
||||
#include <maya/MFnIntArrayData.h>
|
||||
#include <maya/MFnFloatArrayData.h>
|
||||
#include <maya/MFnDoubleArrayData.h>
|
||||
#include <maya/MVectorArray.h>
|
||||
#include <maya/MDoubleArray.h>
|
||||
|
||||
MTypeId BifrostArrayMapper::id = 0x80007;
|
||||
MObject BifrostArrayMapper::mOutPositionPP;
|
||||
MObject BifrostArrayMapper::mOutRotationPP;
|
||||
MObject BifrostArrayMapper::mOutInstancePP;
|
||||
MObject BifrostArrayMapper::mOutSizePP;
|
||||
MObject BifrostArrayMapper::mParticleCount;
|
||||
MObject BifrostArrayMapper::mPointPosition;
|
||||
MObject BifrostArrayMapper::mArrayPoint;
|
||||
MObject BifrostArrayMapper::mInstanceId;
|
||||
MObject BifrostArrayMapper::mPointSize;
|
||||
MObject BifrostArrayMapper::mPointRotation;
|
||||
|
||||
BifrostArrayMapper::BifrostArrayMapper(){};
|
||||
BifrostArrayMapper::~BifrostArrayMapper(){};
|
||||
|
||||
void* BifrostArrayMapper::creator()
|
||||
{
|
||||
return new BifrostArrayMapper();
|
||||
}
|
||||
|
||||
MStatus BifrostArrayMapper::initialize()
|
||||
{
|
||||
MStatus status;
|
||||
MFnNumericAttribute nAttr;
|
||||
MFnCompoundAttribute cAttr;
|
||||
MFnTypedAttribute tAttr;
|
||||
|
||||
mPointPosition = nAttr.createPoint("pointPosition", "pp");
|
||||
nAttr.setArray(true);
|
||||
nAttr.setUsesArrayDataBuilder(true);
|
||||
nAttr.setKeyable(true);
|
||||
nAttr.setStorable(true);
|
||||
nAttr.setReadable(true);
|
||||
nAttr.setWritable(true);
|
||||
|
||||
mPointRotation = nAttr.createPoint("pointRotation", "pr");
|
||||
nAttr.setArray(true);
|
||||
nAttr.setUsesArrayDataBuilder(true);
|
||||
nAttr.setKeyable(true);
|
||||
nAttr.setStorable(true);
|
||||
nAttr.setReadable(true);
|
||||
nAttr.setWritable(true);
|
||||
|
||||
mInstanceId = nAttr.create("instanceId", "iid", MFnNumericData::kLong, 0);
|
||||
nAttr.setArray(true);
|
||||
nAttr.setUsesArrayDataBuilder(true);
|
||||
nAttr.setKeyable(true);
|
||||
nAttr.setStorable(true);
|
||||
nAttr.setReadable(true);
|
||||
nAttr.setWritable(true);
|
||||
|
||||
mPointSize = nAttr.create("pointSize", "ps", MFnNumericData::kFloat, 0);
|
||||
nAttr.setArray(true);
|
||||
nAttr.setUsesArrayDataBuilder(true);
|
||||
nAttr.setKeyable(true);
|
||||
nAttr.setStorable(true);
|
||||
nAttr.setReadable(true);
|
||||
nAttr.setWritable(true);
|
||||
|
||||
mParticleCount = nAttr.create("pointCount", "pc", MFnNumericData::kInt, 0);
|
||||
nAttr.setStorable(true);
|
||||
|
||||
MVectorArray defaultVectorArray;
|
||||
MFnVectorArrayData fnVectorArrayData;
|
||||
fnVectorArrayData.create(defaultVectorArray);
|
||||
|
||||
mOutPositionPP = tAttr.create("outPositionPP", "opos", MFnData::kVectorArray, fnVectorArrayData.object());
|
||||
tAttr.setWritable(true);
|
||||
tAttr.setStorable(true);
|
||||
|
||||
mOutRotationPP = tAttr.create("outRotationPP", "orot", MFnData::kVectorArray, fnVectorArrayData.object());
|
||||
tAttr.setWritable(true);
|
||||
tAttr.setStorable(true);
|
||||
|
||||
MDoubleArray defaultDoubleArray;
|
||||
MFnDoubleArrayData fnDoubleArrayData;
|
||||
fnDoubleArrayData.create(defaultDoubleArray);
|
||||
|
||||
mOutInstancePP = tAttr.create("outInstanceIdPP", "oiid", MFnData::kDoubleArray, fnDoubleArrayData.object());
|
||||
tAttr.setWritable(true);
|
||||
tAttr.setStorable(true);
|
||||
|
||||
mOutSizePP = tAttr.create("outSizePP", "osiz", MFnData::kDoubleArray, fnDoubleArrayData.object());
|
||||
tAttr.setWritable(true);
|
||||
tAttr.setStorable(true);
|
||||
|
||||
addAttribute(mPointPosition);
|
||||
addAttribute(mPointRotation);
|
||||
addAttribute(mInstanceId);
|
||||
addAttribute(mPointSize);
|
||||
addAttribute(mParticleCount);
|
||||
addAttribute(mOutPositionPP);
|
||||
addAttribute(mOutRotationPP);
|
||||
addAttribute(mOutInstancePP);
|
||||
addAttribute(mOutSizePP);
|
||||
|
||||
attributeAffects(mPointPosition, mOutPositionPP);
|
||||
attributeAffects(mPointRotation, mOutRotationPP);
|
||||
attributeAffects(mInstanceId, mOutInstancePP);
|
||||
attributeAffects(mPointSize, mOutSizePP);
|
||||
|
||||
attributeAffects(mPointPosition, mParticleCount);
|
||||
attributeAffects(mPointRotation, mParticleCount);
|
||||
attributeAffects(mInstanceId, mParticleCount);
|
||||
attributeAffects(mPointSize, mParticleCount);
|
||||
|
||||
return MS::kSuccess;
|
||||
}
|
||||
|
||||
MStatus BifrostArrayMapper::computePosition(const MPlug& plug, MDataBlock& block)
|
||||
{
|
||||
MStatus status;
|
||||
MFnVectorArrayData fnPosArrayData(block.outputValue(mOutPositionPP).data());
|
||||
MVectorArray outPosArray = fnPosArrayData.array(&status);
|
||||
if(status == MS::kInvalidParameter)
|
||||
return status;
|
||||
MDataHandle particleCountHandle = block.outputValue(mParticleCount);
|
||||
MArrayDataHandle inputArrayDataHandle = block.inputArrayValue(mPointPosition);
|
||||
unsigned int elementCount = inputArrayDataHandle.elementCount();
|
||||
outPosArray.setLength(elementCount);
|
||||
for(unsigned int i = 0; i < elementCount; i++ )
|
||||
{
|
||||
inputArrayDataHandle.jumpToElement(i);
|
||||
MFloatVector p = inputArrayDataHandle.inputValue().asFloatVector();
|
||||
outPosArray.set(MVector(p), i);
|
||||
}
|
||||
fnPosArrayData.set(outPosArray);
|
||||
particleCountHandle.setInt(elementCount);
|
||||
return status;
|
||||
}
|
||||
|
||||
MStatus BifrostArrayMapper::computeRotation(const MPlug& plug, MDataBlock& block)
|
||||
{
|
||||
MStatus status;
|
||||
MFnVectorArrayData fnRotArrayData(block.outputValue(mOutRotationPP).data());
|
||||
MVectorArray outRotArray = fnRotArrayData.array(&status);
|
||||
if(status == MS::kInvalidParameter)
|
||||
return status;
|
||||
MDataHandle particleCountHandle = block.outputValue(mParticleCount);
|
||||
MArrayDataHandle inputArrayDataHandle = block.inputArrayValue(mPointRotation);
|
||||
unsigned int elementCount = inputArrayDataHandle.elementCount();
|
||||
outRotArray.setLength(elementCount);
|
||||
for(unsigned int i = 0; i < elementCount; i++ )
|
||||
{
|
||||
inputArrayDataHandle.jumpToElement(i);
|
||||
MFloatVector p = inputArrayDataHandle.inputValue().asFloatVector();
|
||||
outRotArray.set(MVector(p), i);
|
||||
}
|
||||
fnRotArrayData.set(outRotArray);
|
||||
particleCountHandle.setInt(elementCount);
|
||||
return status;
|
||||
}
|
||||
|
||||
MStatus BifrostArrayMapper::computeInstanceId(const MPlug& plug, MDataBlock& block)
|
||||
{
|
||||
MStatus status;
|
||||
MFnDoubleArrayData fnInstArrayData(block.outputValue(mOutInstancePP).data());
|
||||
MDoubleArray outInstArray = fnInstArrayData.array(&status);
|
||||
if(status == MS::kInvalidParameter)
|
||||
return status;
|
||||
MDataHandle particleCountHandle = block.outputValue(mParticleCount);
|
||||
MArrayDataHandle inputArrayDataHandle = block.inputArrayValue(mInstanceId);
|
||||
unsigned int elementCount = inputArrayDataHandle.elementCount();
|
||||
outInstArray.setLength(elementCount);
|
||||
for(unsigned int i = 0; i < elementCount; i++ )
|
||||
{
|
||||
inputArrayDataHandle.jumpToElement(i);
|
||||
int instId = inputArrayDataHandle.inputValue().asInt();
|
||||
outInstArray.set((float)instId, i);
|
||||
}
|
||||
fnInstArrayData.set(outInstArray);
|
||||
particleCountHandle.setInt(elementCount);
|
||||
return status;
|
||||
}
|
||||
|
||||
MStatus BifrostArrayMapper::computeSize(const MPlug& plug, MDataBlock& block)
|
||||
{
|
||||
MStatus status;
|
||||
MFnDoubleArrayData fnSizeArrayData(block.outputValue(mOutSizePP).data());
|
||||
MDoubleArray outSizeArray = fnSizeArrayData.array(&status);
|
||||
if(status == MS::kInvalidParameter)
|
||||
return status;
|
||||
MDataHandle particleCountHandle = block.outputValue(mParticleCount);
|
||||
MArrayDataHandle inputArrayDataHandle = block.inputArrayValue(mPointSize);
|
||||
unsigned int elementCount = inputArrayDataHandle.elementCount();
|
||||
outSizeArray.setLength(elementCount);
|
||||
for(unsigned int i = 0; i < elementCount; i++ )
|
||||
{
|
||||
inputArrayDataHandle.jumpToElement(i);
|
||||
float s = inputArrayDataHandle.inputValue().asFloat();
|
||||
outSizeArray.set((float)s, i);
|
||||
}
|
||||
fnSizeArrayData.set(outSizeArray);
|
||||
particleCountHandle.setInt(elementCount);
|
||||
return status;
|
||||
}
|
||||
|
||||
MStatus BifrostArrayMapper::compute(const MPlug& plug, MDataBlock& block)
|
||||
{
|
||||
MStatus status;
|
||||
if(plug.attribute() == mOutPositionPP)
|
||||
{
|
||||
computePosition(plug, block);
|
||||
} else if(plug.attribute() == mOutRotationPP)
|
||||
{
|
||||
computeRotation(plug, block);
|
||||
} else if(plug.attribute() == mOutInstancePP)
|
||||
{
|
||||
computeInstanceId(plug, block);
|
||||
} else if(plug.attribute() == mOutSizePP)
|
||||
{
|
||||
computeSize(plug, block);
|
||||
}
|
||||
return status;
|
||||
}
|
||||
@@ -0,0 +1,34 @@
|
||||
#include <maya/MPxParticleAttributeMapperNode.h>
|
||||
#include <maya/MTypeId.h>
|
||||
|
||||
#define kNodeTypeName "bifrostArrayMapper"
|
||||
|
||||
class BifrostArrayMapper : public MPxParticleAttributeMapperNode
|
||||
{
|
||||
public:
|
||||
BifrostArrayMapper();
|
||||
~BifrostArrayMapper() override;
|
||||
static void *creator();
|
||||
static MStatus initialize();
|
||||
|
||||
MStatus compute(const MPlug& plug, MDataBlock& block) override;
|
||||
|
||||
protected:
|
||||
MStatus computePosition(const MPlug& plug, MDataBlock& block);
|
||||
MStatus computeRotation(const MPlug& plug, MDataBlock& block);
|
||||
MStatus computeInstanceId(const MPlug& plug, MDataBlock& block);
|
||||
MStatus computeSize(const MPlug& plug, MDataBlock& block);
|
||||
|
||||
public:
|
||||
static MTypeId id;
|
||||
static MObject mOutPositionPP;
|
||||
static MObject mOutRotationPP;
|
||||
static MObject mOutInstancePP;
|
||||
static MObject mOutSizePP;
|
||||
static MObject mParticleCount;
|
||||
static MObject mPointPosition;
|
||||
static MObject mArrayPoint;
|
||||
static MObject mInstanceId;
|
||||
static MObject mPointSize;
|
||||
static MObject mPointRotation;
|
||||
};
|
||||
@@ -0,0 +1,8 @@
|
||||
+ MAYA_VERSION:2020 BifrostUtils 1.0 .
|
||||
plug-ins: plug-ins/2020
|
||||
|
||||
+ MAYA_VERSION:2022 BifrostUtils 1.0 .
|
||||
plug-ins: plug-ins/2022
|
||||
|
||||
+ MAYA_VERSION:2023 BifrostUtils 1.0 .
|
||||
plug-ins: plug-ins/2023
|
||||
@@ -0,0 +1,28 @@
|
||||
project(BifrostUtils)
|
||||
|
||||
find_package(Maya)
|
||||
|
||||
set(SRC_FILES
|
||||
"BifrostArrayMapper.h"
|
||||
"BifrostArrayMapper.cpp"
|
||||
"Plugin.cpp")
|
||||
|
||||
set(RESOURCE_FILES
|
||||
"BifrostUtils.mod")
|
||||
|
||||
include_directories(
|
||||
${MAYA_INCLUDE_PATH}
|
||||
)
|
||||
|
||||
add_library(${PROJECT_NAME} SHARED ${SRC_FILES})
|
||||
|
||||
target_link_libraries(${PROJECT_NAME} ${MAYA_LIBRARIES})
|
||||
|
||||
set_target_properties(${PROJECT_NAME} PROPERTIES COMPILE_FLAGS -D_CRT_SECURE_NO_WARNINGS)
|
||||
set_target_properties(${PROJECT_NAME} PROPERTIES SUFFIX ".mll")
|
||||
|
||||
install(TARGETS ${PROJECT_NAME} RUNTIME DESTINATION "${PROJECT_NAME}/plug-ins/${MAYA_VERSION}")
|
||||
|
||||
foreach(f ${RESOURCE_FILES})
|
||||
install(FILES ${f} DESTINATION ${PROJECT_NAME})
|
||||
endforeach()
|
||||
@@ -0,0 +1,34 @@
|
||||
#include <maya/MFnPlugin.h>
|
||||
#include <maya/MGlobal.h>
|
||||
#include "BifrostArrayMapper.h"
|
||||
|
||||
MStatus initializePlugin(MObject obj)
|
||||
{
|
||||
MStatus status;
|
||||
MFnPlugin plugin(obj, "Indigo 2023", "1.0", "Any");
|
||||
status = plugin.registerNode("bifrostArrayMapper",
|
||||
BifrostArrayMapper::id,
|
||||
BifrostArrayMapper::creator,
|
||||
BifrostArrayMapper::initialize,
|
||||
MPxNode::kParticleAttributeMapperNode);
|
||||
if(!status){
|
||||
status.perror("[BifrostUtils] : Register bifrostArrayMapper node failed.");
|
||||
return status;
|
||||
}
|
||||
MGlobal::displayInfo("[BifrostUtils] : Node bifrostArrayMapper loaded.");
|
||||
return MS::kSuccess;
|
||||
}
|
||||
|
||||
MStatus uninitializePlugin(MObject obj)
|
||||
{
|
||||
MStatus status;
|
||||
MFnPlugin plugin(obj);
|
||||
status = plugin.deregisterNode(BifrostArrayMapper::id);
|
||||
|
||||
if(!status){
|
||||
status.perror("[BifrostUtils] : Deregister bifrostArrayMapper node failed.");
|
||||
return status;
|
||||
}
|
||||
MGlobal::displayInfo("[BifrostUtils] : Node bifrostArrayMapper unloaded.");
|
||||
return MS::kSuccess;
|
||||
}
|
||||
@@ -0,0 +1 @@
|
||||
add_subdirectory(BifrostUtils)
|
||||
Reference in New Issue
Block a user