mirror of
https://github.com/panda3d/panda3d.git
synced 2025-10-03 02:15:43 -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::
|
||||||
MayaApi(const string &program_name) {
|
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
|
// Beginning with Maya4.5, the call to initialize seems to change
|
||||||
// the current directory! Yikes!
|
// the current directory! Yikes!
|
||||||
|
|
||||||
@ -100,7 +114,7 @@ operator = (const MayaApi ©) {
|
|||||||
MayaApi::
|
MayaApi::
|
||||||
~MayaApi() {
|
~MayaApi() {
|
||||||
nassertv(_global_api == this);
|
nassertv(_global_api == this);
|
||||||
if (_is_valid) {
|
if (_is_valid && !_plug_in) {
|
||||||
// Caution! Calling this function seems to call exit() somewhere
|
// Caution! Calling this function seems to call exit() somewhere
|
||||||
// within Maya code.
|
// within Maya code.
|
||||||
MLibrary::cleanup();
|
MLibrary::cleanup();
|
||||||
@ -119,7 +133,10 @@ MayaApi::
|
|||||||
// If program_name is supplied, it is passed to Maya as
|
// If program_name is supplied, it is passed to Maya as
|
||||||
// the name of the currently-executing program.
|
// the name of the currently-executing program.
|
||||||
// Otherwise, the current program name is extracted from
|
// 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::
|
PT(MayaApi) MayaApi::
|
||||||
open_api(string program_name) {
|
open_api(string program_name) {
|
||||||
|
@ -55,6 +55,7 @@ public:
|
|||||||
|
|
||||||
private:
|
private:
|
||||||
bool _is_valid;
|
bool _is_valid;
|
||||||
|
bool _plug_in;
|
||||||
static MayaApi *_global_api;
|
static MayaApi *_global_api;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -81,10 +81,9 @@
|
|||||||
|
|
||||||
#define UNIX_SYS_LIBS \
|
#define UNIX_SYS_LIBS \
|
||||||
m
|
m
|
||||||
|
#define BUILDING_DLL BUILDING_MISC
|
||||||
|
|
||||||
#if $[WINDOWS_PLATFORM]
|
#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
|
// On Windows, Maya expects its plugins to be named with a .mll
|
||||||
// extension, but it's a perfectly normal dll otherwise. This
|
// extension, but it's a perfectly normal dll otherwise. This
|
||||||
// ppremake hack achieves that filename.
|
// ppremake hack achieves that filename.
|
||||||
@ -92,7 +91,7 @@
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
#define SOURCES \
|
#define SOURCES \
|
||||||
mayaPview.cxx
|
mayaPview.cxx mayaPview.h
|
||||||
|
|
||||||
#end lib_target
|
#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 "pre_maya_include.h"
|
||||||
#include <maya/MSimple.h>
|
#include <maya/MString.h>
|
||||||
|
#include <maya/MFnPlugin.h>
|
||||||
#include "post_maya_include.h"
|
#include "post_maya_include.h"
|
||||||
|
|
||||||
static PandaFramework framework;
|
////////////////////////////////////////////////////////////////////
|
||||||
static bool opened_framework = false;
|
// Function: MayaPview::Constructor
|
||||||
|
// Access: Public
|
||||||
// This Maya macro sets up a class that meets the plug-in requirements
|
// Description:
|
||||||
// for a simple command.
|
////////////////////////////////////////////////////////////////////
|
||||||
DeclareSimpleCommand(MayaPview, "VR Studio", "1.0");
|
MayaPview::
|
||||||
|
MayaPview() {
|
||||||
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////
|
||||||
|
// Function: MayaPview::doIt
|
||||||
|
// Access: Public, Virtual
|
||||||
|
// Description: Called when the plugin command is invoked.
|
||||||
|
////////////////////////////////////////////////////////////////////
|
||||||
MStatus MayaPview::
|
MStatus MayaPview::
|
||||||
doIt(const MArgList &) {
|
doIt(const MArgList &) {
|
||||||
if (!opened_framework) {
|
int argc = 0;
|
||||||
int argc = 0;
|
char **argv = NULL;
|
||||||
char **argv = NULL;
|
PandaFramework framework;
|
||||||
framework.open_framework(argc, argv);
|
framework.open_framework(argc, argv);
|
||||||
framework.set_window_title("Panda Viewer");
|
framework.set_window_title("Panda Viewer");
|
||||||
framework.enable_default_keys();
|
framework.enable_default_keys();
|
||||||
}
|
|
||||||
|
|
||||||
WindowFramework *window = framework.open_window();
|
PT(WindowFramework) window;
|
||||||
|
window = framework.open_window();
|
||||||
if (window == (WindowFramework *)NULL) {
|
if (window == (WindowFramework *)NULL) {
|
||||||
// Couldn't open a window.
|
// Couldn't open a window.
|
||||||
nout << "Couldn't open a window!\n";
|
nout << "Couldn't open a window!\n";
|
||||||
@ -50,11 +65,96 @@ doIt(const MArgList &) {
|
|||||||
|
|
||||||
window->enable_keyboard();
|
window->enable_keyboard();
|
||||||
window->setup_trackball();
|
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();
|
window->loop_animations();
|
||||||
|
|
||||||
framework.clear_exit_flag();
|
|
||||||
framework.main_loop();
|
framework.main_loop();
|
||||||
return MS::kSuccess;
|
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