Commit d719eea2 authored by whitlocb's avatar whitlocb

Added user-defined Python callbacks to CLI.


git-svn-id: http://visit.ilight.com/svn/visit/trunk/src@3158 18c085ea-50e0-402c-830e-de6fd14e8384
parent a1c6bf70
......@@ -42,6 +42,10 @@
# Cyrus Harrison, Mon Dec 17 16:20:01 PST 2007
# Added PyVariant.C and PyMapNode.C
#
# Brad Whitlock, Tue Feb 5 15:37:58 PST 2008
# Added CallbackHandlers, CallbackManager, ViewerRPCArguments,
# ViewerRPCCallbacks.
#
##############################################################################
##
......@@ -63,8 +67,12 @@ COMMON_SRC=\
../common/PyText3DObject.C \
../common/PyTimeSliderObject.C \
../common/PyVariant.C \
../common/CallbackHandlers.C \
../common/CallbackManager.C \
../common/Logging.C \
../common/MethodDoc.C \
../common/ViewerRPCArguments.C \
../common/ViewerRPCCallbacks.C \
../common/visitmodule.C
SRC=$(COMMON_SRC) \
......
This diff is collapsed.
/*****************************************************************************
*
* Copyright (c) 2000 - 2008, Lawrence Livermore National Security, LLC
* Produced at the Lawrence Livermore National Laboratory
* LLNL-CODE-400142
* All rights reserved.
*
* This file is part of VisIt. For details, see https://visit.llnl.gov/. The
* full copyright notice is contained in the file COPYRIGHT located at the root
* of the VisIt distribution or at http://www.llnl.gov/visit/copyright.html.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* - Redistributions of source code must retain the above copyright notice,
* this list of conditions and the disclaimer below.
* - Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the disclaimer (as noted below) in the
* documentation and/or other materials provided with the distribution.
* - Neither the name of the LLNS/LLNL nor the names of its contributors may
* be used to endorse or promote products derived from this software without
* specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL LAWRENCE LIVERMORE NATIONAL SECURITY,
* LLC, THE U.S. DEPARTMENT OF ENERGY OR CONTRIBUTORS BE LIABLE FOR ANY
* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
* DAMAGE.
*
*****************************************************************************/
#ifndef CALLBACK_HANDLERS_H
#define CALLBACK_HANDLERS_H
#include <CallbackManager.h>
#include <ViewerState.h>
#include <ViewerRPCCallbacks.h>
//
// This function registers callback handlers for the supported state objects.
//
void RegisterCallbackHandlers(CallbackManager *cb, ViewerState *vs, ViewerRPCCallbacks *rpcCB);
#endif
This diff is collapsed.
/*****************************************************************************
*
* Copyright (c) 2000 - 2008, Lawrence Livermore National Security, LLC
* Produced at the Lawrence Livermore National Laboratory
* LLNL-CODE-400142
* All rights reserved.
*
* This file is part of VisIt. For details, see https://visit.llnl.gov/. The
* full copyright notice is contained in the file COPYRIGHT located at the root
* of the VisIt distribution or at http://www.llnl.gov/visit/copyright.html.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* - Redistributions of source code must retain the above copyright notice,
* this list of conditions and the disclaimer below.
* - Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the disclaimer (as noted below) in the
* documentation and/or other materials provided with the distribution.
* - Neither the name of the LLNS/LLNL nor the names of its contributors may
* be used to endorse or promote products derived from this software without
* specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL LAWRENCE LIVERMORE NATIONAL SECURITY,
* LLC, THE U.S. DEPARTMENT OF ENERGY OR CONTRIBUTORS BE LIABLE FOR ANY
* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
* DAMAGE.
*
*****************************************************************************/
#ifndef CALLBACK_MANAGER_H
#define CALLBACK_MANAGER_H
#include <map>
#include <vector>
#include <string>
#include <deque>
#include <vectortypes.h>
#include <SimpleObserver.h>
#include <ObserverToCallback.h>
#include <Python.h>
class AttributeSubject;
class Threading;
typedef bool (AddWorkCallback)(Subject *, void *data);
// ****************************************************************************
// Class: CallbackManager
//
// Purpose:
// This class manages a queue of callback requests caused by state objects
// updating. The callback requests are executed on another thread and their
// state objects are wrapped in our Python bindings and then dispatched to
// user-specified Python functions.
//
// Notes: Init done on thread 1. Callback requests added on thread 2.
// Callbacks actually executed on thread 3.
//
// Programmer: Brad Whitlock
// Creation: Fri Feb 1 16:18:28 PST 2008
//
// Modifications:
//
// ****************************************************************************
class CallbackManager : public SimpleObserver
{
struct CallbackData
{
std::string name;
ObserverCallback *handler;
void *handler_data;
AddWorkCallback *addwork;
void *addwork_data;
PyObject *pycb;
};
struct WorkItem
{
// The subject in ViewerState for whom we do the callback.
AttributeSubject *key;
// An instance of the subject that has the actual object contents that
// we had at the time the callback was received.
AttributeSubject *data;
};
typedef std::map<std::string, Subject *> StringSubjectMap;
typedef std::map<Subject *, CallbackData> SubjectCallbackDataMap;
public:
struct CallbackHandlerData
{
// The Python object that will handle the callback
PyObject *pycb;
// An instance of the subject that has the actual object contents that
// we had at the time the callback was received.
AttributeSubject *data;
// User-defined data.
void *userdata;
};
CallbackManager();
~CallbackManager();
virtual void SubjectRemoved(Subject *);
virtual void Update(Subject *);
void RegisterHandler(Subject *, const std::string &,
ObserverCallback *handler, void *handler_data,
AddWorkCallback *addwork, void *addwork_data);
bool RegisterCallback(const std::string &, PyObject *);
void GetCallbackNames(stringVector &names) const;
PyObject *GetCallback(Subject *) const;
void WorkAllowed();
void Work();
private:
bool RegisterCallback(Subject *, PyObject *);
void StartWork();
StringSubjectMap nameToSubject;
SubjectCallbackDataMap callbacks;
std::deque<WorkItem> work;
bool working;
bool workAllowed;
Threading *threading;
};
#endif
......@@ -2394,6 +2394,32 @@ const char *visit_GetAnnotationObject_doc =
"ref = GetAnnotationObject(0)\n"
"print ref\n"
;
const char *visit_GetCallbackNames_doc =
"GetCallbackNames\n"
"-Returns a list of allowable callback names for use with RegisterCallback().\n"
"\n"
"\n"
"Synopsis:\n"
"\n"
"GetCallbackNames() --> tuple of string objects\n"
"\n"
"\n"
"Returns:\n"
"\n"
"GetCallbackNames returns a tuple containing the names of valid callback function identifiers for use in RegisterCallback().\n"
"\n"
"\n"
"Description:\n"
"\n"
"The GetCallbackNames function returns a tuple containing the names of valid \n"
"callback function identifiers for use in RegisterCallback().\n"
"\n"
"\n"
"Example:\n"
"\n"
"import visit\n"
"print GetCallbackNames()\n"
;
const char *visit_GetDatabaseNStates_doc =
"GetDatabaseNStates\n"
"-Returns the number of time states in the active database.\n"
......@@ -4954,6 +4980,43 @@ const char *visit_RedrawWindow_doc =
"# prevent 1 redraw.\n"
"RedrawWindow()\n"
;
const char *visit_RegisterCallback_doc =
"RegisterCallback\n"
"-Register a user-defined callback function that gets called when a state object changes or when an rpc is called.\n"
"\n"
"\n"
"Synopsis:\n"
"\n"
"RegisterCallback(callbackname, callback) --> integer\n"
"\n"
"\n"
"Arguments:\n"
"\n"
"callbackname\n"
"A string object designating the callback that we're installing. Allowable values are returned by the GetCallbackNames() function.\n"
"\n"
"callback\n"
"A Python function, typically with one argument by which VisIt passes the object that caused the callback to be called.\n"
"\n"
"Returns:\n"
"\n"
"RegisterCallback returns 1 on success.\n"
"\n"
"\n"
"Description:\n"
"\n"
"The RegisterCallback function is used to associate a user-defined callback\n"
"function with the updating of a state object or execution of a particular\n"
"rpc\n"
"\n"
"\n"
"Example:\n"
"\n"
"import visit\n"
"def print_sliceatts(atts):\n"
" print \"SLICEATTS=\", atts\n"
"visit.RegisterCallback(\"SliceAttributes\", print_sliceatts)\n"
;
const char *visit_RemoveOperator_doc =
"RemoveOperator\n"
"-Removes operators from plots.\n"
......
......@@ -88,6 +88,7 @@ extern const char *visit_GetAnimationTimeout_doc;
extern const char *visit_GetAnimationNumStates_doc;
extern const char *visit_GetAnnotationAttributes_doc;
extern const char *visit_GetAnnotationObject_doc;
extern const char *visit_GetCallbackNames_doc;
extern const char *visit_GetDatabaseNStates_doc;
extern const char *visit_GetDefaultFileOpenOptions_doc;
extern const char *visit_GetDomains_doc;
......@@ -151,6 +152,7 @@ extern const char *visit_QueryOverTime_doc;
extern const char *visit_RecenterView_doc;
extern const char *visit_RedoView_doc;
extern const char *visit_RedrawWindow_doc;
extern const char *visit_RegisterCallback_doc;
extern const char *visit_RemoveOperator_doc;
extern const char *visit_ReOpenDatabase_doc;
extern const char *visit_ReplaceDatabase_doc;
......
This diff is collapsed.
/*****************************************************************************
*
* Copyright (c) 2000 - 2008, Lawrence Livermore National Security, LLC
* Produced at the Lawrence Livermore National Laboratory
* LLNL-CODE-400142
* All rights reserved.
*
* This file is part of VisIt. For details, see https://visit.llnl.gov/. The
* full copyright notice is contained in the file COPYRIGHT located at the root
* of the VisIt distribution or at http://www.llnl.gov/visit/copyright.html.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* - Redistributions of source code must retain the above copyright notice,
* this list of conditions and the disclaimer below.
* - Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the disclaimer (as noted below) in the
* documentation and/or other materials provided with the distribution.
* - Neither the name of the LLNS/LLNL nor the names of its contributors may
* be used to endorse or promote products derived from this software without
* specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL LAWRENCE LIVERMORE NATIONAL SECURITY,
* LLC, THE U.S. DEPARTMENT OF ENERGY OR CONTRIBUTORS BE LIABLE FOR ANY
* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
* DAMAGE.
*
*****************************************************************************/
#include <ViewerRPCCallbacks.h>
// ****************************************************************************
// Method: ViewerRPCCallbacks::ViewerRPCCallbacks
//
// Purpose:
// Constructor for the ViewerRPCCallbacks class.
//
// Programmer: Brad Whitlock
// Creation: Tue Feb 5 11:46:12 PST 2008
//
// Modifications:
//
// ****************************************************************************
ViewerRPCCallbacks::ViewerRPCCallbacks()
{
for(int r = 0; r < (int)ViewerRPC::MaxRPC; ++r)
pycb[r] = 0;
}
// ****************************************************************************
// Method: ViewerRPCCallbacks::~ViewerRPCCallbacks
//
// Purpose:
// Destructor for the ViewerRPCCallbacks class.
//
// Programmer: Brad Whitlock
// Creation: Tue Feb 5 11:46:12 PST 2008
//
// Modifications:
//
// ****************************************************************************
ViewerRPCCallbacks::~ViewerRPCCallbacks()
{
for(int r = 0; r < (int)ViewerRPC::MaxRPC; ++r)
{
if(pycb[r] != 0)
Py_DECREF(pycb[r]);
}
}
// ****************************************************************************
// Method: ViewerRPCCallbacks::GetCallbackNames
//
// Purpose:
// Get the callback names.
//
// Arguments:
// names : The return vector for the callback names.
//
// Programmer: Brad Whitlock
// Creation: Tue Feb 5 11:46:40 PST 2008
//
// Modifications:
//
// ****************************************************************************
void
ViewerRPCCallbacks::GetCallbackNames(stringVector &names)
{
for(int r = 0; r < (int)ViewerRPC::MaxRPC; ++r)
names.push_back(ViewerRPC::ViewerRPCType_ToString((ViewerRPC::ViewerRPCType)r));
}
// ****************************************************************************
// Method: ViewerRPCCallbacks::RegisterCallback
//
// Purpose:
// Registers a callback for a specific viewerrpc (by name).
//
// Arguments:
// rpcName : The name of the ViewerRPC for which we're installing a callback.
// cb : The user-provided callback.
//
// Returns: True on success; False on failure.
//
// Note:
//
// Programmer: Brad Whitlock
// Creation: Tue Feb 5 11:47:52 PST 2008
//
// Modifications:
//
// ****************************************************************************
bool
ViewerRPCCallbacks::RegisterCallback(const std::string &rpcName, PyObject *cb)
{
bool retval = false;
ViewerRPC::ViewerRPCType r;
if(ViewerRPC::ViewerRPCType_FromString(rpcName, r))
{
if(pycb[r] != 0)
Py_DECREF(pycb[r]);
pycb[r] = cb;
Py_INCREF(pycb[r]);
retval = true;
}
return retval;
}
// ****************************************************************************
// Method: ViewerRPCCallbacks::GetCallback
//
// Purpose:
// Returns the user-defined callback for the specified rpc.
//
// Arguments:
// r : The rpc whose callback we want to access.
//
// Returns:
//
// Note:
//
// Programmer: Brad Whitlock
// Creation: Tue Feb 5 11:48:55 PST 2008
//
// Modifications:
//
// ****************************************************************************
PyObject *
ViewerRPCCallbacks::GetCallback(ViewerRPC::ViewerRPCType r)
{
return pycb[r];
}
/*****************************************************************************
*
* Copyright (c) 2000 - 2008, Lawrence Livermore National Security, LLC
* Produced at the Lawrence Livermore National Laboratory
* LLNL-CODE-400142
* All rights reserved.
*
* This file is part of VisIt. For details, see https://visit.llnl.gov/. The
* full copyright notice is contained in the file COPYRIGHT located at the root
* of the VisIt distribution or at http://www.llnl.gov/visit/copyright.html.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* - Redistributions of source code must retain the above copyright notice,
* this list of conditions and the disclaimer below.
* - Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the disclaimer (as noted below) in the
* documentation and/or other materials provided with the distribution.
* - Neither the name of the LLNS/LLNL nor the names of its contributors may
* be used to endorse or promote products derived from this software without
* specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL LAWRENCE LIVERMORE NATIONAL SECURITY,
* LLC, THE U.S. DEPARTMENT OF ENERGY OR CONTRIBUTORS BE LIABLE FOR ANY
* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
* DAMAGE.
*
*****************************************************************************/
#ifndef VIEWERRPC_CALLBACKS_H
#define VIEWERRPC_CALLBACKS_H
#include <ViewerRPC.h>
#include <Python.h>
// ****************************************************************************
// Class: ViewerRPCCallbacks
//
// Purpose:
// Keeps track of user-defined callbacks for specific ViewerRPC values.
//
// Notes:
//
// Programmer: Brad Whitlock
// Creation: Mon Feb 4 09:21:44 PST 2008
//
// Modifications:
//
// ****************************************************************************
class ViewerRPCCallbacks
{
public:
ViewerRPCCallbacks();
~ViewerRPCCallbacks();
void GetCallbackNames(stringVector &names);
bool RegisterCallback(const std::string &, PyObject *);
PyObject *GetCallback(ViewerRPC::ViewerRPCType);
private:
PyObject *pycb[ViewerRPC::MaxRPC];
};
#endif
This diff is collapsed.
#ifndef VISIT_MODULE_HELPERS_H
#define VISIT_MODULE_HELPERS_H
#include <ViewerProxy.h>
#include <Python.h>
//
// Visible Prototypes.
......@@ -10,4 +11,8 @@ ViewerProxy *GetViewerProxy();
ViewerState *GetViewerState();
ViewerMethods *GetViewerMethods();
// Functions from visitmodule.C that lock and release the Python interpreter.
PyThreadState *VisItLockPythonInterpreter();
void VisItUnlockPythonInterpreter(PyThreadState *);
#endif
......@@ -36,6 +36,9 @@
# Jeremy Meredith, Wed Jan 23 15:33:13 EST 2008
# Added PyFileOpenOptions.
#
# Brad Whitlock, Mon Feb 4 13:27:18 PST 2008
# Added PyViewerRPC.
#
# Jeremy Meredith, Mon Feb 4 10:05:44 EST 2008
# Added PyViewAxisArrayAttributes.
#
......@@ -109,6 +112,7 @@ WRAPPER_SRC= \
PyViewAttributes.C \
PyViewAxisArrayAttributes.C \
PyViewCurveAttributes.C \
PyViewerRPC.C \
PyWindowInformation.C
SRC=$(METADATA_SRC)\
......
This diff is collapsed.
/*****************************************************************************
*
* Copyright (c) 2000 - 2008, Lawrence Livermore National Security, LLC
* Produced at the Lawrence Livermore National Laboratory
* LLNL-CODE-400142
* All rights reserved.
*
* This file is part of VisIt. For details, see https://visit.llnl.gov/. The
* full copyright notice is contained in the file COPYRIGHT located at the root
* of the VisIt distribution or at http://www.llnl.gov/visit/copyright.html.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* - Redistributions of source code must retain the above copyright notice,
* this list of conditions and the disclaimer below.
* - Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the disclaimer (as noted below) in the
* documentation and/or other materials provided with the distribution.
* - Neither the name of the LLNS/LLNL nor the names of its contributors may
* be used to endorse or promote products derived from this software without
* specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL LAWRENCE LIVERMORE NATIONAL SECURITY,
* LLC, THE U.S. DEPARTMENT OF ENERGY OR CONTRIBUTORS BE LIABLE FOR ANY
* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
* DAMAGE.
*
*****************************************************************************/
#ifndef PY_VIEWERRPC_H
#define PY_VIEWERRPC_H
#include <Python.h>
#include <ViewerRPC.h>
#include <visitpy_exports.h>
//
// Functions exposed to the VisIt module.
//
void VISITPY_API PyViewerRPC_StartUp(ViewerRPC *subj, void *data);
void VISITPY_API PyViewerRPC_CloseDown();
VISITPY_API PyMethodDef * PyViewerRPC_GetMethodTable(int *nMethods);
bool VISITPY_API PyViewerRPC_Check(PyObject *obj);
VISITPY_API ViewerRPC * PyViewerRPC_FromPyObject(PyObject *obj);
VISITPY_API PyObject * PyViewerRPC_New();
VISITPY_API PyObject * PyViewerRPC_Wrap(const ViewerRPC *attr);
void VISITPY_API PyViewerRPC_SetParent(PyObject *obj, PyObject *parent);
void VISITPY_API PyViewerRPC_SetDefaults(const ViewerRPC *atts);
std::string VISITPY_API PyViewerRPC_GetLogString();
std::string VISITPY_API PyViewerRPC_ToString(const ViewerRPC *, const char *);
#endif
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment