Remove unused code into App

This commit is contained in:
andrea
2022-07-11 16:04:39 +02:00
committed by Uwe
parent 82083ab059
commit 61a5551940
10 changed files with 2 additions and 365 deletions

View File

@@ -412,25 +412,9 @@ void Application::setupPythonException(PyObject* module)
/// get called by the document when the name is changing
void Application::renameDocument(const char *OldName, const char *NewName)
{
#if 1
(void)OldName;
(void)NewName;
throw Base::RuntimeError("Renaming document internal name is no longer allowed!");
#else
std::map<std::string,Document*>::iterator pos;
pos = DocMap.find(OldName);
if (pos != DocMap.end()) {
Document* temp;
temp = pos->second;
DocMap.erase(pos);
DocMap[NewName] = temp;
signalRenameDocument(*temp);
}
else {
throw Base::RuntimeError("Application::renameDocument(): no document with this name to rename!");
}
#endif
}
Document* Application::newDocument(const char * Name, const char * UserName, bool createView, bool tempDoc)

View File

@@ -343,25 +343,7 @@ PyObject* Application::sSaveDocument(PyObject * /*self*/, PyObject *args)
Py_Return;
}
#if 0
PyObject* Application::sSaveDocumentAs(PyObject * /*self*/, PyObject *args)
{
char *pDoc, *pFileName;
if (!PyArg_ParseTuple(args, "ss", &pDoc, &pFileName))
return nullptr;
Document* doc = GetApplication().getDocument(pDoc);
if (doc) {
doc->saveAs( pFileName );
}
else {
PyErr_Format(PyExc_NameError, "Unknown document '%s'", pDoc);
return NULL;
}
Py_Return;
}
#endif
PyObject* Application::sActiveDocument(PyObject * /*self*/, PyObject *args)
{
if (!PyArg_ParseTuple(args, ""))
@@ -843,21 +825,6 @@ PyObject *Application::sGetLogLevel(PyObject * /*self*/, PyObject *args)
}
// For performance reason, we only output integer value
return Py_BuildValue("i",Base::Console().LogLevel(l));
// switch(l) {
// case FC_LOGLEVEL_LOG:
// return Py_BuildValue("s","Log");
// case FC_LOGLEVEL_WARN:
// return Py_BuildValue("s","Warning");
// case FC_LOGLEVEL_ERR:
// return Py_BuildValue("s","Error");
// case FC_LOGLEVEL_MSG:
// return Py_BuildValue("s","Message");
// case FC_LOGLEVEL_TRACE:
// return Py_BuildValue("s","Trace");
// default:
// return Py_BuildValue("i",l);
// }
} PY_CATCH;
}

View File

@@ -3891,8 +3891,6 @@ DocumentObject * Document::addObject(const char* sType, const char* pObjectName,
pcObject->pcNameInDocument = &(d->objectMap.find(ObjectName)->first);
// insert in the vector
d->objectArray.push_back(pcObject);
// insert in the adjacence list and reference through the ConectionMap
//_DepConMap[pcObject] = add_vertex(_DepList);
// If we are restoring, don't set the Label object now; it will be restored later. This is to avoid potential duplicate
// label conflicts later.
@@ -4134,27 +4132,6 @@ void Document::removeObject(const char* sName)
_checkTransaction(pos->second,nullptr,__LINE__);
#if 0
if(!d->rollback && d->activeUndoTransaction && pos->second->hasChildElement()) {
// Preserve link group sub object global visibilities. Normally those
// claimed object should be hidden in global coordinate space. However,
// when the group is deleted, the user will naturally try to show the
// children, which may now in the global space. When the parent is
// undeleted, having its children shown in both the local and global
// coordinate space is very confusing. Hence, we preserve the visibility
// here
for(auto &sub : pos->second->getSubObjects()) {
if(sub.empty())
continue;
if(sub[sub.size()-1]!='.')
sub += '.';
auto sobj = pos->second->getSubObject(sub.c_str());
if(sobj && sobj->getDocument()==this && !sobj->Visibility.getValue())
d->activeUndoTransaction->addObjectChange(sobj,&sobj->Visibility);
}
}
#endif
if (d->activeObject == pos->second)
d->activeObject = nullptr;

View File

@@ -100,7 +100,6 @@ App::DocumentObjectExecReturn *DocumentObject::recompute(void)
{
//check if the links are valid before making the recompute
if(!GeoFeatureGroupExtension::areLinksValid(this)) {
#if 1
// Get objects that have invalid link scope, and print their names.
// Truncate the invalid object list name strings for readability, if they happen to be very long.
std::vector<App::DocumentObject*> invalid_linkobjs;
@@ -133,9 +132,6 @@ App::DocumentObjectExecReturn *DocumentObject::recompute(void)
scopenames.pop_back();
}
Base::Console().Warning("%s: Link(s) to object(s) '%s' go out of the allowed scope '%s'. Instead, the linked object(s) reside within '%s'.\n", getTypeId().getName(), objnames.c_str(), getNameInDocument(), scopenames.c_str());
#else
return new App::DocumentObjectExecReturn("Links go out of the allowed scope", this);
#endif
}
// set/unset the execution bit
@@ -387,42 +383,6 @@ const std::vector<App::DocumentObject*> &DocumentObject::getInList(void) const
#endif // if USE_OLD_DAG
#if 0
void _getInListRecursive(std::set<DocumentObject*>& objSet,
const DocumentObject* obj,
const DocumentObject* checkObj, int depth)
{
for (const auto objIt : obj->getInList()) {
// if the check object is in the recursive inList we have a cycle!
if (objIt == checkObj || depth <= 0) {
throw Base::BadGraphError("DocumentObject::getInListRecursive(): cyclic dependency detected!");
}
// if the element was already in the set then there is no need to process it again
auto pair = objSet.insert(objIt);
if (pair.second)
_getInListRecursive(objSet, objIt, checkObj, depth-1);
}
}
std::vector<App::DocumentObject*> DocumentObject::getInListRecursive(void) const
{
// number of objects in document is a good estimate in result size
// int maxDepth = getDocument()->countObjects() +2;
int maxDepth = GetApplication().checkLinkDepth(0);
std::vector<App::DocumentObject*> result;
result.reserve(maxDepth);
// using a rcursie helper to collect all InLists
_getInListRecursive(result, this, this, maxDepth);
std::vector<App::DocumentObject*> array;
array.insert(array.begin(), result.begin(), result.end());
return array;
}
#else
// The original algorithm is highly inefficient in some special case.
// Considering an object is linked by every other objects. After excluding this
// object, there is another object linked by every other of the remaining
@@ -438,7 +398,6 @@ std::vector<App::DocumentObject*> DocumentObject::getInListRecursive(void) const
return res;
}
#endif
// More efficient algorithm to find the recursive inList of an object,
// including possible external parents. One shortcoming of this algorithm is
@@ -569,12 +528,7 @@ bool _isInInListRecursive(const DocumentObject* act,
bool DocumentObject::isInInListRecursive(DocumentObject *linkTo) const
{
#if 0
int maxDepth = getDocument()->countObjects() + 2;
return _isInInListRecursive(this, linkTo, maxDepth);
#else
return this==linkTo || getInListEx(true).count(linkTo);
#endif
}
bool DocumentObject::isInInList(DocumentObject *linkTo) const
@@ -641,24 +595,12 @@ bool DocumentObject::testIfLinkDAGCompatible(DocumentObject *linkTo) const
bool DocumentObject::testIfLinkDAGCompatible(const std::vector<DocumentObject *> &linksTo) const
{
#if 0
Document* doc = this->getDocument();
if (!doc)
throw Base::RuntimeError("DocumentObject::testIfLinkIsDAG: object is not in any document.");
std::vector<App::DocumentObject*> deplist = doc->getDependencyList(linksTo);
if( std::find(deplist.begin(),deplist.end(),this) != deplist.end() )
//found this in dependency list
return false;
else
return true;
#else
auto inLists = getInListEx(true);
inLists.emplace(const_cast<DocumentObject*>(this));
for(auto obj : linksTo)
if(inLists.count(obj))
return false;
return true;
#endif
}
bool DocumentObject::testIfLinkDAGCompatible(PropertyLinkSubList &linksTo) const

View File

@@ -709,88 +709,14 @@ PyObject* DocumentObjectPy::getPathsByOutList(PyObject *args)
throw Py::RuntimeError(e.what());
}
}
//remove
PyObject *DocumentObjectPy::getCustomAttributes(const char* attr) const
{
// Dynamic property is now directly supported in PropertyContainer. So we
// can comment out here and let PropertyContainerPy handle it.
#if 1
(void)attr;
#else
// search for dynamic property
Property* prop = getDocumentObjectPtr()->getDynamicPropertyByName(attr);
if (prop)
return prop->getPyObject();
else
#endif
return nullptr;
}
//remove
int DocumentObjectPy::setCustomAttributes(const char* attr, PyObject *obj)
{
// The following code is practically the same as in PropertyContainerPy,
// especially since now dynamic property is directly supported in
// PropertyContainer. So we can comment out here and let PropertyContainerPy
// handle it.
#if 1
(void)attr;
(void)obj;
#else
// explicitly search for dynamic property
try {
Property* prop = getDocumentObjectPtr()->getDynamicPropertyByName(attr);
if (prop) {
if(prop->testStatus(Property::Immutable)) {
std::stringstream s;
s << "'DocumentObject' attribute '" << attr << "' is read-only";
throw Py::AttributeError(s.str());
}
prop->setPyObject(obj);
return 1;
}
}
catch (Base::ValueError &exc) {
std::stringstream s;
s << "Property '" << attr << "': " << exc.what();
throw Py::ValueError(s.str());
}
catch (Base::Exception &exc) {
std::stringstream s;
s << "Attribute (Name: " << attr << ") error: '" << exc.what() << "' ";
throw Py::AttributeError(s.str());
}
catch (Py::AttributeError &) {
throw;
}catch (...) {
std::stringstream s;
s << "Unknown error in attribute " << attr;
throw Py::AttributeError(s.str());
}
// search in PropertyList
Property *prop = getDocumentObjectPtr()->getPropertyByName(attr);
if (prop) {
// Read-only attributes must not be set over its Python interface
if(prop->testStatus(Property::Immutable) ||
(getDocumentObjectPtr()->getPropertyType(prop) & Prop_ReadOnly))
{
std::stringstream s;
s << "'DocumentObject' attribute '" << attr << "' is read-only";
throw Py::AttributeError(s.str());
}
try {
prop->setPyObject(obj);
}
catch (const Base::TypeError& e) {
std::stringstream s;
s << "Property '" << prop->getName() << "': " << e.what();
throw Py::TypeError(s.str());
}
return 1;
}
#endif
return 0;
}

View File

@@ -109,11 +109,6 @@ FeatureTest::FeatureTest()
QuantityLength.setUnit(Base::Unit::Length);
ADD_PROPERTY(QuantityOther,(5.0));
QuantityOther.setUnit(Base::Unit(-3,1));
//ADD_PROPERTY(QuantityMass,(1.0));
//QuantityMass.setUnit(Base::Unit::Mass);
//ADD_PROPERTY(QuantityAngle,(1.0));
//QuantityAngle.setUnit(Base::Unit::Angle);
}
FeatureTest::~FeatureTest()
@@ -161,31 +156,7 @@ DocumentObjectExecReturn *FeatureTest::execute()
list.emplace_back("World");
enumObj6.setEnums(list);
enumObj6.setValue(list.back());
/*
doc=App.newDocument()
obj=doc.addObject("App::FeatureTest")
obj.ExceptionType=0 # good
doc.recompute()
obj.ExceptionType=1 # unknown exception
doc.recompute()
obj.ExceptionType=2 # Runtime error
doc.recompute()
obj.ExceptionType=3 # segfault
doc.recompute()
obj.ExceptionType=4 # segfault
doc.recompute()
obj.ExceptionType=5 # int division by zero
doc.recompute()
obj.ExceptionType=6 # float division by zero
doc.recompute()
*/
int *i=nullptr,j;
float f;
void *s;
@@ -198,15 +169,7 @@ doc.recompute()
case 0: break;
case 1: throw std::runtime_error("Test Exception");
case 2: throw Base::RuntimeError("FeatureTestException::execute(): Testexception");
#if 0 // only allow these error types on purpose
case 3: *i=0;printf("%i",*i);break; // seg-fault
case 4: t = nullptr; break; // seg-fault
case 5: j=0; printf("%i",1/j); break; // int division by zero
case 6: f=0.0; printf("%f",1/f); break; // float division by zero
case 7: s = malloc(3600000000ul); free(s); break; // out-of-memory
#else
default: (void)i; (void)j; (void)f; (void)s; (void)t; break;
#endif
}
ExecCount.setValue(ExecCount.getValue() + 1);

View File

@@ -148,7 +148,6 @@ std::vector< DocumentObject* > GroupExtension::removeObjects(std::vector< Docume
void GroupExtension::removeObjectsFromDocument()
{
#if 1
while (Group.getSize() > 0) {
// Remove the objects step by step because it can happen
// that an object is part of several groups and thus a
@@ -156,15 +155,6 @@ void GroupExtension::removeObjectsFromDocument()
const std::vector<DocumentObject*> & grp = Group.getValues();
removeObjectFromDocument(grp.front());
}
#else
const std::vector<DocumentObject*> & grp = Group.getValues();
// Use set so iterate on each linked object exactly one time (in case of multiple links to the same document)
std::set<DocumentObject*> grpSet (grp.begin(), grp.end());
for (std::set<DocumentObject*>::iterator it = grpSet.begin(); it != grpSet.end(); ++it) {
removeObjectFromDocument(*it);
}
#endif
}
void GroupExtension::removeObjectFromDocument(DocumentObject* obj)

View File

@@ -63,58 +63,6 @@ public:
}
protected:
// It is not safe to change potential object name reference at this level.
// For example, a LinkSub with sub element name Face1 may also be some
// object's name that may potentially be mapped. In addition, with the
// introduction of full qualified SubName reference, the Sub value inside
// LinkSub may require customized mapping. So we move the mapping logic to
// various link property's Restore() function.
#if 0
void startElement(const XMLCh* const uri, const XMLCh* const localname,
const XMLCh* const qname,
const XERCES_CPP_NAMESPACE_QUALIFIER Attributes& attrs)
{
Base::XMLReader::startElement(uri, localname, qname, attrs);
if (LocalName == "Property")
propertyStack.push(std::make_pair(AttrMap["name"],AttrMap["type"]));
if (!propertyStack.empty()) {
// replace the stored object name with the real one
if (LocalName == "Link" || LocalName == "LinkSub" || (LocalName == "String" && propertyStack.top().first == "Label")) {
for (std::map<std::string, std::string>::iterator it = AttrMap.begin(); it != AttrMap.end(); ++it) {
std::map<std::string, std::string>::const_iterator jt = nameMap.find(it->second);
if (jt != nameMap.end())
it->second = jt->second;
}
}
// update the expression if name of the object is used
else if (LocalName == "Expression") {
std::map<std::string, std::string>::iterator it = AttrMap.find("expression");
if (it != AttrMap.end()) {
// search for the part before the first dot that should be the object name.
std::string expression = it->second;
std::string::size_type dotpos = expression.find_first_of(".");
if (dotpos != std::string::npos) {
std::string name = expression.substr(0, dotpos);
std::map<std::string, std::string>::const_iterator jt = nameMap.find(name);
if (jt != nameMap.end()) {
std::string newexpression = jt->second;
newexpression += expression.substr(dotpos);
it->second = newexpression;
}
}
}
}
}
}
void endElement(const XMLCh* const uri, const XMLCh *const localname, const XMLCh *const qname)
{
Base::XMLReader::endElement(uri, localname, qname);
if (LocalName == "Property")
propertyStack.pop();
}
#endif
private:
std::map<std::string, std::string>& nameMap;

View File

@@ -293,17 +293,6 @@ PropertyLinkBase::tryReplaceLink(const PropertyContainer *owner, DocumentObject
if(oldObj == obj) {
if(owner == parent) {
// Do not throw on sub object error yet. It's better to let
// recompute find out the error and point out the affected objects
// to user.
#if 0
if(subname && subname[0] && !newObj->getSubObject(subname)) {
FC_THROWM(Base::RuntimeError,
"Sub-object '" << newObj->getFullName()
<< '.' << subname << "' not found when replacing link in "
<< owner->getFullName() << '.' << getName());
}
#endif
res.first = newObj;
if(subname) res.second = subname;
return res;
@@ -326,14 +315,6 @@ PropertyLinkBase::tryReplaceLink(const PropertyContainer *owner, DocumentObject
break;
if(sobj == oldObj) {
if(prev == parent) {
#if 0
if(sub[pos] && !newObj->getSubObject(sub.c_str()+pos)) {
FC_THROWM(Base::RuntimeError,
"Sub-object '" << newObj->getFullName()
<< '.' << (sub.c_str()+pos) << "' not found when replacing link in "
<< owner->getFullName() << '.' << getName());
}
#endif
if(sub[prevPos] == '$')
sub.replace(prevPos+1,pos-1-prevPos,newObj->Label.getValue());
else
@@ -1998,7 +1979,6 @@ std::vector<PropertyLinkSubList::SubSet> PropertyLinkSubList::getSubListValues(b
PyObject *PropertyLinkSubList::getPyObject(void)
{
#if 1
std::vector<SubSet> subLists = getSubListValues();
std::size_t count = subLists.size();
#if 0//FIXME: Should switch to tuple
@@ -2021,24 +2001,6 @@ PyObject *PropertyLinkSubList::getPyObject(void)
}
return Py::new_reference_to(sequence);
#else
unsigned int count = getSize();
#if 0//FIXME: Should switch to tuple
Py::Tuple sequence(count);
#else
Py::List sequence(count);
#endif
for (unsigned int i = 0; i<count; i++) {
Py::Tuple tup(2);
tup[0] = Py::asObject(_lValueList[i]->getPyObject());
std::string subItem;
if (_lSubList.size() > i)
subItem = _lSubList[i];
tup[1] = Py::String(subItem);
sequence[i] = tup;
}
return Py::new_reference_to(sequence);
#endif
}
void PropertyLinkSubList::setPyObject(PyObject *value)
@@ -2675,7 +2637,6 @@ public:
if (path.startsWith(QLatin1String("https://")))
return path;
else {
// return QFileInfo(path).canonicalFilePath();
return QFileInfo(path).absoluteFilePath();
}
}
@@ -2685,7 +2646,6 @@ public:
if (path.startsWith(QLatin1String("https://")))
return path;
else {
// return QFileInfo(myPos->first).canonicalFilePath();
return QFileInfo(myPos->first).absoluteFilePath();
}
}
@@ -2832,7 +2792,6 @@ public:
return;
QFileInfo info(myPos->first);
// QString path(info.canonicalFilePath());
QString path(info.absoluteFilePath());
const char *filename = doc.getFileName();
QString docPath(getFullPath(filename));

View File

@@ -311,19 +311,7 @@ void PropertyEnumeration::setEnums(const char **plEnums)
void PropertyEnumeration::setEnums(const std::vector<std::string> &Enums)
{
// _enum.setEnums() will preserve old value possible, so no need to do it
// here
#if 0
if (_enum.isValid()) {
const std::string &index = getValueAsString();
_enum.setEnums(Enums);
setValue(index.c_str());
} else {
_enum.setEnums(Enums);
}
#else
setEnumVector(Enums);
#endif
}
void PropertyEnumeration::setValue(const char *value)
@@ -459,13 +447,6 @@ void PropertyEnumeration::Restore(Base::XMLReader &reader)
PyObject * PropertyEnumeration::getPyObject()
{
if (!_enum.isValid()) {
// There is legimate use case of having an empty PropertyEnumeration and
// set its enumeration items later. Returning error here cause hasattr()
// to return False even though the property exists.
//
// PyErr_SetString(PyExc_AssertionError, "The enum is empty");
// return 0;
//
Py_Return;
}