// Loads the old save by constructing a new save containing the old save's data bool SaveConverter_Notes::load() { if (_size == 0) return false; Common::InSaveFile *save; // Test if it's an old savd if (!isOldSave(&save) || !save) return false; displayWarning(); SaveWriter writer(1, 0); SavePartVars *vars = readVars(*save, _size, false); if (!vars) return loadFail(0, save); // We don't need the save anymore delete save; // Write all parts if (!writer.writePart(0, vars)) return loadFail(0, 0); // We don't need this anymore delete vars; // Create the final read stream if (!createStream(writer)) return loadFail(0, 0); return true; }
// Loads the old save by constructing a new save containing the old save's data bool SaveConverter_v4::load() { clear(); uint32 varSize = SaveHandler::getVarSize(_vm); if (varSize == 0) return false; Common::InSaveFile *save; // Test if it's an old savd if (!isOldSave(&save) || !save) return false; displayWarning(); SaveWriter writer(3, 0); SavePartInfo *info = readInfo(*save, kSlotNameLength, false); if (!info) return loadFail(0, 0, 0, save); SavePartVars *vars = readVars(*save, varSize, true); if (!vars) return loadFail(info, 0, 0, save); SavePartMem *props = readMem(*save, 256000, true); if (!props) return loadFail(info, vars, 0, save); // We don't need the save anymore delete save; // Write all parts if (!writer.writePart(0, info)) return loadFail(info, vars, props, 0); if (!writer.writePart(1, vars)) return loadFail(info, vars, props, 0); if (!writer.writePart(2, props)) return loadFail(info, vars, props, 0); // We don't need those anymore delete info; delete vars; delete props; // Create the final read stream if (!createStream(writer)) return loadFail(0, 0, 0, 0); return true; }
void ListItems::operation( const std::string & i_operation) { std::ostringstream str; std::vector<int> ids = getSelectedIds(); if( ids.size() == 0 ) { displayWarning("No items selected."); return; } af::jsonActionOperation( str, m_type, i_operation, "", ids); Watch::sendMsg( af::jsonMsg( str)); displayInfo(QString("Operation: \"%1\".").arg( afqt::stoq( i_operation))); }
void Dialog::idReceived( int i_id, int i_uid) { if( MonitorHost::id() > 0 ) { if( i_id != MonitorHost::id()) { connectionLost(); } } else { if( i_id == 0) { connectionLost(); } else { AFINFA("Dialog::idReceived: ID=%d UID=%d\n", i_id, i_uid) MonitorHost::connectionEstablished( i_id, i_uid); connectionEstablished(); Watch::connectionEstablished(); if( i_uid == -1 ) { if( m_monitorType == Watch::WJobs ) { ButtonMonitor::unset(); closeList(); } displayWarning("You are not exist."); } else { displayInfo("You have registered."); if( m_monitorType == Watch::WNONE ) { ButtonMonitor::pushButton( Watch::WJobs); } } af::Msg * msg = new af::Msg( af::Msg::TMonitorUpdateId, i_id); m_qThreadClientUpdate.setUpMsg( msg); } } }
/*luadoc @function popupInput(title, event, input, min, max) Raises a pop-up on screen that allows uses input @param title (string) text to display @param event (number) the event variable that is passed in from the Run function (key pressed) @param input (number) value that can be adjusted by the +/- keys @param min (number) min value that input can reach (by pressing the - key) @param max (number) max value that input can reach @retval number result of the input adjustment @retval "OK" user pushed ENT key @retval "CANCEL" user pushed EXIT key @notice Use only from stand-alone and telemetry scripts. @status current Introduced in 2.0.0 */ static int luaPopupInput(lua_State *L) { uint8_t event = luaL_checkinteger(L, 2); warningInputValue = luaL_checkinteger(L, 3); warningInputValueMin = luaL_checkinteger(L, 4); warningInputValueMax = luaL_checkinteger(L, 5); warningText = luaL_checkstring(L, 1); warningType = WARNING_TYPE_INPUT; displayWarning(event); if (warningResult) { warningResult = 0; lua_pushstring(L, "OK"); } else if (!warningText) { lua_pushstring(L, "CANCEL"); } else { lua_pushinteger(L, warningInputValue); } warningText = NULL; return 1; }
void ListJobs::actDeleteDone() { std::vector<int> ids; for( int i = 0; i < m_model->count(); i++) { ItemJob * job = (ItemJob*)(m_model->item(i)); if( job->state & AFJOB::STATE_DONE_MASK ) ids.push_back( job->getId()); } if( ids.size() == 0 ) { displayWarning("No done jobs founded."); return; } std::ostringstream str; af::jsonActionOperation( str,"jobs","delete","", ids); Watch::sendMsg( af::jsonMsg( str)); displayInfo("Delete all done jobs."); }
void ListItems::setParameter( const std::string & i_name, const std::string & i_value, bool i_quoted) { if( getSelectedItemsCount() == 0 ) { displayWarning("No items selected."); return; } displayInfo(QString("\"%1\" = \"%2\"").arg( afqt::stoq(i_name), afqt::stoq( i_value))); std::ostringstream str; af::jsonActionParamsStart( str, m_type, "", getSelectedIds()); str << "\n\"" << i_name << "\":"; if (i_quoted) str << "\"" << af::strEscape(i_value) << "\""; else str << i_value; af::jsonActionParamsFinish( str); Watch::sendMsg( af::jsonMsg( str)); }
MStatus tm_polySlot::doIt( const MArgList& ) // // Description: // implements the MEL tm_polySlot command. // // Arguments: // args - the argument list that was passes to the command from MEL // // Return Value: // MS::kSuccess - command succeeded // MS::kFailure - command failed (returning this value will cause the // MEL script that is being run to terminate unless the // error is caught using a "catch" statement. // { #ifdef _DEBUG cout << endl << "####################################################" << endl; cout << "tm_polySlot::doIt - DEBUG version info:" << endl; #endif MStatus status; // Parse the selection list for objects with selected UV components. // To simplify things, we only take the first object that we find with // selected UVs and operate on that object alone. // // All other objects are ignored and return warning messages indicating // this limitation. // MGlobal::getActiveSelectionList( oldSelList ); MItSelectionList selListIter( oldSelList ); selListIter.setFilter( MFn::kMesh ); // The tm_polySlot node only accepts a component list input, so we build // a component list using MFnComponentListData. // // MIntArrays could also be passed into the node to represent the edgesIds, // but are less storage efficient than component lists, since consecutive // components are bundled into a single entry in component lists. // MFnComponentListData compListFn; compListFn.create(); bool found = false; bool foundMultiple = false; for( ; !selListIter.isDone(); selListIter.next() ) { MDagPath dagPath; MObject component; selListIter.getDagPath( dagPath, component ); // Check for selected UV components // if( component.apiType() == MFn::kMeshEdgeComponent ) { if( !found ) { // The variable 'component' holds all selected components on the selected // object, thus only a single call to MFnComponentListData::add() is needed // to store the selected components for a given object. // compListFn.add( component ); // Copy the component list created by MFnComponentListData into our local // component list MObject member. // fComponentList = compListFn.object(); // Locally store the actual edgesIds of the selected Edges so that this command // can directly modify the mesh in the case when there is no history and // history is turned off. // MFnSingleIndexedComponent compFn( component ); compFn.getElements( fSelEdges ); // Ensure that this DAG path will point to the shape of our object. // Set the DAG path for the polyModifierCmd. // dagPath.extendToShape(); setMeshNode( dagPath ); found = true; } else { // Break once we have found a multiple object holding selected UVs, since // we are not interested in how many multiple objects there are, only // the fact that there are multiple objects. // foundMultiple = true; break; } } } if( foundMultiple ) { displayWarning("Found more than one object with selected Edges - Only operating on first found object."); } if( !found ) { displayError( "tm_polySlot command failed: Unable to find selected edges" ); return MStatus::kFailure; } // Initialize the polyModifierCmd node type - mesh node already set // setModifierNodeType( tm_polySlotNode::id ); //################################################################## alwaysWithConstructionHistory = true; status = doModifyPoly(); if( !status){displayError( "tm_polySlot command failed!" );return status;} //################################################################## get polymodifier node name and select it getModifierNodeName(); newSelList.add( modifierNodeName); MGlobal::setActiveSelectionList( newSelList);//, MGlobal::kAddToList); //################################################################## successResult(); return MStatus::kSuccess; }
// Loads the old save by constructing a new save containing the old save's data bool SaveConverter_v3::load() { clear(); uint32 varSize = SaveHandler::getVarSize(_vm); if (varSize == 0) return false; Common::InSaveFile *save; int type = isOldSave(&save); // Test if it's an old savd if ((type == 0) || !save) return false; displayWarning(); bool screenShot; uint32 screenShotWidth; uint32 screenShotHeight; getScreenShotProps(type, screenShot, screenShotWidth, screenShotHeight); SaveWriter writer(screenShot ? 3 : 2, 0); SavePartInfo *info = readInfo(*save, kSlotNameLength, false); if (!info) return loadFail(0, 0, 0, save); SavePartVars *vars = readVars(*save, varSize, true); if (!vars) return loadFail(info, 0, 0, save); if (screenShot) { SavePartSprite *sprite = readSprite(*save, screenShotWidth, screenShotHeight, true); if (!sprite) return loadFail(info, vars, 0, save); if (!writer.writePart(2, sprite)) return loadFail(info, vars, sprite, save); delete sprite; } // We don't need the save anymore delete save; // Write all parts if (!writer.writePart(0, info)) return loadFail(info, vars, 0, 0); if (!writer.writePart(1, vars)) return loadFail(info, vars, 0, 0); // We don't need those anymore delete info; delete vars; // Create the final read stream if (!createStream(writer)) return loadFail(0, 0, 0, 0); return true; }
MStatus tm_polySplit::doIt( const MArgList& args) { #ifdef _DEBUG cout << endl << "####################################################" << endl; cout << "tm_polySplit::doIt - DEBUG version info:" << endl; #endif MStatus status; MGlobal::getActiveSelectionList( oldSelList ); MArgDatabase argData( syntax(), args); //parse flags // if(argData.isFlagSet( loop_Flag)) { cmd_flag_loop = true; argData.getFlagArgument( loop_Flag, 0, cmd_flag_loop_mode); argData.getFlagArgument( loop_Flag, 1, cmd_flag_loop_angle); // argData.getFlagArgument( loop_Flag, 2, cmd_flag_loop_maxcount); // - max count; } else if(argData.isFlagSet( sel_Flag)) { cmd_flag_loop = false; cmd_flag_sel = true; } MSelectionList selectionList; argData.getObjects( selectionList); MItSelectionList selListIter( selectionList ); selListIter.setFilter( MFn::kMesh ); // The tm_polySplit node only accepts a component list input, so we build // a component list using MFnComponentListData. // // MIntArrays could also be passed into the node to represent the edgesIds, // but are less storage efficient than component lists, since consecutive // components are bundled into a single entry in component lists. // MFnComponentListData compListFn; compListFn.create(); bool found = false; bool foundMultiple = false; MObject meshObj; for( ; !selListIter.isDone(); selListIter.next() ) { MDagPath dagPath; MObject component; selListIter.getDagPath( dagPath, component ); meshObj = dagPath.node(); // Check for selected Edges components // if( component.apiType() == MFn::kMeshEdgeComponent ) { if( !found ) { // The variable 'component' holds all selected components on the selected // object, thus only a single call to MFnComponentListData::add() is needed // to store the selected components for a given object. // compListFn.add( component ); // Copy the component list created by MFnComponentListData into our local // component list MObject member. // fComponentList = compListFn.object(); // Locally store the actual edgesIds of the selected Edges so that this command // can directly modify the mesh in the case when there is no history and // history is turned off. // MFnSingleIndexedComponent compFn( component ); compFn.getElements( fSelEdges ); // Ensure that this DAG path will point to the shape of our object. // Set the DAG path for the polyModifierCmd. // dagPath.extendToShape(); setMeshNode( dagPath ); found = true; } else { // Break once we have found a multiple object holding selected UVs, since // we are not interested in how many multiple objects there are, only // the fact that there are multiple objects. // foundMultiple = true; break; } } } #ifdef _DEBUG cout << endl << "########################## checking arguments:" << endl; cout << endl << "fSelEdges = ";for(unsigned i=0;i<fSelEdges.length();i++) cout << fSelEdges[i] << " ";cout << endl; #endif if( foundMultiple ) { displayWarning("Found more than one object with selected Edges - Only operating on first found object."); } if( !found ) { displayError( "tm_polySplit command failed: Unable to find selected edges" ); return MStatus::kFailure; } // Initialize the polyModifierCmd node type - mesh node already set // setModifierNodeType( tm_polySplitNode::id ); //################################################################## alwaysWithConstructionHistory = true; status = doModifyPoly(); if( !status){displayError( "tm_polySplit command failed!" );return status;} //################################################################## get polymodifier node name and select it getModifierNodeName(); newSelList.add( modifierNodeName); MGlobal::setActiveSelectionList( newSelList);//, MGlobal::kAddToList); //################################################################## setResult( modifierNodeName); return MStatus::kSuccess; /* cout<<endl<<"**********"<<endl;return MStatus::kSuccess; */ }
MStatus CVstAimCmd::redoIt() { MStatus mStatus; if ( !mStatus ) { setResult( MString( "Cannot parse command line" ) + mStatus.errorString() ); return MS::kFailure; } if ( m_mArgDatabase->isFlagSet( kHelp ) ) { PrintHelp(); } else { // See if there are two object specified MDagPath mDagPath; MSelectionList optSelectionList; // Validate specified items to whole dag nodes { MSelectionList tmpSelectionList; m_mArgDatabase->getObjects( tmpSelectionList ); for ( MItSelectionList sIt( tmpSelectionList, MFn::kDagNode ); !sIt.isDone(); sIt.next() ) { if ( sIt.getDagPath( mDagPath ) ) { optSelectionList.add( mDagPath, MObject::kNullObj, true ); } } } if ( m_mArgDatabase->isFlagSet( "create" ) || optSelectionList.length() >= 2 && m_mArgDatabase->numberOfFlagsUsed() == 0 ) { // Error if there aren't at least two if ( optSelectionList.length() < 2 ) { displayError( GetName() + " needs at least two objects specified or selected when -create is used" ); return MS::kFailure; } // Get name command line arg MString optName; if ( m_mArgDatabase->isFlagSet( "name" ) ) { m_mArgDatabase->getFlagArgument( "name", 0, optName ); } m_undoable = true; m_mDagModifier = new MDagModifier; MObject vstAimObj( m_mDagModifier->MDGModifier::createNode( GetName() ) ); if ( m_mDagModifier->doIt() != MS::kSuccess ) { displayError( MString( "Couldn't create " ) + GetName() + " node" ); m_mDagModifier->undoIt(); delete m_mDagModifier; m_mDagModifier = NULL; m_undoable = false; return MS::kFailure; } m_mDagModifier->renameNode( vstAimObj, optName.length() ? optName : GetName() ); if ( m_mDagModifier->doIt() != MS::kSuccess ) { if ( optName.length() ) { displayWarning( MString( "Couldn't rename newly created vstNode \"" ) + optName + "\"" ); } } // Set options on the newly create vstAim node MFnDependencyNode vstAimFn( vstAimObj ); MPlug sP; MPlug dP; if ( m_mArgDatabase->isFlagSet( kAim ) ) { MVector aim; m_mArgDatabase->getFlagArgument( kAim, 0, aim.x ); m_mArgDatabase->getFlagArgument( kAim, 1, aim.y ); m_mArgDatabase->getFlagArgument( kAim, 2, aim.z ); sP = vstAimFn.findPlug( "aimX" ); sP.setValue( aim.x ); sP = vstAimFn.findPlug( "aimY" ); sP.setValue( aim.y ); sP = vstAimFn.findPlug( "aimZ" ); sP.setValue( aim.z ); } if ( m_mArgDatabase->isFlagSet( kUp ) ) { MVector up; m_mArgDatabase->getFlagArgument( kUp, 0, up.x ); m_mArgDatabase->getFlagArgument( kUp, 1, up.y ); m_mArgDatabase->getFlagArgument( kUp, 2, up.z ); sP = vstAimFn.findPlug( "upX" ); sP.setValue( up.x ); sP = vstAimFn.findPlug( "upY" ); sP.setValue( up.y ); sP = vstAimFn.findPlug( "upZ" ); sP.setValue( up.z ); } // Now connect up the newly created vstAim node MDagPath toAim; optSelectionList.getDagPath( 1, toAim ); const MFnDagNode toAimFn( toAim ); if ( toAim.hasFn( MFn::kJoint ) ) { MPlug joP( toAimFn.findPlug( "jointOrient" ) ); if ( !joP.isNull() ) { MAngle jox, joy, joz; joP.child( 0 ).getValue( jox ); joP.child( 1 ).getValue( joy ); joP.child( 2 ).getValue( joz ); if ( abs( jox.value() ) > FLT_EPSILON || abs( joy.value() ) > FLT_EPSILON || abs( joz.value() ) > FLT_EPSILON ) { mwarn << "Joint orient on node being constrained is non-zero ( " << jox.asDegrees() << " " << joy.asDegrees() << " " << joz.asDegrees() << " ), setting to 0" << std::endl; joP.child( 0 ).setValue( MAngle( 0.0 ) ); joP.child( 1 ).setValue( MAngle( 0.0 ) ); joP.child( 2 ).setValue( MAngle( 0.0 ) ); } } } if ( toAim.hasFn( MFn::kTransform ) ) { MPlug mP( toAimFn.findPlug( "rotateAxis" ) ); if ( !mP.isNull() ) { MAngle rx, ry, rz; mP.child( 0 ).getValue( rx ); mP.child( 1 ).getValue( ry ); mP.child( 2 ).getValue( rz ); if ( abs( rx.value() ) > FLT_EPSILON || abs( ry.value() ) > FLT_EPSILON || abs( rz.value() ) > FLT_EPSILON ) { mwarn << "Rotate Axis on node being constrained is non-zero ( " << rx.asDegrees() << " " << ry.asDegrees() << " " << rz.asDegrees() << " ), setting to 0" << std::endl; mP.child( 0 ).setValue( MAngle( 0.0 ) ); mP.child( 1 ).setValue( MAngle( 0.0 ) ); mP.child( 2 ).setValue( MAngle( 0.0 ) ); } } } MDagPath aimAt; optSelectionList.getDagPath( 0, aimAt ); const MFnDagNode aimAtFn( aimAt ); // toAim.rotateOrder -> vstAim.rotateOrder sP = toAimFn.findPlug( "rotateOrder" ); dP = vstAimFn.findPlug( "rotateOrder" ); m_mDagModifier->connect( sP, dP ); // toAim.translate -> vstAim.translate sP = toAimFn.findPlug( "translate" ); dP = vstAimFn.findPlug( "translate" ); m_mDagModifier->connect( sP, dP ); // toAim.parentMatrix[ instance ] -> vstAim.parentSpace sP = toAimFn.findPlug( "parentMatrix" ); sP = sP.elementByLogicalIndex( toAim.instanceNumber() ); dP = vstAimFn.findPlug( "parentSpace" ); m_mDagModifier->connect( sP, dP ); // aimAt.worldMatrix[ instance ] -> vstAim.aimSpace sP = aimAtFn.findPlug( "worldMatrix" ); sP = sP.elementByLogicalIndex( aimAt.instanceNumber() ); dP = vstAimFn.findPlug( "aimSpace" ); m_mDagModifier->connect( sP, dP ); // vstAim.rotation -> toAim.rotation // These have to be connected individually because Maya plays stupid tricks // with rotateOrder if they aren't sP = vstAimFn.findPlug( "rotateX" ); dP = toAimFn.findPlug( "rotateX" ); m_mDagModifier->connect( sP, dP ); sP = vstAimFn.findPlug( "rotateY" ); dP = toAimFn.findPlug( "rotateY" ); m_mDagModifier->connect( sP, dP ); sP = vstAimFn.findPlug( "rotateZ" ); dP = toAimFn.findPlug( "rotateZ" ); m_mDagModifier->connect( sP, dP ); if ( m_mDagModifier->doIt() != MS::kSuccess ) { displayWarning( MString( GetName() ) + ": Couldn't connect everything when creating" ); } // Save the current selection just in case we want to undo stuff MGlobal::getActiveSelectionList( m_mSelectionList ); MGlobal::select( vstAimObj, MGlobal::kReplaceList ); setResult( vstAimFn.name() ); } else if ( m_mArgDatabase->isFlagSet( "select" ) ) { MSelectionList mSelectionList; MDagPath mDagPath; for ( MItDag dagIt; !dagIt.isDone(); dagIt.next() ) { if ( MFnDependencyNode( dagIt.item() ).typeName() == GetName() ) { dagIt.getPath( mDagPath ); mSelectionList.add( mDagPath, MObject::kNullObj, true ); } } if ( mSelectionList.length() ) { m_undoable = true; // Save the current selection just in case we want to undo stuff MGlobal::getActiveSelectionList( m_mSelectionList ); MGlobal::setActiveSelectionList( mSelectionList, MGlobal::kReplaceList ); } } else { displayError( GetName() + ": No valid operation specified via command line arguments\n" ); } } return MS::kSuccess; }
MStatus meshOp::doIt( const MArgList& argList ) // // Description: // implements the MEL meshOp command. // // Arguments: // argList - the argument list that was passes to the command from MEL // // Return Value: // MS::kSuccess - command succeeded // MS::kFailure - command failed (returning this value will cause the // MEL script that is being run to terminate unless the // error is caught using a "catch" statement. // { MStatus status; bool badArgument = false; // Only one parameter is expected to be passed to this command: the mesh // operation type. Get it, validate it or stop prematurely // if (argList.length() == 1) { int operationTypeArgument = argList.asInt(0); if (operationTypeArgument < 0 || operationTypeArgument > kMeshOperationCount - 1) { badArgument = true; } else { fOperation = (MeshOperation)operationTypeArgument; } } else badArgument = true; if (badArgument) { cerr << "Expecting one parameter: the operation type." << endl; cerr << "Valid types are: " << endl; cerr << " 0 - Subdivide edge(s)." << endl; cerr << " 1 - Subdivide face(s)." << endl; cerr << " 2 - Extrude edge(s)." << endl; cerr << " 3 - Extrude face(s)." << endl; cerr << " 4 - Collapse edge(s)." << endl; cerr << " 5 - Collapse face(s)." << endl; cerr << " 6 - Duplicate face(s)." << endl; cerr << " 7 - Extract face(s)." << endl; cerr << " 8 - Split face(s)." << endl; cerr << " 8 - Chamfer vertex(s)." << endl; displayError(" Expecting one parameter: the operation type."); return MS::kFailure; } // Each mesh operation only supports one type of components // MFn::Type componentType = meshOpFty::getExpectedComponentType(fOperation); // Parse the selection list for selected components of the right type. // To simplify things, we only take the first object that we find with // selected components and operate on that object alone. // // All other objects are ignored and return warning messages indicating // this limitation. // MSelectionList selList; MGlobal::getActiveSelectionList( selList ); MItSelectionList selListIter( selList ); selListIter.setFilter( MFn::kMesh ); // The meshOperation node only accepts a component list input, so we build // a component list using MFnComponentListData. // // MIntArrays could also be passed into the node to represent the ids, // but are less storage efficient than component lists, since consecutive // components are bundled into a single entry in component lists. // MFnComponentListData compListFn; compListFn.create(); bool found = false; bool foundMultiple = false; for( ; !selListIter.isDone(); selListIter.next() ) { MDagPath dagPath; MObject component; selListIter.getDagPath( dagPath, component ); // Check for selected components of the right type // if( component.apiType() == componentType ) { if( !found ) { // The variable 'component' holds all selected components // on the selected object, thus only a single call to // MFnComponentListData::add() is needed to store the selected // components for a given object. // compListFn.add( component ); // Copy the component list created by MFnComponentListData // into our local component list MObject member. // fComponentList = compListFn.object(); // Locally store the actual ids of the selected components so // that this command can directly modify the mesh in the case // when there is no history and history is turned off. // MFnSingleIndexedComponent compFn( component ); // Ensure that this DAG path will point to the shape // of our object. Set the DAG path for the polyModifierCmd. // dagPath.extendToShape(); setMeshNode( dagPath ); found = true; } else { // Break once we have found a multiple object holding // selected components, since we are not interested in how // many multiple objects there are, only the fact that there // are multiple objects. // foundMultiple = true; break; } } } if( foundMultiple ) { displayWarning("Found more than one object with selected components."); displayWarning("Only operating on first found object."); } // Initialize the polyModifierCmd node type - mesh node already set // setModifierNodeType( meshOpNode::id ); if( found ) { // Now, pass control over to the polyModifierCmd::doModifyPoly() method // to handle the operation. // status = doModifyPoly(); if( status == MS::kSuccess ) { setResult( "meshOp command succeeded!" ); } else { displayError( "meshOp command failed!" ); } } else { displayError( "meshOp command failed: Unable to find selected components" ); status = MS::kFailure; } return status; }
MStatus boingRbCmd::redoIt() { if (argParser->isFlagSet("help") || argParser->isFlagSet("h")) { MString helpMsg = "boingRB - command : Boing - bullet plugin by Risto Puukko\n"; helpMsg += "---------------------------------------------------------\n"; helpMsg += "boingRB [flag] [args] \n"; helpMsg += "\n"; helpMsg += "flags :\n"; helpMsg += " -getAttr [name.attr]\n"; helpMsg += " example : boingRb -getAttr (\"boingRb1.velocity\");\n" ; helpMsg += "\n"; helpMsg += " -getAttr [*.attr]\n"; helpMsg += " example : boingRb -getAttr (\"*.name\");\n" ; helpMsg += "\n"; helpMsg += " -setAttr [name.attr] -value [float float float ]\n"; helpMsg += " example : boingRb -setAttr (\"boingRb1.velocity\") -value 0 4 3 ;\n" ; helpMsg += "\n"; helpMsg += " -addAttr [name.attr] -type [int/double/string/vector]\n"; helpMsg += " example : boingRb -addAttr \"sampleRb.IntAttribute\" -type \"int\";\n" ; helpMsg += " example : boingRb -addAttr \"sampleRb.VectorAttribute\" -type \"vector\";\n" ; helpMsg += "\n"; helpMsg += " -create [ ( \"name=string;geo=string;velocity/vel=float,float,float;position/pos=float,float,float\" )]\n"; helpMsg += " example : boingRb -create (\"name=sampleRb;geo=pCubeShape1;pos=0,4,0\");\n"; helpMsg += "\n"; helpMsg += " -exists [name]\n"; helpMsg += " example : boingRb -exists \"sampleRb\";\n" ; helpMsg += "\n"; helpMsg += " -delete [name]\n"; helpMsg += " example : boingRb -delete \"sampleRb\";\n"; helpMsg += "\n"; helpMsg += "---------------------------------------------------------\n"; MGlobal::displayInfo(helpMsg); return MS::kSuccess; } isSetAttr = argParser->isFlagSet("-setAttr"); isGetAttr = argParser->isFlagSet("-getAttr"); isAddAttr = argParser->isFlagSet("-addAttr"); isType = argParser->isFlagSet("-type"); isExists = argParser->isFlagSet("-exists"); isAttributeExist = argParser->isFlagSet("-attributeExist"); isCreate = argParser->isFlagSet("-create"); isDelete = argParser->isFlagSet("-delete"); isValue = argParser->isFlagSet("-value"); //std::cout<<"argsList : "<<*argsList<<std::endl; //unsigned i; //MStatus stat; //MVector res; // Parse the arguments. /* for (i = 0; i <argsList->length (); i++) { //MString arg = argsList->asString(i, &stat); //if (MS::kSuccess == stat) std::cout<<"arg["<<i<<"] : "<<arg<<std::endl; if ( MString ("-setAttr") == argsList->asString(i, &stat) && MString ("-value") == argsList->asString(i+2, &stat) && MS::kSuccess == stat ) { for (unsigned j=3; j!=6; ++j) res[j-3 ] = argsList->asDouble (j, &stat); } } std::cout<<"res : "<<res<<std::endl; */ if (isSetAttr && isValue) { MString sAttr; argParser->getFlagArgument("setAttr", 0, sAttr); //std::cout<<sAttr<<std::endl; MStringArray jobArgsArray = parseArguments(sAttr, "."); MString rbName = jobArgsArray[0]; MString attr = checkAttribute(jobArgsArray[1]); //std::cout<<"attr : "<<attr<<std::endl; if ( attr == "custom" ) { MString customAttr = jobArgsArray[1]; //char * custAttr = (char*)customAttr.asChar(); //std::cout<<"customAttr : "<<customAttr<<std::endl; shared_ptr<bSolverNode> b_solv = bSolverNode::get_bsolver_node(); bSolverNode::m_custom_data *data = b_solv->getdata(rbName); //std::cout<<"data : "<<data<<std::endl; if (!data) return MS::kFailure; //std::cout<<"data->m_int_data : "<<data->m_int_data<<std::endl; MString type = b_solv->getAttrType(data, customAttr); //std::cout<<"attrype : "<<type<<std::endl; if (type == "string") { //std::cout<<"saving custom string : "<<customAttr<<std::endl; MString value; value = argsList->asString(3); data->m_string_data.append(value); b_solv->set_custom_data_string(data, customAttr, value); //data->m_attr_type.append(customAttr); //char * chars = (char *)value.asChar(); //void * char_ptr = (void *)chars; //b_solv->set_custom_data(customAttr, char_ptr); } else if (type == "double") { //std::cout<<"saving custom double : "<<customAttr<<std::endl; double value; value = argsList->asDouble(3); data->m_double_data.append(value); b_solv->set_custom_data_double(data, customAttr, value); //data->m_attr_type.append(customAttr); //void *val = &value; //b_solv->set_custom_data(customAttr, val); } else if (type == "int") { //std::cout<<"saving custom int : "<<customAttr<<std::endl; int value; value = argsList->asInt(3); //std::cout<<"argsList->get(3, value) -> value : "<<value<<std::endl; data->m_int_data.append(value); b_solv->set_custom_data_int(data, customAttr, value); //data->m_attr_type.append(customAttr); //std::cout<<"data->m_int_data : "<<data->m_int_data<<std::endl; //void *val = &value; //b_solv->set_custom_data(customAttr, val); //std::cout<<"b_solv->set_custom_data,static_cast<void*>(&value)) DONE!!!"<<std::endl; } else if (type == "vector") { //std::cout<<"saving custom vector : "<<customAttr<<std::endl; MVector value = MVector(); value.x = argsList->asDouble(3); value.y = argsList->asDouble(4); value.z = argsList->asDouble(5); data->m_vector_data.append(value); b_solv->set_custom_data_vector(data, customAttr, value); //data->m_attr_type.append(customAttr); //MVector *MVecPtr = &value; //void * vec_ptr = static_cast<void*const>(MVecPtr); //b_solv->set_custom_data(customAttr, vec_ptr); } } else { if (attr == "velocity" || attr == "position" || attr == "angularVelocity") { MVector value; value.x = argsList->asDouble(3); value.y = argsList->asDouble(4); value.z = argsList->asDouble(5); //std::cout<<"vector argument : "<<value<<std::endl; setBulletVectorAttribute(rbName, attr, value); } } //cout<<value<<endl; setResult(MS::kSuccess); } else if ( isAttributeExist ) { MString exAttr; bool result = false; argParser->getFlagArgument("attributeExist", 0, exAttr); //std::cout<<"exAttr : "<<exAttr<<std::endl; MStringArray jobArgsArray = parseArguments(exAttr, "."); MString rbname = jobArgsArray[0]; //std::cout<<"rbname : "<<rbname<<std::endl; MString attrToQuery = jobArgsArray[1]; //std::cout<<"attrToQuery : "<<attrToQuery<<std::endl; MString attr = checkAttribute(attrToQuery); //std::cout<<"attr : "<<attr<<std::endl; if ( attr == "custom" ){ // here we check if user attribute by the name attrToQuery exists shared_ptr<bSolverNode> b_solv = bSolverNode::get_bsolver_node(); //char * queryAttr = (char*)attrToQuery.asChar(); MString attrResult = b_solv->getAttrType(b_solv->getdata(rbname), attrToQuery); if (attrResult != "") //if (b_solv->attribute_exists(attrToQuery)) result = true; //std::cout<<result<<std::endl;; setResult(result); } } else if ( isAddAttr && isType ) { MString aAttr; argParser->getFlagArgument("addAttr", 0, aAttr); //std::cout<<"aAttr : "<<aAttr<<std::endl; MStringArray jobArgsArray = parseArguments(aAttr, "."); //std::cout<<"jobArgsArray : "<<jobArgsArray<<std::endl; MString rbname = jobArgsArray[0]; MString attrAdded = jobArgsArray[1]; //char *added = (char *)attrAdded.asChar(); MString attrType; argParser->getFlagArgument("-type", 0, attrType); //char *type = (char *)attrType.asChar(); //std::cout<<"attrType : "<<attrType<<std::endl; shared_ptr<bSolverNode> b_solv = bSolverNode::get_bsolver_node(); bSolverNode::m_custom_data *data = b_solv->getdata(rbname); data->m_attr_name.append(attrAdded); data->m_attr_type.append(attrType); b_solv->saveAttrType(data, attrAdded, attrType); //std::cout<<"attr "<<aAttr<<" added"<<std::endl; //std::cout<<"data->m_attr_type : "<<data->m_attr_type<<std::endl; //std::cout<<"data->m_attr_name : "<<data->m_attr_name<<std::endl; } else if ( isGetAttr) { MString gAttr; shared_ptr<bSolverNode> b_solv = bSolverNode::get_bsolver_node(); argParser->getFlagArgument("getAttr", 0, gAttr); //std::cout<<gAttr<<std::endl; MStringArray jobArgsArray = parseArguments(gAttr, "."); MString rbname = jobArgsArray[0]; //std::cout<<"name : "<<rbname<<std::endl; if ( rbname == "" ) { MString errorMsg = "ERROR ! boing -getAttr must provide a rigid body name!"; displayWarning(errorMsg, true); return MS::kFailure; } MString attr = checkAttribute(jobArgsArray[1]); //std::cout<<"attr = "<<attr<<std::endl; if ( attr=="velocity" || attr=="position" || attr=="angularVelocity" ) { //MVector result = MDoubleArray dResult = getBulletVectorAttribute(rbname, attr); setResult(dResult); } else if (attr == "contactPositions") { bSolverNode::m_custom_data *data = b_solv->getdata(rbname); MDoubleArray d_points = MDoubleArray(); if ( data->m_contact_count > 0 ) { MPointArray points = data->m_contact_positions; for (int i=0; i<points.length();i++) { d_points.append(points[i].x); d_points.append(points[i].y); d_points.append(points[i].z); } } setResult(d_points); } else if (attr == "contactGeos") { MStringArray contact_objects = MStringArray(); bSolverNode::m_custom_data *data = b_solv->getdata(rbname); if ( data->m_contact_count > 0 ) { MStringArray contact_objects = data->m_contact_objects; } setResult(contact_objects); } else if (attr == "contactCount") { bSolverNode::m_custom_data *data = b_solv->getdata(rbname); int contact_count = data->m_contact_count; setResult(contact_count); } else if (attr == "name") { MStringArray result; MStringArray names = b_solv->get_all_keys(); //std::cout<<"names : "<<names<<std::endl; //std::cout<<"b_solv->getdatalength() : "<<b_solv->getdatalength()<<std::endl; for(int i=0; i < names.length(); i++) { bSolverNode::m_custom_data *data = b_solv->getdata(names[i]); if ( NULL != data) { //std::cout<<"data->name : "<<data->name<<std::endl; //std::cout<<"data->m_initial_position: "<<data->m_initial_position<<std::endl; result.append(data->name); } } setResult(result); } else if ( attr == "" ) { MString errorMsg = "ERROR ! boing -getAttr must provide an attribute name to query!"; displayWarning(errorMsg, true); return MS::kFailure; } else if ( attr == "custom" ){ // here we handle user attributes MString customAttr = jobArgsArray[1]; //char * custAttr = (char*)customAttr.asChar(); //std::cout<<"customAttr : "<<customAttr<<std::endl; MString type = b_solv->getAttrType(b_solv->getdata(rbname), customAttr); //bSolverNode::m_custom_data *data = b_solv->getdata(rbname); std::cout<<" type : "<<type<<std::endl; if (type == "string") { //char * result = static_cast<char*>(b_solv->get_custom_data(customAttr)); MString result = b_solv->get_custom_data_string(b_solv->getdata(rbname), customAttr); if (result != NULL) { //std::cout<<"result : "<<result<<std::endl; MString value(result); setResult(value); } else { displayError(MString("Error getting b_solv->get_custom_data_string(\"" + customAttr + "\")")); } } else if (type == "double") { //double *value = static_cast<double*>(b_solv->get_custom_data(customAttr)); double value = b_solv->get_custom_data_double(b_solv->getdata(rbname), customAttr); setResult(value); } else if (type == "int") { //int *value = static_cast<int*>(b_solv->get_custom_data(customAttr)); int value = b_solv->get_custom_data_int(b_solv->getdata(rbname), customAttr); setResult(value); } else if (type == "vector") { //void * result = b_solv->get_custom_data(customAttr); //MVector *vec_res = (MVector*)result; MVector result = b_solv->get_custom_data_vector(b_solv->getdata(rbname), customAttr); MDoubleArray value; value.append(result.x); value.append(result.y); value.append(result.z); setResult(value); } } } else if ( isCreate ) { MString aArgument; argParser->getFlagArgument("-create", 0, aArgument); MStringArray createArgs = parseArguments(aArgument,";"); int size = createArgs.length(); MString inputShape; MString rbname = "dummyRb"; MVector av; MVector vel; MVector pos; MVector rot; for (int i=0; i!=size; ++i) { MStringArray singleArg = parseArguments(createArgs[i],"="); //std::cout<<"singleArg : "<<singleArg<<std::endl; if (singleArg[0] == "name") { rbname = singleArg[1]; } else if (singleArg[0] == "geo") { //geo inputShape = singleArg[1]; //std::cout<<"geo = "<<inputShape<<std::endl; } else if (singleArg[0] == "vel") { //initialvelocity MStringArray velArray = parseArguments(singleArg[1], ","); vel = MVector(velArray[0].asDouble(), velArray[1].asDouble(), velArray[2].asDouble() ); //std::cout<<"velocity = "<<vel<<std::endl; } else if (singleArg[0] == "pos") { //initialposition MStringArray posArray = parseArguments(singleArg[1], ","); pos = MVector(posArray[0].asDouble(), posArray[1].asDouble(), posArray[2].asDouble() ); //std::cout<<"position = "<<pos<<std::endl; } else if (singleArg[0] == "rot") { //initialrotation MStringArray rotArray = parseArguments(singleArg[1], ","); rot = MVector(rotArray[0].asDouble(), rotArray[1].asDouble(), rotArray[2].asDouble() ); //std::cout<<"rotation = "<<rot<<std::endl; } else if (singleArg[0] == "av") { //initialAngularVelocity MStringArray avArray = parseArguments(singleArg[1], ","); av = MVector(avArray[0].asDouble(), avArray[1].asDouble(), avArray[2].asDouble() ); //std::cout<<"initialAngularVelocity = "<<av<<std::endl; } else { std::cout<<"Unrecognized parameter : "<<singleArg[0]<<std::endl; } } // create boing node shared_ptr<bSolverNode> b_solv = bSolverNode::get_bsolver_node(); MObject node = nameToNode(inputShape); float mass = 1.0f; MString tname = "boing"; MStatus stat = b_solv->createNode(node, rbname, tname, pos, vel, rot, av, mass); if (MS::kSuccess == stat) { setResult(rbname); } else { MGlobal::displayError(MString("Something went wrong when trying to create rigidbody : " + rbname + " .")); } } else if ( isDelete ) { MString aArgument; argParser->getFlagArgument("-delete", 0, aArgument); //std::cout<<"delete aArgument "<<aArgument<<std::endl; if (aArgument != "") { shared_ptr<bSolverNode> b_solv = bSolverNode::get_bsolver_node(); b_solv->deletedata(aArgument); MStatus stat = b_solv->delete_key(aArgument, -1); if (stat != MS::kSuccess) { std::cerr<<"error occurred deleting "<<aArgument<<" ."<<std::endl; setResult(1); } } } else if ( isExists ) { MString exArg; argParser->getFlagArgument("-exists", 0, exArg); //std::cout<<"exArg : "<<exArg<<std::endl; if (exArg != "") { shared_ptr<bSolverNode> b_solv = bSolverNode::get_bsolver_node(); bSolverNode::m_custom_data *data = b_solv->getdata(exArg); int result = false; if ( NULL != data ) { //setResult ( data->name ); result = true; } setResult(result); } } return MS::kSuccess; }
void Dialog::newMessage( af::Msg *msg) { if( msg == NULL) { AF_ERR << "msg == NULL"; return; } #ifdef AFOUTPUT printf(" >>> Dialog::newMessage: ");msg->v_stdOut(); #endif switch( msg->type()) { case af::Msg::TVersionMismatch: { emit stop(); break; } case af::Msg::TMonitor: { af::Monitor monitor( msg); idReceived( monitor.getId(), monitor.getUid()); break; } case af::Msg::TMonitorId: { idReceived( msg->int32()); break; } case af::Msg::TInfo: { std::string kind, info; if( msg->getInfo( kind, info)) { QString qinfo = afqt::stoq( info); if( kind == "info") displayInfo( qinfo); else if( kind == "warning") displayWarning( qinfo); else if( kind == "error") displayError( qinfo); } break; } case af::Msg::TDATA: { new WndText( "Data", msg); break; } case af::Msg::TStringList: { new WndText( "List", msg); break; } case af::Msg::TString: { std::string str = msg->getString(); if( LabelVersion::getStringStatus( str) != LabelVersion::SS_None ) announce( str); else new WndText("Message", msg); break; } case af::Msg::TTaskFiles: { af::MCTaskUp taskup( msg); Watch::filesReceived( taskup); break; } case af::Msg::TJSON: case af::Msg::TJSONBIN: case af::Msg::THTTP: case af::Msg::THTTPGET: { static int unused; unused = ::write( 1, " >>> ", 5); msg->stdOutData( false); unused = ::write( 1, "\n", 1); break; } default: Watch::caseMessage( msg); } delete msg; }