mirror of
https://github.com/panda3d/panda3d.git
synced 2025-10-02 18:03:56 -04:00
getting closer with mayapview
This commit is contained in:
parent
a18ed01a3e
commit
499e4e239a
@ -41,6 +41,20 @@ MayaApi *MayaApi::_global_api = (MayaApi *)NULL;
|
||||
////////////////////////////////////////////////////////////////////
|
||||
MayaApi::
|
||||
MayaApi(const string &program_name) {
|
||||
if (program_name == "plug-in") {
|
||||
// In this special case, we are invoking the code from within a
|
||||
// plug-in, so we need not (and should not) call
|
||||
// MLibrary::initialize().
|
||||
_plug_in = true;
|
||||
_is_valid = true;
|
||||
return;
|
||||
}
|
||||
|
||||
// Otherwise, if program_name is any other name, we are invoking the
|
||||
// code from a standalone application and we do need to call
|
||||
// MLibrary::initialize().
|
||||
_plug_in = false;
|
||||
|
||||
// Beginning with Maya4.5, the call to initialize seems to change
|
||||
// the current directory! Yikes!
|
||||
|
||||
@ -100,7 +114,7 @@ operator = (const MayaApi ©) {
|
||||
MayaApi::
|
||||
~MayaApi() {
|
||||
nassertv(_global_api == this);
|
||||
if (_is_valid) {
|
||||
if (_is_valid && !_plug_in) {
|
||||
// Caution! Calling this function seems to call exit() somewhere
|
||||
// within Maya code.
|
||||
MLibrary::cleanup();
|
||||
@ -119,7 +133,10 @@ MayaApi::
|
||||
// If program_name is supplied, it is passed to Maya as
|
||||
// the name of the currently-executing program.
|
||||
// Otherwise, the current program name is extracted from
|
||||
// the execution environment, if possible.
|
||||
// the execution environment, if possible. The special
|
||||
// program_name "plug-in" is used for code that is
|
||||
// intended to be invoked as a plug-in only; in this
|
||||
// case, the maya library is not re-initialized.
|
||||
////////////////////////////////////////////////////////////////////
|
||||
PT(MayaApi) MayaApi::
|
||||
open_api(string program_name) {
|
||||
|
@ -55,6 +55,7 @@ public:
|
||||
|
||||
private:
|
||||
bool _is_valid;
|
||||
bool _plug_in;
|
||||
static MayaApi *_global_api;
|
||||
};
|
||||
|
||||
|
@ -81,10 +81,9 @@
|
||||
|
||||
#define UNIX_SYS_LIBS \
|
||||
m
|
||||
#define BUILDING_DLL BUILDING_MISC
|
||||
|
||||
#if $[WINDOWS_PLATFORM]
|
||||
// Explicitly export the maya initialize and shutdown functions.
|
||||
#define LINKER_FLAGS $[LINKER_FLAGS] /export:initializePlugin /export:uninitializePlugin
|
||||
// On Windows, Maya expects its plugins to be named with a .mll
|
||||
// extension, but it's a perfectly normal dll otherwise. This
|
||||
// ppremake hack achieves that filename.
|
||||
@ -92,7 +91,7 @@
|
||||
#endif
|
||||
|
||||
#define SOURCES \
|
||||
mayaPview.cxx
|
||||
mayaPview.cxx mayaPview.h
|
||||
|
||||
#end lib_target
|
||||
|
@ -16,30 +16,45 @@
|
||||
//
|
||||
////////////////////////////////////////////////////////////////////
|
||||
|
||||
#include "pandaFramework.h"
|
||||
#include "mayaPview.h"
|
||||
#include "mayaToEggConverter.h"
|
||||
#include "eggData.h"
|
||||
#include "load_egg_file.h"
|
||||
|
||||
// We must define this to prevent Maya from doubly-declaring its
|
||||
// MApiVersion string in this file as well as in libmayaegg.
|
||||
#define _MApiVersion
|
||||
|
||||
#include "pre_maya_include.h"
|
||||
#include <maya/MSimple.h>
|
||||
#include <maya/MString.h>
|
||||
#include <maya/MFnPlugin.h>
|
||||
#include "post_maya_include.h"
|
||||
|
||||
static PandaFramework framework;
|
||||
static bool opened_framework = false;
|
||||
|
||||
// This Maya macro sets up a class that meets the plug-in requirements
|
||||
// for a simple command.
|
||||
DeclareSimpleCommand(MayaPview, "VR Studio", "1.0");
|
||||
////////////////////////////////////////////////////////////////////
|
||||
// Function: MayaPview::Constructor
|
||||
// Access: Public
|
||||
// Description:
|
||||
////////////////////////////////////////////////////////////////////
|
||||
MayaPview::
|
||||
MayaPview() {
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////
|
||||
// Function: MayaPview::doIt
|
||||
// Access: Public, Virtual
|
||||
// Description: Called when the plugin command is invoked.
|
||||
////////////////////////////////////////////////////////////////////
|
||||
MStatus MayaPview::
|
||||
doIt(const MArgList &) {
|
||||
if (!opened_framework) {
|
||||
int argc = 0;
|
||||
char **argv = NULL;
|
||||
framework.open_framework(argc, argv);
|
||||
framework.set_window_title("Panda Viewer");
|
||||
framework.enable_default_keys();
|
||||
}
|
||||
int argc = 0;
|
||||
char **argv = NULL;
|
||||
PandaFramework framework;
|
||||
framework.open_framework(argc, argv);
|
||||
framework.set_window_title("Panda Viewer");
|
||||
framework.enable_default_keys();
|
||||
|
||||
WindowFramework *window = framework.open_window();
|
||||
PT(WindowFramework) window;
|
||||
window = framework.open_window();
|
||||
if (window == (WindowFramework *)NULL) {
|
||||
// Couldn't open a window.
|
||||
nout << "Couldn't open a window!\n";
|
||||
@ -50,11 +65,96 @@ doIt(const MArgList &) {
|
||||
|
||||
window->enable_keyboard();
|
||||
window->setup_trackball();
|
||||
framework.get_models().instance_to(window->get_render());
|
||||
|
||||
if (!convert(framework.get_models())) {
|
||||
return MS::kFailure;
|
||||
}
|
||||
|
||||
window->load_default_model(framework.get_models());
|
||||
window->loop_animations();
|
||||
|
||||
framework.clear_exit_flag();
|
||||
framework.main_loop();
|
||||
return MS::kSuccess;
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////
|
||||
// Function: MayaPview::creator
|
||||
// Access: Public, Static
|
||||
// Description: This is used to create a new instance of the plugin.
|
||||
////////////////////////////////////////////////////////////////////
|
||||
void *MayaPview::
|
||||
creator() {
|
||||
return new MayaPview;
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////
|
||||
// Function: MayaPview::convert
|
||||
// Access: Private
|
||||
// Description: Actually converts the Maya selection to Panda
|
||||
// geometry, and parents it to the indicated NodePath.
|
||||
////////////////////////////////////////////////////////////////////
|
||||
bool MayaPview::
|
||||
convert(const NodePath &parent) {
|
||||
// Now make a converter to get all the Maya structures.
|
||||
MayaToEggConverter converter("plug-in");
|
||||
|
||||
// We always want polygon output since we want to be able to see the
|
||||
// results.
|
||||
converter._polygon_output = true;
|
||||
|
||||
EggData egg_data;
|
||||
converter.set_egg_data(&egg_data, false);
|
||||
|
||||
if (!converter.convert_maya()) {
|
||||
nout << "Errors in conversion.\n";
|
||||
return false;
|
||||
}
|
||||
|
||||
// Now the converter has filled up our egg structure with data, so
|
||||
// convert this egg data to Panda data for immediate viewing.
|
||||
egg_data.set_coordinate_system(CS_default);
|
||||
PT(PandaNode) result = load_egg_data(egg_data);
|
||||
|
||||
if (result == (PandaNode *)NULL) {
|
||||
nout << "Unable to load converted egg data.\n";
|
||||
return false;
|
||||
}
|
||||
|
||||
parent.attach_new_node(result);
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
////////////////////////////////////////////////////////////////////
|
||||
// Function: initializePlugin
|
||||
// Description: Called by Maya when the plugin is loaded.
|
||||
////////////////////////////////////////////////////////////////////
|
||||
EXPCL_MISC MStatus
|
||||
initializePlugin(MObject obj) {
|
||||
MFnPlugin plugin(obj, "VR Studio", "1.0");
|
||||
MStatus status;
|
||||
status = plugin.registerCommand("pview", MayaPview::creator);
|
||||
if (!status) {
|
||||
status.perror("registerCommand");
|
||||
}
|
||||
|
||||
return status;
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////
|
||||
// Function: uninitializePlugin
|
||||
// Description: Called by Maya when the plugin is unloaded.
|
||||
////////////////////////////////////////////////////////////////////
|
||||
EXPCL_MISC MStatus
|
||||
uninitializePlugin(MObject obj) {
|
||||
MFnPlugin plugin(obj);
|
||||
MStatus status;
|
||||
status = plugin.deregisterCommand("pview");
|
||||
|
||||
if (!status) {
|
||||
status.perror("deregisterCommand");
|
||||
}
|
||||
return status;
|
||||
}
|
||||
|
52
pandatool/src/mayaprogs/mayaPview.h
Executable file
52
pandatool/src/mayaprogs/mayaPview.h
Executable file
@ -0,0 +1,52 @@
|
||||
// Filename: mayaPview.h
|
||||
// Created by: drose (11Mar03)
|
||||
//
|
||||
////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// PANDA 3D SOFTWARE
|
||||
// Copyright (c) 2001, Disney Enterprises, Inc. All rights reserved
|
||||
//
|
||||
// All use of this software is subject to the terms of the Panda 3d
|
||||
// Software license. You should have received a copy of this license
|
||||
// along with this source code; you will also find a current copy of
|
||||
// the license at http://www.panda3d.org/license.txt .
|
||||
//
|
||||
// To contact the maintainers of this program write to
|
||||
// panda3d@yahoogroups.com .
|
||||
//
|
||||
////////////////////////////////////////////////////////////////////
|
||||
|
||||
#ifndef MAYAPVIEW_H
|
||||
#define MAYAPVIEW_H
|
||||
|
||||
#include "pandatoolbase.h"
|
||||
#include "pandaFramework.h"
|
||||
|
||||
#include "pre_maya_include.h"
|
||||
#include <maya/MArgList.h>
|
||||
#include <maya/MPxCommand.h>
|
||||
#include <maya/MObject.h>
|
||||
#include "post_maya_include.h"
|
||||
|
||||
////////////////////////////////////////////////////////////////////
|
||||
// Class : MayaPview
|
||||
// Description : This class serves as a plug-in to Maya to allow
|
||||
// viewing the current Maya selection as it will be
|
||||
// converted to Panda.
|
||||
////////////////////////////////////////////////////////////////////
|
||||
class MayaPview : public MPxCommand {
|
||||
public:
|
||||
MayaPview();
|
||||
virtual MStatus doIt(const MArgList &);
|
||||
|
||||
static void *creator();
|
||||
|
||||
private:
|
||||
bool convert(const NodePath &parent);
|
||||
};
|
||||
|
||||
EXPCL_MISC MStatus initializePlugin(MObject obj);
|
||||
EXPCL_MISC MStatus uninitializePlugin(MObject obj);
|
||||
|
||||
|
||||
#endif
|
Loading…
x
Reference in New Issue
Block a user