Init Repo

This commit is contained in:
indigo 2023-09-26 13:19:46 +08:00
commit c77e23ed4e
10 changed files with 662 additions and 0 deletions

12
CMakeLists.txt Normal file
View File

@ -0,0 +1,12 @@
project(BifrostUtils)
cmake_minimum_required(VERSION 3.2)
set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH}
${CMAKE_SOURCE_DIR}/cmake/modules
${CMAKE_SOURCE_DIR}/cmake/macros)
include(CheckCXXCompilerFlag)
CHECK_CXX_COMPILER_FLAG("-std=c++11" COMPILER_SUPPORTS_CXX11)
CHECK_CXX_COMPILER_FLAG("-std=c++0x" COMPILER_SUPPORTS_CXX0X)
add_subdirectory(src)

109
CMakePresets.json Normal file
View File

@ -0,0 +1,109 @@
{
"version": 2,
"configurePresets": [
{
"name": "Maya2020",
"displayName": "Maya 2020",
"description": "Build as Visual Studio 15 2017",
"generator": "Visual Studio 17 2022",
"toolset": "v141",
"binaryDir": "${sourceDir}/build/${presetName}",
"cacheVariables": {
"CMAKE_BUILD_TYPE": "Release",
"CMAKE_TOOLCHAIN_FILE": "",
"CMAKE_INSTALL_PREFIX": "${sourceDir}/install",
"CMAKE_CXX_FLAGS_RELWITHDEBINFO": "/Od /Zi",
"CMAKE_CXX_FLAGS_RELEASE": "/O2"
},
"environment": {
"MAYA_VERSION": "2020"
}
},
{
"name": "Maya2022",
"displayName": "Maya 2022",
"description": "Build as Visual Studio 16 2019",
"generator": "Visual Studio 17 2022",
"toolset": "v142",
"binaryDir": "${sourceDir}/build/${presetName}",
"cacheVariables": {
"CMAKE_BUILD_TYPE": "Release",
"CMAKE_TOOLCHAIN_FILE": "",
"CMAKE_INSTALL_PREFIX": "${sourceDir}/install",
"CMAKE_CXX_FLAGS_RELWITHDEBINFO": "/Od /Zi",
"CMAKE_CXX_FLAGS_RELEASE": "/O2"
},
"environment": {
"MAYA_VERSION": "2022"
}
},
{
"name": "Maya2023",
"displayName": "Maya 2023",
"description": "Build as Visual Studio 16 2019",
"generator": "Visual Studio 17 2022",
"toolset": "v142",
"binaryDir": "${sourceDir}/build/${presetName}",
"cacheVariables": {
"CMAKE_BUILD_TYPE": "Release",
"CMAKE_TOOLCHAIN_FILE": "",
"CMAKE_INSTALL_PREFIX": "${sourceDir}/install",
"CMAKE_CXX_FLAGS_RELWITHDEBINFO": "/Od /Zi",
"CMAKE_CXX_FLAGS_RELEASE": "/O2"
},
"environment": {
"MAYA_VERSION": "2023"
}
}
],
"buildPresets": [
{
"name": "Maya2020_Release",
"description": "Release Build",
"displayName": "Maya 2020 Release",
"configurePreset": "Maya2020",
"configuration": "Release",
"targets": "install"
},
{
"name": "Maya2020_RelWithDebInfo",
"description": "Release Build with Debug Info",
"displayName": "Maya 2020 RelWithDebInfo",
"configurePreset": "Maya2020",
"configuration": "RelWithDebInfo",
"targets": "install"
},
{
"name": "Maya2022_Release",
"description": "Release Build",
"displayName": "Maya 2022 Release",
"configurePreset": "Maya2022",
"configuration": "Release",
"targets": "install"
},
{
"name": "Maya2022_RelWithDebInfo",
"description": "Release Build with Debug Info",
"displayName": "Maya 2022 RelWithDebInfo",
"configurePreset": "Maya2022",
"configuration": "RelWithDebInfo",
"targets": "install"
},
{
"name": "Maya2023_Release",
"description": "Release Build",
"displayName": "Maya 2023 Release",
"configurePreset": "Maya2023",
"configuration": "Release",
"targets": "install"
},
{
"name": "Maya2023_RelWithDebInfo",
"description": "Release Build with Debug Info",
"displayName": "Maya 2023 RelWithDebInfo",
"configurePreset": "Maya2023",
"configuration": "RelWithDebInfo",
"targets": "install"
}
]
}

0
README.md Normal file
View File

View File

@ -0,0 +1,210 @@
include(FindPackageHandleStandardArgs)
if(NOT DEFINED MAYA_VERSION)
set(MAYA_VERSION 2018)
endif()
if(DEFINED ENV{MAYA_VERSION})
set(MAYA_VERSION $ENV{MAYA_VERSION})
endif()
set(MAYA_BIN_SUFFIX "bin")
set(MAYA_INC_SUFFIX "include")
set(MAYA_LIB_SUFFIX "lib")
if(WIN32)
set(MAYA_LOCATION "$ENV{ProgramFiles}/Autodesk/Maya${MAYA_VERSION}")
set(MAYA_PLUGIN_EXT ".mll")
set(MAYA_COMPILE_FLAGS "/MD /D \"NT_PLUGIN\" /D \"REQUIRE_IOSTREAM\" /D \"_BOOL\"" )
set(MAYA_LINK_FLAGS " /export:initializePlugin /export:uninitializePlugin " )
elseif(APPLE)
set(MAYA_LOCATION "/Applications/Autodesk/maya${MAYA_VERSION}")
set(MAYA_PLUGIN_EXT ".bundle")
set(MAYA_COMPILE_FLAGS "-DAW_NEW_IOSTREAMS -DCC_GNU_ -DOSMac_ -DOSMacOSX_ -DOSMac_MachO_ -DREQUIRE_IOSTREAM -fno-gnu-keywords -D_LANGUAGE_C_PLUS_PLUS")
set(MAYA_LINK_FLAGS "-fno-gnu-keywords -framework System -framework SystemConfiguration -framework CoreServices -framework Carbon -framework Cocoa -framework ApplicationServices -framework Quicktime -framework IOKit -bundle -fPIC -L${ALEMBIC_MAYA_LIB_ROOT} -Wl,-executable_path,${ALEMBIC_MAYA_LIB_ROOT}")
else()
set(MAYA_LOCATION "/usr/autodesk/maya${MAYA_VERSION}")
set(MAYA_PLUGIN_EXT ".so")
set(MAYA_COMPILE_FLAGS "-m64 -g -pthread -pipe -D_BOOL -DLINUX -DLINUX_64 -DREQUIRE_IOSTREAM -fPIC -Wno-deprecated -fno-gnu-keywords")
set(MAYA_LINK_FLAGS "-shared -m64 -g -pthread -pipe -D_BOOL -DLINUX -DLINUX_64 -DREQUIRE_IOSTREAM -fPIC -Wno-deprecated -fno-gnu-keywords -Wl,-Bsymbolic")
endif()
set(MAYA_ROOT ${MAYA_LOCATION})
string(REPLACE "\\" "/" MAYA_ROOT ${MAYA_ROOT})
if(DEFINED ENV{MAYA_LOCATION})
set(MAYA_ROOT $ENV{MAYA_LOCATION})
endif()
set(MAYA_EXE MAYA_EXE-NOTFOUND)
find_program(MAYA_EXE maya
PATHS
${MAYA_ROOT}
PATH_SUFFIXES
"${MAYA_BIN_SUFFIX}"
NO_DEFAULT_PATH
DOC "Maya Executable Path")
set(MAYA_PY_EXE MAYA_PY_EXE-NOTFOUND)
find_program(MAYA_PY_EXE mayapy
PATHS
${MAYA_ROOT}
PATH_SUFFIXES
"${MAYA_BIN_SUFFIX}"
NO_DEFAULT_PATH
DOC "Maya Python Executable Path")
set(MAYA_INCLUDE_PATH MAYA_INCLUDE_PATH-NOTFOUND)
find_path(MAYA_INCLUDE_PATH "maya/MFn.h"
PATHS
${MAYA_ROOT}
PATH_SUFFIXES
"${MAYA_INC_SUFFIX}"
NO_DEFAULT_PATH
DOC "Maya Include Dir")
set(MAYA_OPENMAYA_LIBRARY MAYA_OPENMAYA_LIBRARY-NOTFOUND)
find_library(MAYA_OPENMAYA_LIBRARY OpenMaya
PATHS
"${MAYA_ROOT}/lib"
DOC "OpenMaya Libray Path")
if(MAYA_OPENMAYA_LIBRARY)
set(MAYA_LIBRARY_PATH "${MAYA_ROOT}/lib")
endif()
set(MAYA_OPENMAYAFX_LIBRARY MAYA_OPENMAYAFX_LIBRARY-NOTFOUND)
find_library(MAYA_OPENMAYAFX_LIBRARY OpenMayaFX
PATHS
"${MAYA_ROOT}/lib"
DOC "OpenMayaFX Libray Path")
set(MAYA_OPENMAYAANIM_LIBRARY MAYA_OPENMAYAANIM_LIBRARY-NOTFOUND)
find_library(MAYA_OPENMAYAANIM_LIBRARY OpenMayaAnim
PATHS
"${MAYA_ROOT}/lib"
DOC "OpenMayaAnim Libray Path")
set(MAYA_OPENMAYAUI_LIBRARY MAYA_OPENMAYAUI_LIBRARY-NOTFOUND)
find_library(MAYA_OPENMAYAUI_LIBRARY OpenMayaUI
PATHS
"${MAYA_ROOT}/lib"
DOC "OpenMayaUI Libray Path")
set(MAYA_OPENMAYARENDER_LIBRARY MAYA_OPENMAYARENDER_LIBRARY-NOTFOUND)
find_library(MAYA_OPENMAYARENDER_LIBRARY OpenMayaRender
PATHS
"${MAYA_ROOT}/lib"
DOC "OpenMayaRender Libray Path")
set(MAYA_FOUNDATION_LIBRARY MAYA_FOUNDATION_LIBRARY-NOTFOUND)
find_library(MAYA_FOUNDATION_LIBRARY Foundation
PATHS
"${MAYA_ROOT}/lib"
DOC "Foundation Libray Path")
set(XGEN_PLUGIN "plug-ins/xgen")
set(MAYA_XGEN_ROOT MAYA_XGEN_ROOT-NOTFOUND)
if(EXISTS "${MAYA_ROOT}/plug-ins/xgen")
set(MAYA_XGEN_ROOT "${MAYA_ROOT}/plug-ins/xgen")
endif()
set(MAYA_XGEN_INCLUDE_PATH MAYA_XGEN_INCLUDE_PATH-NOTFOUND)
find_path(MAYA_XGEN_INCLUDE_PATH "XGen/XgWinExport.h"
PATHS
${MAYA_ROOT}
PATH_SUFFIXES
"${XGEN_PLUGIN}/${MAYA_INC_SUFFIX}"
NO_DEFAULT_PATH
DOC "Maya XGen Include Dir")
if(MAYA_VERSION GREATER_EQUAL 2020)
find_path(MAYA_XGEN_INCLUDE_PATH "xgen/src/xgcore/XgConfig.h"
PATHS
${MAYA_ROOT}
PATH_SUFFIXES
"${XGEN_PLUGIN}/${MAYA_INC_SUFFIX}"
NO_DEFAULT_PATH
DOC "Maya XGen Include Dir")
endif()
set(MAYA_ADSKXGEN_LIBRARY MAYA_ADSKXGEN_LIBRARY-NOTFOUND)
find_library(MAYA_ADSKXGEN_LIBRARY
AdskXGen
libAdskXGen
PATHS
"${MAYA_ROOT}/plug-ins/xgen/lib"
DOC "libAdskXGen Libray Path")
set(MAYA_XGEN_LIBRARY_PATH MAYA_XGEN_LIBRARY_PATH-NOTFOUND)
if(MAYA_ADSKXGEN_LIBRARY)
set(MAYA_XGEN_LIBRARY_PATH "${MAYA_ROOT}/plug-ins/xgen/lib")
endif()
set(MAYA_ADSKXPD_LIBRARY MAYA_ADSKXPD_LIBRARY-NOTFOUND)
find_library(MAYA_ADSKXPD_LIBRARY
AdskXpd
libAdskXpd
PATHS
"${MAYA_ROOT}/plug-ins/xgen/lib"
DOC "libAdskXpd Libray Path")
set(MAYA_ADSKSEEXPR_LIBRARY MAYA_ADSKSEEXPR_LIBRARY-NOTFOUND)
find_library(MAYA_ADSKSEEXPR_LIBRARY
AdskSeExpr
libAdskSeExpr
PATHS
"${MAYA_ROOT}/plug-ins/xgen/lib"
DOC "libAdskSeExpr Libray Path")
set(MAYA_LIBRARIES
${MAYA_FOUNDATION_LIBRARY}
${MAYA_OPENMAYA_LIBRARY}
${MAYA_OPENMAYAANIM_LIBRARY}
${MAYA_OPENMAYAFX_LIBRARY}
${MAYA_OPENMAYARENDER_LIBRARY}
${MAYA_OPENMAYAUI_LIBRARY})
set(MAYA_XGEN_LIBRARIES
${MAYA_ADSKXGEN_LIBRARY}
${MAYA_ADSKXPD_LIBRARY}
${MAYA_ADSKSEEXPR_LIBRARY})
message(STATUS "MAYA_ROOT : ${MAYA_ROOT}")
message(STATUS "MAYA_EXE : ${MAYA_EXE}")
message(STATUS "MAYA_PY_EXE : ${MAYA_PY_EXE}")
message(STATUS "MAYA_INCLUDE_PATH : ${MAYA_INCLUDE_PATH}")
message(STATUS "MAYA_LIBRARY_PATH : ${MAYA_LIBRARY_PATH}")
message(STATUS "MAYA_FOUNDATION_LIBRARY : ${MAYA_FOUNDATION_LIBRARY}")
message(STATUS "MAYA_OPENMAYA_LIBRARY : ${MAYA_OPENMAYA_LIBRARY}")
message(STATUS "MAYA_OPENMAYAANIM_LIBRARY : ${MAYA_OPENMAYAANIM_LIBRARY}")
message(STATUS "MAYA_OPENMAYAFX_LIBRARY : ${MAYA_OPENMAYAFX_LIBRARY}")
message(STATUS "MAYA_OPENMAYARENDER_LIBRARY : ${MAYA_OPENMAYARENDER_LIBRARY}")
message(STATUS "MAYA_OPENMAYAUI_LIBRARY : ${MAYA_OPENMAYAUI_LIBRARY}")
message(STATUS "----------------------------------------------")
message(STATUS "Maya XGen SDK")
message(STATUS "----------------------------------------------")
message(STATUS "MAYA_XGEN_ROOT : ${MAYA_XGEN_ROOT}")
message(STATUS "MAYA_XGEN_INCLUDE_PATH : ${MAYA_XGEN_INCLUDE_PATH}")
message(STATUS "MAYA_XGEN_LIBRARY_PATH : ${MAYA_XGEN_LIBRARY_PATH}")
message(STATUS "MAYA_ADSKXGEN_LIBRARY : ${MAYA_ADSKXGEN_LIBRARY}")
message(STATUS "MAYA_ADSKXPD_LIBRARY : ${MAYA_ADSKXPD_LIBRARY}")
message(STATUS "MAYA_ADSKSEEXPR_LIBRARY : ${MAYA_ADSKSEEXPR_LIBRARY}")
find_package_handle_standard_args(Maya
REQUIRED_VARS
MAYA_ROOT
MAYA_INCLUDE_PATH
MAYA_LIBRARY_PATH
MAYA_FOUNDATION_LIBRARY
MAYA_OPENMAYA_LIBRARY
MAYA_OPENMAYAANIM_LIBRARY
MAYA_OPENMAYAFX_LIBRARY
MAYA_OPENMAYARENDER_LIBRARY
MAYA_OPENMAYAUI_LIBRARY
VERSION_VAR
MAYA_VERSION
)

View File

@ -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;
}

View File

@ -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;
};

View File

@ -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

View File

@ -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()

View File

@ -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;
}

1
src/CMakeLists.txt Normal file
View File

@ -0,0 +1 @@
add_subdirectory(BifrostUtils)