Init Repo
This commit is contained in:
commit
c77e23ed4e
|
|
@ -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)
|
||||||
|
|
@ -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,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
|
||||||
|
)
|
||||||
|
|
@ -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)
|
||||||
Loading…
Reference in New Issue