Panda3D
Loading...
Searching...
No Matches
mayaSavePview.cxx
Go to the documentation of this file.
1/**
2 * PANDA 3D SOFTWARE
3 * Copyright (c) Carnegie Mellon University. All rights reserved.
4 *
5 * All use of this software is subject to the terms of the revised BSD
6 * license. You should have received a copy of this license along
7 * with this source code in a file named "LICENSE."
8 *
9 * @file mayaSavePview.cxx
10 * @author drose
11 * @date 2003-10-27
12 */
13
14#include "mayaSavePview.h"
15
16#include <maya/MString.h>
17#include <maya/MFnPlugin.h>
18#include <maya/MFileIO.h>
19#include <maya/MArgParser.h>
20#include <maya/MArgList.h>
21#include <maya/MSyntax.h>
22
23#include <stdlib.h>
24
25#ifdef WIN32_VC
26#include <process.h>
27#endif
28
29/**
30 *
31 */
32MayaSavePview::
33MayaSavePview() {
34}
35
36/**
37 * Called when the plugin command is invoked.
38 */
40doIt(const MArgList &args) {
41 MStatus result;
42
43 // First, parse the plugin arguments.
44 MSyntax syntax;
45 syntax.addFlag("a", "animate");
46
47 MArgParser parser(syntax, args, &result);
48 if (!result) {
49 result.perror("arguments");
50 return result;
51 }
52
53 bool animate = parser.isFlagSet("a", &result);
54 if (!result) {
55 result.perror("isFlagSet");
56 return result;
57 }
58
59 // Now make sure the current buffer is saved.
60 result = MFileIO::save(false);
61 if (result != MS::kSuccess) {
62 return result;
63 }
64
65 MString filename = MFileIO::currentFile();
66
67 MString pview_args = "-cl";
68 if (animate) {
69 pview_args = "-cla";
70 }
71
72#ifdef WIN32_VC
73 // On Windows, we use the spawn function to run pview asynchronously.
74 MString quoted = MString("\"") + filename + MString("\"");
75 intptr_t retval = _spawnlp(_P_DETACH, "pview",
76 "pview", pview_args.asChar(), quoted.asChar(), nullptr);
77 if (retval == -1) {
78 return MS::kFailure;
79 }
80
81#else // WIN32_VC
82 // On non-Windows (e.g. Unix), we just use the system function, which runs
83 // synchronously. We could fork a process, but no one's asked for this yet.
84 MString command = MString("pview " + pview_args + MString(" \"") + filename + MString("\""));
85
86 int command_result = system(command.asChar());
87 if (command_result != 0) {
88 return MS::kFailure;
89 }
90#endif // WIN32_VC
91
92 return MS::kSuccess;
93}
94
95/**
96 * This is used to create a new instance of the plugin.
97 */
99creator() {
100 return new MayaSavePview;
101}
102
103
104
105/**
106 * Called by Maya when the plugin is loaded.
107 */
108EXPCL_MISC MStatus
109initializePlugin(MObject obj) {
110 MFnPlugin plugin(obj, "VR Studio", "1.0");
111 MStatus status;
112 status = plugin.registerCommand("pview", MayaSavePview::creator);
113 if (!status) {
114 status.perror("registerCommand");
115 }
116
117 return status;
118}
119
120/**
121 * Called by Maya when the plugin is unloaded.
122 */
123EXPCL_MISC MStatus
124uninitializePlugin(MObject obj) {
125 MFnPlugin plugin(obj);
126 MStatus status;
127 status = plugin.deregisterCommand("pview");
128
129 if (!status) {
130 status.perror("deregisterCommand");
131 }
132 return status;
133}
This class serves as a plug-in to Maya to save the scene and view it using the external pview program...
virtual MStatus doIt(const MArgList &args)
Called when the plugin command is invoked.
static void * creator()
This is used to create a new instance of the plugin.
MStatus initializePlugin(MObject obj)
Called by Maya when the plugin is loaded.
MStatus uninitializePlugin(MObject obj)
Called by Maya when the plugin is unloaded.
PANDA 3D SOFTWARE Copyright (c) Carnegie Mellon University.