00001 
00002 
00003 
00004 
00005 
00006 #include <boost/filesystem/path.hpp>
00007 #include <boost/filesystem/operations.hpp>
00008 #include <boost/filesystem/exception.hpp>
00009 #include <Base/PyObjectBase.h>
00010 #include <Base/Console.h>
00011 #include <Base/Exception.h>
00012 #include <CXX/Objects.hxx>
00013 
00014 #define new DEBUG_CLIENTBLOCK
00015 
00016 using Base::streq;
00017 using namespace Gui;
00018 
00020 PyTypeObject ViewProviderPy::Type = {
00021     PyObject_HEAD_INIT(&PyType_Type)
00022     0,                                                
00023     "Gui.ViewProvider",     
00024     sizeof(ViewProviderPy),                       
00025     0,                                                
00026     
00027     PyDestructor,                                     
00028     0,                                                
00029     __getattr,                                        
00030     __setattr,                                        
00031     0,                                                
00032     __repr,                                           
00033     0,                                                
00034     0,                                                
00035     0,                                                
00036     0,                                                
00037     0,                                                
00038     0,                                                
00039     0,                                                
00040     0,                                                
00041     
00042     0,                                                
00043     
00044     Py_TPFLAGS_BASETYPE|Py_TPFLAGS_HAVE_CLASS,        
00045     "This is the ViewProvider base class",           
00046     0,                                                
00047     0,                                                
00048     0,                                                
00049     0,                                                
00050     0,                                                
00051     0,                                                
00052     Gui::ViewProviderPy::Methods,                     
00053     0,                                                
00054     Gui::ViewProviderPy::GetterSetter,                     
00055     &App::PropertyContainerPy::Type,                        
00056     0,                                                
00057     0,                                                
00058     0,                                                
00059     0,                                                
00060     __PyInit,                                         
00061     0,                                                
00062     Gui::ViewProviderPy::PyMake,
00063     0,                                                
00064     0,                                                
00065     0,                                                
00066     0,                                                
00067     0,                                                
00068     0,                                                
00069     0,                                                
00070     0                                                 
00071 };
00072 
00074 PyMethodDef ViewProviderPy::Methods[] = {
00075     {"show",
00076         (PyCFunction) staticCallback_show,
00077         METH_VARARGS,
00078         "Show the object"
00079     },
00080     {"hide",
00081         (PyCFunction) staticCallback_hide,
00082         METH_VARARGS,
00083         "Hide the object"
00084     },
00085     {"isVisible",
00086         (PyCFunction) staticCallback_isVisible,
00087         METH_VARARGS,
00088         "Check if the object is visible"
00089     },
00090     {"listDisplayModes",
00091         (PyCFunction) staticCallback_listDisplayModes,
00092         METH_VARARGS,
00093         "Show a list of all display modes"
00094     },
00095     {"toString",
00096         (PyCFunction) staticCallback_toString,
00097         METH_VARARGS,
00098         "Return a string representation of the Inventor node"
00099     },
00100     {"startEditing",
00101         (PyCFunction) staticCallback_startEditing,
00102         METH_VARARGS,
00103         "Start the editing mode (default=0)"
00104     },
00105     {"finishEditing",
00106         (PyCFunction) staticCallback_finishEditing,
00107         METH_VARARGS,
00108         "Finish editing mode"
00109     },
00110     {"isEditing",
00111         (PyCFunction) staticCallback_isEditing,
00112         METH_VARARGS,
00113         "Returns True if the view provider is in editing mode, False otherwise"
00114     },
00115     {"setTransformation",
00116         (PyCFunction) staticCallback_setTransformation,
00117         METH_VARARGS,
00118         "Set a transformation on the Inventor node"
00119     },
00120     {NULL, NULL, 0, NULL}               
00121 };
00122 
00123 
00124 
00126 PyGetSetDef ViewProviderPy::GetterSetter[] = {
00127     {"Annotation",
00128         (getter) staticCallback_getAnnotation,
00129         (setter) staticCallback_setAnnotation, 
00130         "A pivy Separator to add a custom scene graph to this ViewProvider",
00131         NULL
00132     },
00133     {"RootNode",
00134         (getter) staticCallback_getRootNode,
00135         (setter) staticCallback_setRootNode, 
00136         "A pivy Separator with the root of this ViewProvider",
00137         NULL
00138     },
00139     {"IV",
00140         (getter) staticCallback_getIV,
00141         (setter) staticCallback_setIV, 
00142         "Represents the whole ViewProvider as an Inventor string.",
00143         NULL
00144     },
00145     {NULL, NULL, NULL, NULL, NULL}              
00146 };
00147 
00148 
00149 
00150 
00151 PyObject * ViewProviderPy::staticCallback_show (PyObject *self, PyObject *args)
00152 {
00153     
00154     if (!((PyObjectBase*) self)->isValid()){
00155         PyErr_SetString(PyExc_ReferenceError, "This object is already deleted most likely through closing a document. This reference is no longer valid!");
00156         return NULL;
00157     }
00158 
00159     
00160     if (((PyObjectBase*) self)->isConst()){
00161         PyErr_SetString(PyExc_ReferenceError, "This object is immutable, you can not set any attribute or call a non const method");
00162         return NULL;
00163     }
00164 
00165     try { 
00166         PyObject* ret = ((ViewProviderPy*)self)->show(args);
00167         if (ret != 0)
00168             ((ViewProviderPy*)self)->startNotify();
00169         return ret;
00170     }
00171     catch(const Base::Exception& e) 
00172     {
00173         std::string str;
00174         str += "FreeCAD exception thrown (";
00175         str += e.what();
00176         str += ")";
00177         e.ReportException();
00178         PyErr_SetString(PyExc_Exception,str.c_str());
00179         return NULL;
00180     }
00181     catch(const boost::filesystem::filesystem_error& e) 
00182     {
00183         std::string str;
00184         str += "File system exception thrown (";
00185         
00186         
00187         str += e.what();
00188         str += ")\n";
00189         Base::Console().Error(str.c_str());
00190         PyErr_SetString(PyExc_Exception,str.c_str());
00191         return NULL;
00192     }
00193     catch(const Py::Exception&)
00194     {
00195         
00196         return NULL;
00197     }
00198     catch(const char* e) 
00199     {
00200         Base::Console().Error(e);
00201         PyErr_SetString(PyExc_Exception,e);
00202         return NULL;
00203     }
00204     
00205 #ifndef DONT_CATCH_CXX_EXCEPTIONS 
00206     catch(const std::exception& e) 
00207     {
00208         std::string str;
00209         str += "FC++ exception thrown (";
00210         str += e.what();
00211         str += ")";
00212         Base::Console().Error(str.c_str());
00213         PyErr_SetString(PyExc_Exception,str.c_str());
00214         return NULL;
00215     }
00216     catch(...)  
00217     {
00218         PyErr_SetString(PyExc_Exception,"Unknown C++ exception");
00219         return NULL;
00220     }
00221 #endif
00222 }
00223 
00224 
00225 
00226 
00227 PyObject * ViewProviderPy::staticCallback_hide (PyObject *self, PyObject *args)
00228 {
00229     
00230     if (!((PyObjectBase*) self)->isValid()){
00231         PyErr_SetString(PyExc_ReferenceError, "This object is already deleted most likely through closing a document. This reference is no longer valid!");
00232         return NULL;
00233     }
00234 
00235     
00236     if (((PyObjectBase*) self)->isConst()){
00237         PyErr_SetString(PyExc_ReferenceError, "This object is immutable, you can not set any attribute or call a non const method");
00238         return NULL;
00239     }
00240 
00241     try { 
00242         PyObject* ret = ((ViewProviderPy*)self)->hide(args);
00243         if (ret != 0)
00244             ((ViewProviderPy*)self)->startNotify();
00245         return ret;
00246     }
00247     catch(const Base::Exception& e) 
00248     {
00249         std::string str;
00250         str += "FreeCAD exception thrown (";
00251         str += e.what();
00252         str += ")";
00253         e.ReportException();
00254         PyErr_SetString(PyExc_Exception,str.c_str());
00255         return NULL;
00256     }
00257     catch(const boost::filesystem::filesystem_error& e) 
00258     {
00259         std::string str;
00260         str += "File system exception thrown (";
00261         
00262         
00263         str += e.what();
00264         str += ")\n";
00265         Base::Console().Error(str.c_str());
00266         PyErr_SetString(PyExc_Exception,str.c_str());
00267         return NULL;
00268     }
00269     catch(const Py::Exception&)
00270     {
00271         
00272         return NULL;
00273     }
00274     catch(const char* e) 
00275     {
00276         Base::Console().Error(e);
00277         PyErr_SetString(PyExc_Exception,e);
00278         return NULL;
00279     }
00280     
00281 #ifndef DONT_CATCH_CXX_EXCEPTIONS 
00282     catch(const std::exception& e) 
00283     {
00284         std::string str;
00285         str += "FC++ exception thrown (";
00286         str += e.what();
00287         str += ")";
00288         Base::Console().Error(str.c_str());
00289         PyErr_SetString(PyExc_Exception,str.c_str());
00290         return NULL;
00291     }
00292     catch(...)  
00293     {
00294         PyErr_SetString(PyExc_Exception,"Unknown C++ exception");
00295         return NULL;
00296     }
00297 #endif
00298 }
00299 
00300 
00301 
00302 
00303 PyObject * ViewProviderPy::staticCallback_isVisible (PyObject *self, PyObject *args)
00304 {
00305     
00306     if (!((PyObjectBase*) self)->isValid()){
00307         PyErr_SetString(PyExc_ReferenceError, "This object is already deleted most likely through closing a document. This reference is no longer valid!");
00308         return NULL;
00309     }
00310 
00311     
00312     if (((PyObjectBase*) self)->isConst()){
00313         PyErr_SetString(PyExc_ReferenceError, "This object is immutable, you can not set any attribute or call a non const method");
00314         return NULL;
00315     }
00316 
00317     try { 
00318         PyObject* ret = ((ViewProviderPy*)self)->isVisible(args);
00319         if (ret != 0)
00320             ((ViewProviderPy*)self)->startNotify();
00321         return ret;
00322     }
00323     catch(const Base::Exception& e) 
00324     {
00325         std::string str;
00326         str += "FreeCAD exception thrown (";
00327         str += e.what();
00328         str += ")";
00329         e.ReportException();
00330         PyErr_SetString(PyExc_Exception,str.c_str());
00331         return NULL;
00332     }
00333     catch(const boost::filesystem::filesystem_error& e) 
00334     {
00335         std::string str;
00336         str += "File system exception thrown (";
00337         
00338         
00339         str += e.what();
00340         str += ")\n";
00341         Base::Console().Error(str.c_str());
00342         PyErr_SetString(PyExc_Exception,str.c_str());
00343         return NULL;
00344     }
00345     catch(const Py::Exception&)
00346     {
00347         
00348         return NULL;
00349     }
00350     catch(const char* e) 
00351     {
00352         Base::Console().Error(e);
00353         PyErr_SetString(PyExc_Exception,e);
00354         return NULL;
00355     }
00356     
00357 #ifndef DONT_CATCH_CXX_EXCEPTIONS 
00358     catch(const std::exception& e) 
00359     {
00360         std::string str;
00361         str += "FC++ exception thrown (";
00362         str += e.what();
00363         str += ")";
00364         Base::Console().Error(str.c_str());
00365         PyErr_SetString(PyExc_Exception,str.c_str());
00366         return NULL;
00367     }
00368     catch(...)  
00369     {
00370         PyErr_SetString(PyExc_Exception,"Unknown C++ exception");
00371         return NULL;
00372     }
00373 #endif
00374 }
00375 
00376 
00377 
00378 
00379 PyObject * ViewProviderPy::staticCallback_listDisplayModes (PyObject *self, PyObject *args)
00380 {
00381     
00382     if (!((PyObjectBase*) self)->isValid()){
00383         PyErr_SetString(PyExc_ReferenceError, "This object is already deleted most likely through closing a document. This reference is no longer valid!");
00384         return NULL;
00385     }
00386 
00387     
00388     if (((PyObjectBase*) self)->isConst()){
00389         PyErr_SetString(PyExc_ReferenceError, "This object is immutable, you can not set any attribute or call a non const method");
00390         return NULL;
00391     }
00392 
00393     try { 
00394         PyObject* ret = ((ViewProviderPy*)self)->listDisplayModes(args);
00395         if (ret != 0)
00396             ((ViewProviderPy*)self)->startNotify();
00397         return ret;
00398     }
00399     catch(const Base::Exception& e) 
00400     {
00401         std::string str;
00402         str += "FreeCAD exception thrown (";
00403         str += e.what();
00404         str += ")";
00405         e.ReportException();
00406         PyErr_SetString(PyExc_Exception,str.c_str());
00407         return NULL;
00408     }
00409     catch(const boost::filesystem::filesystem_error& e) 
00410     {
00411         std::string str;
00412         str += "File system exception thrown (";
00413         
00414         
00415         str += e.what();
00416         str += ")\n";
00417         Base::Console().Error(str.c_str());
00418         PyErr_SetString(PyExc_Exception,str.c_str());
00419         return NULL;
00420     }
00421     catch(const Py::Exception&)
00422     {
00423         
00424         return NULL;
00425     }
00426     catch(const char* e) 
00427     {
00428         Base::Console().Error(e);
00429         PyErr_SetString(PyExc_Exception,e);
00430         return NULL;
00431     }
00432     
00433 #ifndef DONT_CATCH_CXX_EXCEPTIONS 
00434     catch(const std::exception& e) 
00435     {
00436         std::string str;
00437         str += "FC++ exception thrown (";
00438         str += e.what();
00439         str += ")";
00440         Base::Console().Error(str.c_str());
00441         PyErr_SetString(PyExc_Exception,str.c_str());
00442         return NULL;
00443     }
00444     catch(...)  
00445     {
00446         PyErr_SetString(PyExc_Exception,"Unknown C++ exception");
00447         return NULL;
00448     }
00449 #endif
00450 }
00451 
00452 
00453 
00454 
00455 PyObject * ViewProviderPy::staticCallback_toString (PyObject *self, PyObject *args)
00456 {
00457     
00458     if (!((PyObjectBase*) self)->isValid()){
00459         PyErr_SetString(PyExc_ReferenceError, "This object is already deleted most likely through closing a document. This reference is no longer valid!");
00460         return NULL;
00461     }
00462 
00463     
00464     if (((PyObjectBase*) self)->isConst()){
00465         PyErr_SetString(PyExc_ReferenceError, "This object is immutable, you can not set any attribute or call a non const method");
00466         return NULL;
00467     }
00468 
00469     try { 
00470         PyObject* ret = ((ViewProviderPy*)self)->toString(args);
00471         if (ret != 0)
00472             ((ViewProviderPy*)self)->startNotify();
00473         return ret;
00474     }
00475     catch(const Base::Exception& e) 
00476     {
00477         std::string str;
00478         str += "FreeCAD exception thrown (";
00479         str += e.what();
00480         str += ")";
00481         e.ReportException();
00482         PyErr_SetString(PyExc_Exception,str.c_str());
00483         return NULL;
00484     }
00485     catch(const boost::filesystem::filesystem_error& e) 
00486     {
00487         std::string str;
00488         str += "File system exception thrown (";
00489         
00490         
00491         str += e.what();
00492         str += ")\n";
00493         Base::Console().Error(str.c_str());
00494         PyErr_SetString(PyExc_Exception,str.c_str());
00495         return NULL;
00496     }
00497     catch(const Py::Exception&)
00498     {
00499         
00500         return NULL;
00501     }
00502     catch(const char* e) 
00503     {
00504         Base::Console().Error(e);
00505         PyErr_SetString(PyExc_Exception,e);
00506         return NULL;
00507     }
00508     
00509 #ifndef DONT_CATCH_CXX_EXCEPTIONS 
00510     catch(const std::exception& e) 
00511     {
00512         std::string str;
00513         str += "FC++ exception thrown (";
00514         str += e.what();
00515         str += ")";
00516         Base::Console().Error(str.c_str());
00517         PyErr_SetString(PyExc_Exception,str.c_str());
00518         return NULL;
00519     }
00520     catch(...)  
00521     {
00522         PyErr_SetString(PyExc_Exception,"Unknown C++ exception");
00523         return NULL;
00524     }
00525 #endif
00526 }
00527 
00528 
00529 
00530 
00531 PyObject * ViewProviderPy::staticCallback_startEditing (PyObject *self, PyObject *args)
00532 {
00533     
00534     if (!((PyObjectBase*) self)->isValid()){
00535         PyErr_SetString(PyExc_ReferenceError, "This object is already deleted most likely through closing a document. This reference is no longer valid!");
00536         return NULL;
00537     }
00538 
00539     
00540     if (((PyObjectBase*) self)->isConst()){
00541         PyErr_SetString(PyExc_ReferenceError, "This object is immutable, you can not set any attribute or call a non const method");
00542         return NULL;
00543     }
00544 
00545     try { 
00546         PyObject* ret = ((ViewProviderPy*)self)->startEditing(args);
00547         if (ret != 0)
00548             ((ViewProviderPy*)self)->startNotify();
00549         return ret;
00550     }
00551     catch(const Base::Exception& e) 
00552     {
00553         std::string str;
00554         str += "FreeCAD exception thrown (";
00555         str += e.what();
00556         str += ")";
00557         e.ReportException();
00558         PyErr_SetString(PyExc_Exception,str.c_str());
00559         return NULL;
00560     }
00561     catch(const boost::filesystem::filesystem_error& e) 
00562     {
00563         std::string str;
00564         str += "File system exception thrown (";
00565         
00566         
00567         str += e.what();
00568         str += ")\n";
00569         Base::Console().Error(str.c_str());
00570         PyErr_SetString(PyExc_Exception,str.c_str());
00571         return NULL;
00572     }
00573     catch(const Py::Exception&)
00574     {
00575         
00576         return NULL;
00577     }
00578     catch(const char* e) 
00579     {
00580         Base::Console().Error(e);
00581         PyErr_SetString(PyExc_Exception,e);
00582         return NULL;
00583     }
00584     
00585 #ifndef DONT_CATCH_CXX_EXCEPTIONS 
00586     catch(const std::exception& e) 
00587     {
00588         std::string str;
00589         str += "FC++ exception thrown (";
00590         str += e.what();
00591         str += ")";
00592         Base::Console().Error(str.c_str());
00593         PyErr_SetString(PyExc_Exception,str.c_str());
00594         return NULL;
00595     }
00596     catch(...)  
00597     {
00598         PyErr_SetString(PyExc_Exception,"Unknown C++ exception");
00599         return NULL;
00600     }
00601 #endif
00602 }
00603 
00604 
00605 
00606 
00607 PyObject * ViewProviderPy::staticCallback_finishEditing (PyObject *self, PyObject *args)
00608 {
00609     
00610     if (!((PyObjectBase*) self)->isValid()){
00611         PyErr_SetString(PyExc_ReferenceError, "This object is already deleted most likely through closing a document. This reference is no longer valid!");
00612         return NULL;
00613     }
00614 
00615     
00616     if (((PyObjectBase*) self)->isConst()){
00617         PyErr_SetString(PyExc_ReferenceError, "This object is immutable, you can not set any attribute or call a non const method");
00618         return NULL;
00619     }
00620 
00621     try { 
00622         PyObject* ret = ((ViewProviderPy*)self)->finishEditing(args);
00623         if (ret != 0)
00624             ((ViewProviderPy*)self)->startNotify();
00625         return ret;
00626     }
00627     catch(const Base::Exception& e) 
00628     {
00629         std::string str;
00630         str += "FreeCAD exception thrown (";
00631         str += e.what();
00632         str += ")";
00633         e.ReportException();
00634         PyErr_SetString(PyExc_Exception,str.c_str());
00635         return NULL;
00636     }
00637     catch(const boost::filesystem::filesystem_error& e) 
00638     {
00639         std::string str;
00640         str += "File system exception thrown (";
00641         
00642         
00643         str += e.what();
00644         str += ")\n";
00645         Base::Console().Error(str.c_str());
00646         PyErr_SetString(PyExc_Exception,str.c_str());
00647         return NULL;
00648     }
00649     catch(const Py::Exception&)
00650     {
00651         
00652         return NULL;
00653     }
00654     catch(const char* e) 
00655     {
00656         Base::Console().Error(e);
00657         PyErr_SetString(PyExc_Exception,e);
00658         return NULL;
00659     }
00660     
00661 #ifndef DONT_CATCH_CXX_EXCEPTIONS 
00662     catch(const std::exception& e) 
00663     {
00664         std::string str;
00665         str += "FC++ exception thrown (";
00666         str += e.what();
00667         str += ")";
00668         Base::Console().Error(str.c_str());
00669         PyErr_SetString(PyExc_Exception,str.c_str());
00670         return NULL;
00671     }
00672     catch(...)  
00673     {
00674         PyErr_SetString(PyExc_Exception,"Unknown C++ exception");
00675         return NULL;
00676     }
00677 #endif
00678 }
00679 
00680 
00681 
00682 
00683 PyObject * ViewProviderPy::staticCallback_isEditing (PyObject *self, PyObject *args)
00684 {
00685     
00686     if (!((PyObjectBase*) self)->isValid()){
00687         PyErr_SetString(PyExc_ReferenceError, "This object is already deleted most likely through closing a document. This reference is no longer valid!");
00688         return NULL;
00689     }
00690 
00691     
00692     if (((PyObjectBase*) self)->isConst()){
00693         PyErr_SetString(PyExc_ReferenceError, "This object is immutable, you can not set any attribute or call a non const method");
00694         return NULL;
00695     }
00696 
00697     try { 
00698         PyObject* ret = ((ViewProviderPy*)self)->isEditing(args);
00699         if (ret != 0)
00700             ((ViewProviderPy*)self)->startNotify();
00701         return ret;
00702     }
00703     catch(const Base::Exception& e) 
00704     {
00705         std::string str;
00706         str += "FreeCAD exception thrown (";
00707         str += e.what();
00708         str += ")";
00709         e.ReportException();
00710         PyErr_SetString(PyExc_Exception,str.c_str());
00711         return NULL;
00712     }
00713     catch(const boost::filesystem::filesystem_error& e) 
00714     {
00715         std::string str;
00716         str += "File system exception thrown (";
00717         
00718         
00719         str += e.what();
00720         str += ")\n";
00721         Base::Console().Error(str.c_str());
00722         PyErr_SetString(PyExc_Exception,str.c_str());
00723         return NULL;
00724     }
00725     catch(const Py::Exception&)
00726     {
00727         
00728         return NULL;
00729     }
00730     catch(const char* e) 
00731     {
00732         Base::Console().Error(e);
00733         PyErr_SetString(PyExc_Exception,e);
00734         return NULL;
00735     }
00736     
00737 #ifndef DONT_CATCH_CXX_EXCEPTIONS 
00738     catch(const std::exception& e) 
00739     {
00740         std::string str;
00741         str += "FC++ exception thrown (";
00742         str += e.what();
00743         str += ")";
00744         Base::Console().Error(str.c_str());
00745         PyErr_SetString(PyExc_Exception,str.c_str());
00746         return NULL;
00747     }
00748     catch(...)  
00749     {
00750         PyErr_SetString(PyExc_Exception,"Unknown C++ exception");
00751         return NULL;
00752     }
00753 #endif
00754 }
00755 
00756 
00757 
00758 
00759 PyObject * ViewProviderPy::staticCallback_setTransformation (PyObject *self, PyObject *args)
00760 {
00761     
00762     if (!((PyObjectBase*) self)->isValid()){
00763         PyErr_SetString(PyExc_ReferenceError, "This object is already deleted most likely through closing a document. This reference is no longer valid!");
00764         return NULL;
00765     }
00766 
00767     
00768     if (((PyObjectBase*) self)->isConst()){
00769         PyErr_SetString(PyExc_ReferenceError, "This object is immutable, you can not set any attribute or call a non const method");
00770         return NULL;
00771     }
00772 
00773     try { 
00774         PyObject* ret = ((ViewProviderPy*)self)->setTransformation(args);
00775         if (ret != 0)
00776             ((ViewProviderPy*)self)->startNotify();
00777         return ret;
00778     }
00779     catch(const Base::Exception& e) 
00780     {
00781         std::string str;
00782         str += "FreeCAD exception thrown (";
00783         str += e.what();
00784         str += ")";
00785         e.ReportException();
00786         PyErr_SetString(PyExc_Exception,str.c_str());
00787         return NULL;
00788     }
00789     catch(const boost::filesystem::filesystem_error& e) 
00790     {
00791         std::string str;
00792         str += "File system exception thrown (";
00793         
00794         
00795         str += e.what();
00796         str += ")\n";
00797         Base::Console().Error(str.c_str());
00798         PyErr_SetString(PyExc_Exception,str.c_str());
00799         return NULL;
00800     }
00801     catch(const Py::Exception&)
00802     {
00803         
00804         return NULL;
00805     }
00806     catch(const char* e) 
00807     {
00808         Base::Console().Error(e);
00809         PyErr_SetString(PyExc_Exception,e);
00810         return NULL;
00811     }
00812     
00813 #ifndef DONT_CATCH_CXX_EXCEPTIONS 
00814     catch(const std::exception& e) 
00815     {
00816         std::string str;
00817         str += "FC++ exception thrown (";
00818         str += e.what();
00819         str += ")";
00820         Base::Console().Error(str.c_str());
00821         PyErr_SetString(PyExc_Exception,str.c_str());
00822         return NULL;
00823     }
00824     catch(...)  
00825     {
00826         PyErr_SetString(PyExc_Exception,"Unknown C++ exception");
00827         return NULL;
00828     }
00829 #endif
00830 }
00831 
00832 
00833 
00834 
00835 PyObject * ViewProviderPy::staticCallback_getAnnotation (PyObject *self, void * )
00836 {
00837     if (!((PyObjectBase*) self)->isValid()){
00838         PyErr_SetString(PyExc_ReferenceError, "This object is already deleted most likely through closing a document. This reference is no longer valid!");
00839         return NULL;
00840     }
00841 
00842     try {
00843         return Py::new_reference_to(((ViewProviderPy*)self)->getAnnotation());
00844     } catch (const Py::Exception&) {
00845         
00846         return NULL;
00847     } catch (...) {
00848         PyErr_SetString(PyExc_Exception, "Unknown exception while reading attribute 'Annotation' of object 'ViewProvider'");
00849         return NULL;
00850     }
00851 }
00852 
00853 int ViewProviderPy::staticCallback_setAnnotation (PyObject *self, PyObject *value, void * )
00854 {    
00855     if (!((PyObjectBase*) self)->isValid()){
00856         PyErr_SetString(PyExc_ReferenceError, "This object is already deleted most likely through closing a document. This reference is no longer valid!");
00857         return -1;
00858     }
00859     if (((PyObjectBase*) self)->isConst()){
00860         PyErr_SetString(PyExc_ReferenceError, "This object is immutable, you can not set any attribute or call a method");
00861         return -1;
00862     }
00863 
00864     try {
00865         ((ViewProviderPy*)self)->setAnnotation(Py::Object(value,false));
00866         return 0;
00867     } catch (const Py::Exception&) {
00868         
00869         return -1;
00870     } catch (...) {
00871         PyErr_SetString(PyExc_Exception, "Unknown exception while writing attribute 'Annotation' of object 'ViewProvider'");
00872         return -1;
00873     }
00874 }
00875 
00876 
00877 
00878 
00879 PyObject * ViewProviderPy::staticCallback_getRootNode (PyObject *self, void * )
00880 {
00881     if (!((PyObjectBase*) self)->isValid()){
00882         PyErr_SetString(PyExc_ReferenceError, "This object is already deleted most likely through closing a document. This reference is no longer valid!");
00883         return NULL;
00884     }
00885 
00886     try {
00887         return Py::new_reference_to(((ViewProviderPy*)self)->getRootNode());
00888     } catch (const Py::Exception&) {
00889         
00890         return NULL;
00891     } catch (...) {
00892         PyErr_SetString(PyExc_Exception, "Unknown exception while reading attribute 'RootNode' of object 'ViewProvider'");
00893         return NULL;
00894     }
00895 }
00896 
00897 int ViewProviderPy::staticCallback_setRootNode (PyObject *self, PyObject *value, void * )
00898 {    
00899     if (!((PyObjectBase*) self)->isValid()){
00900         PyErr_SetString(PyExc_ReferenceError, "This object is already deleted most likely through closing a document. This reference is no longer valid!");
00901         return -1;
00902     }
00903     if (((PyObjectBase*) self)->isConst()){
00904         PyErr_SetString(PyExc_ReferenceError, "This object is immutable, you can not set any attribute or call a method");
00905         return -1;
00906     }
00907 
00908     try {
00909         ((ViewProviderPy*)self)->setRootNode(Py::Object(value,false));
00910         return 0;
00911     } catch (const Py::Exception&) {
00912         
00913         return -1;
00914     } catch (...) {
00915         PyErr_SetString(PyExc_Exception, "Unknown exception while writing attribute 'RootNode' of object 'ViewProvider'");
00916         return -1;
00917     }
00918 }
00919 
00920 
00921 
00922 
00923 PyObject * ViewProviderPy::staticCallback_getIV (PyObject *self, void * )
00924 {
00925     if (!((PyObjectBase*) self)->isValid()){
00926         PyErr_SetString(PyExc_ReferenceError, "This object is already deleted most likely through closing a document. This reference is no longer valid!");
00927         return NULL;
00928     }
00929 
00930     try {
00931         return Py::new_reference_to(((ViewProviderPy*)self)->getIV());
00932     } catch (const Py::Exception&) {
00933         
00934         return NULL;
00935     } catch (...) {
00936         PyErr_SetString(PyExc_Exception, "Unknown exception while reading attribute 'IV' of object 'ViewProvider'");
00937         return NULL;
00938     }
00939 }
00940 
00941 int ViewProviderPy::staticCallback_setIV (PyObject *self, PyObject * , void * )
00942 {
00943     if (!((PyObjectBase*) self)->isValid()){
00944         PyErr_SetString(PyExc_ReferenceError, "This object is already deleted most likely through closing a document. This reference is no longer valid!");
00945         return -1;
00946     }
00947 
00948     PyErr_SetString(PyExc_AttributeError, "Attribute 'IV' of object 'ViewProvider' is read-only");
00949     return -1;
00950 }
00951 
00952 
00953 
00954 
00955 
00956 
00957 PyParentObject ViewProviderPy::Parents[] = { PARENTSGuiViewProviderPy };
00958 
00959 
00960 
00961 
00962 ViewProviderPy::ViewProviderPy(ViewProvider *pcObject, PyTypeObject *T)
00963     : PropertyContainerPy(reinterpret_cast<PropertyContainerPy::PointerType>(pcObject), T)
00964 {
00965 }
00966 
00967 PyObject *ViewProviderPy::PyMake(struct _typeobject *, PyObject *, PyObject *)  
00968 {
00969     
00970     PyErr_SetString(PyExc_RuntimeError, "You cannot create directly an instance of 'ViewProviderPy'.");
00971  
00972     return 0;
00973 }
00974 
00975 int ViewProviderPy::PyInit(PyObject* , PyObject* )
00976 {
00977     return 0;
00978 }
00979 
00980 
00981 
00982 
00983 ViewProviderPy::~ViewProviderPy()                                
00984 {
00985 }
00986 
00987 
00988 
00989 
00990 PyObject *ViewProviderPy::_repr(void)
00991 {
00992     return Py_BuildValue("s", representation().c_str());
00993 }
00994 
00995 
00996 
00997 
00998 PyObject *ViewProviderPy::_getattr(char *attr)                          
00999 {
01000     try {
01001         
01002         PyObject *r = getCustomAttributes(attr);
01003         if(r) return r;
01004     }
01005 #ifndef DONT_CATCH_CXX_EXCEPTIONS 
01006     catch(const Base::Exception& e) 
01007     {
01008         std::string str;
01009         str += "FreeCAD exception thrown (";
01010         str += e.what();
01011         str += ")";
01012         e.ReportException();
01013         PyErr_SetString(PyExc_Exception,str.c_str());
01014         return NULL;
01015     }
01016     catch(const std::exception& e) 
01017     {
01018         std::string str;
01019         str += "FC++ exception thrown (";
01020         str += e.what();
01021         str += ")";
01022         Base::Console().Error(str.c_str());
01023         PyErr_SetString(PyExc_Exception,str.c_str());
01024         return NULL;
01025     }
01026     catch(const Py::Exception&)
01027     {
01028         
01029         return NULL;
01030     }
01031     catch(...)  
01032     {
01033         PyErr_SetString(PyExc_Exception,"Unknown C++ exception");
01034         return NULL;
01035     }
01036 #else  // DONT_CATCH_CXX_EXCEPTIONS  
01037     catch(const Base::Exception& e) 
01038     {
01039         std::string str;
01040         str += "FreeCAD exception thrown (";
01041         str += e.what();
01042         str += ")";
01043         e.ReportException();
01044         PyErr_SetString(PyExc_Exception,str.c_str());
01045         return NULL;
01046     }
01047     catch(const Py::Exception&)
01048     {
01049         
01050         return NULL;
01051     }
01052 #endif  // DONT_CATCH_CXX_EXCEPTIONS
01053 
01054     PyObject *rvalue = Py_FindMethod(Methods, this, attr);
01055     if (rvalue == NULL)
01056     {
01057         PyErr_Clear();
01058         return PropertyContainerPy::_getattr(attr);
01059     }
01060     else
01061     {
01062         return rvalue;
01063     }
01064 }
01065 
01066 int ViewProviderPy::_setattr(char *attr, PyObject *value)       
01067 {
01068     try {
01069         
01070         int r = setCustomAttributes(attr, value);
01071         if(r==1) return 0;
01072     }
01073 #ifndef DONT_CATCH_CXX_EXCEPTIONS 
01074     catch(const Base::Exception& e) 
01075     {
01076         std::string str;
01077         str += "FreeCAD exception thrown (";
01078         str += e.what();
01079         str += ")";
01080         e.ReportException();
01081         PyErr_SetString(PyExc_Exception,str.c_str());
01082         return -1;
01083     }
01084     catch(const std::exception& e) 
01085     {
01086         std::string str;
01087         str += "FC++ exception thrown (";
01088         str += e.what();
01089         str += ")";
01090         Base::Console().Error(str.c_str());
01091         PyErr_SetString(PyExc_Exception,str.c_str());
01092         return -1;
01093     }
01094     catch(const Py::Exception&)
01095     {
01096         
01097         return -1;
01098     }
01099     catch(...)  
01100     {
01101         PyErr_SetString(PyExc_Exception,"Unknown C++ exception");
01102         return -1;
01103     }
01104 #else  // DONT_CATCH_CXX_EXCEPTIONS  
01105     catch(const Base::Exception& e) 
01106     {
01107         std::string str;
01108         str += "FreeCAD exception thrown (";
01109         str += e.what();
01110         str += ")";
01111         e.ReportException();
01112         PyErr_SetString(PyExc_Exception,str.c_str());
01113         return -1;
01114     }
01115     catch(const Py::Exception&)
01116     {
01117         
01118         return -1;
01119     }
01120 #endif  // DONT_CATCH_CXX_EXCEPTIONS
01121 
01122     return PropertyContainerPy::_setattr(attr, value);
01123 }
01124 
01125 ViewProvider *ViewProviderPy::getViewProviderPtr(void) const
01126 {
01127     return static_cast<ViewProvider *>(_pcTwinPointer);
01128 }
01129 
01130 #if 0
01131 
01132 
01133 
01134 
01135 
01136 
01137 std::string ViewProviderPy::representation(void) const
01138 {
01139     return std::string("<ViewProvider object>");
01140 }
01141 
01142 PyObject* ViewProviderPy::show(PyObject *args)
01143 {
01144     PyErr_SetString(PyExc_NotImplementedError, "Not yet implemented");
01145     return 0;
01146 }
01147 
01148 PyObject* ViewProviderPy::hide(PyObject *args)
01149 {
01150     PyErr_SetString(PyExc_NotImplementedError, "Not yet implemented");
01151     return 0;
01152 }
01153 
01154 PyObject* ViewProviderPy::isVisible(PyObject *args)
01155 {
01156     PyErr_SetString(PyExc_NotImplementedError, "Not yet implemented");
01157     return 0;
01158 }
01159 
01160 PyObject* ViewProviderPy::listDisplayModes(PyObject *args)
01161 {
01162     PyErr_SetString(PyExc_NotImplementedError, "Not yet implemented");
01163     return 0;
01164 }
01165 
01166 PyObject* ViewProviderPy::toString(PyObject *args)
01167 {
01168     PyErr_SetString(PyExc_NotImplementedError, "Not yet implemented");
01169     return 0;
01170 }
01171 
01172 PyObject* ViewProviderPy::startEditing(PyObject *args)
01173 {
01174     PyErr_SetString(PyExc_NotImplementedError, "Not yet implemented");
01175     return 0;
01176 }
01177 
01178 PyObject* ViewProviderPy::finishEditing(PyObject *args)
01179 {
01180     PyErr_SetString(PyExc_NotImplementedError, "Not yet implemented");
01181     return 0;
01182 }
01183 
01184 PyObject* ViewProviderPy::isEditing(PyObject *args)
01185 {
01186     PyErr_SetString(PyExc_NotImplementedError, "Not yet implemented");
01187     return 0;
01188 }
01189 
01190 PyObject* ViewProviderPy::setTransformation(PyObject *args)
01191 {
01192     PyErr_SetString(PyExc_NotImplementedError, "Not yet implemented");
01193     return 0;
01194 }
01195 
01196 
01197 
01198 Py::Object ViewProviderPy::getAnnotation(void) const
01199 {
01200     
01201     throw Py::AttributeError("Not yet implemented");
01202 }
01203 
01204 void  ViewProviderPy::setAnnotation(Py::Object arg)
01205 {
01206     throw Py::AttributeError("Not yet implemented");
01207 }
01208 
01209 Py::Object ViewProviderPy::getRootNode(void) const
01210 {
01211     
01212     throw Py::AttributeError("Not yet implemented");
01213 }
01214 
01215 void  ViewProviderPy::setRootNode(Py::Object arg)
01216 {
01217     throw Py::AttributeError("Not yet implemented");
01218 }
01219 
01220 Py::String ViewProviderPy::getIV(void) const
01221 {
01222     
01223     throw Py::AttributeError("Not yet implemented");
01224 }
01225 
01226 PyObject *ViewProviderPy::getCustomAttributes(const char* attr) const
01227 {
01228     return 0;
01229 }
01230 
01231 int ViewProviderPy::setCustomAttributes(const char* attr, PyObject *obj)
01232 {
01233     return 0; 
01234 }
01235 #endif
01236 
01237 
01238