From 608dddd9989590febc8da0400f1a152e33fb5b10 Mon Sep 17 00:00:00 2001 From: jriegel Date: Mon, 16 Jun 2014 20:39:46 +0200 Subject: [PATCH] Restructure the Assembly data model (again)... --- src/Mod/Assembly/App/AppAssembly.cpp | 2 - src/Mod/Assembly/App/CMakeLists.txt | 10 +- src/Mod/Assembly/App/Constraint.cpp | 148 +----- src/Mod/Assembly/App/Constraint.h | 17 +- src/Mod/Assembly/App/ConstraintGroup.cpp | 11 - src/Mod/Assembly/App/ConstraintGroup.h | 1 - src/Mod/Assembly/App/Item.cpp | 19 - src/Mod/Assembly/App/Item.h | 48 +- src/Mod/Assembly/App/PartRef.cpp | 2 +- src/Mod/Assembly/App/PartRef.h | 11 +- src/Mod/Assembly/App/Product.cpp | 287 +---------- src/Mod/Assembly/App/Product.h | 87 ++-- src/Mod/Assembly/App/ProductRef.cpp | 8 +- src/Mod/Assembly/App/ProductRef.h | 13 +- src/Mod/Assembly/App/ProductRefPyImp.cpp | 3 +- src/Mod/Assembly/Gui/AppAssemblyGui.cpp | 2 - src/Mod/Assembly/Gui/CMakeLists.txt | 18 +- src/Mod/Assembly/Gui/CommandConstraints.cpp | 13 +- .../Assembly/Gui/TaskAssemblyConstraints.cpp | 462 +++++++++--------- .../Assembly/Gui/ViewProviderConstraint.cpp | 116 ++--- src/Mod/Assembly/Gui/ViewProviderProduct.cpp | 38 +- .../Assembly/Gui/ViewProviderProductRef.cpp | 44 +- src/Mod/Assembly/Gui/Workbench.cpp | 28 +- 23 files changed, 455 insertions(+), 933 deletions(-) diff --git a/src/Mod/Assembly/App/AppAssembly.cpp b/src/Mod/Assembly/App/AppAssembly.cpp index 01315d28c..899a8dbc0 100644 --- a/src/Mod/Assembly/App/AppAssembly.cpp +++ b/src/Mod/Assembly/App/AppAssembly.cpp @@ -33,7 +33,6 @@ #include "Item.h" #include "Product.h" #include "ProductRef.h" -#include "PartRef.h" #include "Constraint.h" #include "ConstraintGroup.h" @@ -73,7 +72,6 @@ void AssemblyExport initAssembly() Assembly::Item ::init(); Assembly::Product ::init(); Assembly::ProductRef ::init(); - Assembly::PartRef ::init(); // constraint hirachy Assembly::Constraint ::init(); diff --git a/src/Mod/Assembly/App/CMakeLists.txt b/src/Mod/Assembly/App/CMakeLists.txt index c2076926a..2b17e43e4 100644 --- a/src/Mod/Assembly/App/CMakeLists.txt +++ b/src/Mod/Assembly/App/CMakeLists.txt @@ -32,15 +32,15 @@ set(Assembly_LIBS generate_from_xml(ItemPy) generate_from_xml(ProductRefPy) -generate_from_xml(PartRefPy) +#generate_from_xml(PartRefPy) generate_from_xml(ConstraintPy) generate_from_xml(ConstraintGroupPy) SET(Features_SRCS Item.cpp Item.h - PartRef.cpp - PartRef.h + #PartRef.cpp + #PartRef.h Product.cpp Product.h ProductRef.cpp @@ -84,8 +84,8 @@ SET(Python_SRCS ItemPyImp.cpp ProductRefPy.xml ProductRefPyImp.cpp - PartRefPy.xml - PartRefPyImp.cpp + #PartRefPy.xml + #PartRefPyImp.cpp ConstraintPy.xml ConstraintPyImp.cpp ConstraintGroupPy.xml diff --git a/src/Mod/Assembly/App/Constraint.cpp b/src/Mod/Assembly/App/Constraint.cpp index 0875370c4..b851c105f 100644 --- a/src/Mod/Assembly/App/Constraint.cpp +++ b/src/Mod/Assembly/App/Constraint.cpp @@ -50,7 +50,6 @@ #include "Constraint.h" #include "ConstraintPy.h" #include "Item.h" -#include "PartRef.h" #include "Product.h" @@ -76,37 +75,21 @@ struct ConstraintLinkException : std::exception { PROPERTY_SOURCE(Assembly::Constraint, App::DocumentObject) +const char* Constraint::OrientationEnums[] = {"Parallel","Equal","Opposite","Perpendicular",NULL}; +const char* Constraint::TypeEnums[] = {"Fix","Distance","Orientation","Angle","Align","Coincident","None",NULL}; +const char* Constraint::SolutionSpaceEnums[] = {"Bidirectional","PositivDirectional","NegativeDirectional",NULL}; + Constraint::Constraint() { ADD_PROPERTY(First, (0)); ADD_PROPERTY(Second,(0)); ADD_PROPERTY(Value,(0)); ADD_PROPERTY(Orientation, (long(0))); + Orientation.setEnums(OrientationEnums); ADD_PROPERTY(Type, (long(6))); + Type.setEnums(TypeEnums); ADD_PROPERTY(SolutionSpace, (long(0))); - - std::vector vec; - vec.push_back("Parallel"); - vec.push_back("Equal"); - vec.push_back("Opposite"); - vec.push_back("Perpendicular"); - Orientation.setEnumVector(vec); - - std::vector vec2; - vec2.push_back("Fix"); - vec2.push_back("Distance"); - vec2.push_back("Orientation"); - vec2.push_back("Angle"); - vec2.push_back("Align"); - vec2.push_back("Coincident"); - vec2.push_back("None"); - Type.setEnumVector(vec2); - - std::vector vec3; - vec3.push_back("Bidirectional"); - vec3.push_back("Positiv directional"); - vec3.push_back("Negative directional"); - SolutionSpace.setEnumVector(vec3); + SolutionSpace.setEnums(SolutionSpaceEnums); } short Constraint::mustExecute() const @@ -119,126 +102,9 @@ short Constraint::mustExecute() const App::DocumentObjectExecReturn* Constraint::execute(void) { - touch(); return App::DocumentObject::StdReturn; } -boost::shared_ptr Constraint::initLink(App::PropertyLinkSub& link) { - - //empty links are allowed - if(!link.getValue()) - return boost::shared_ptr(); - - //check if we have Assembly::PartRef - if(link.getValue()->getTypeId() != PartRef::getClassTypeId()) { - throw ConstraintLinkException(); - return boost::shared_ptr(); - }; - - Assembly::PartRef* part = static_cast(link.getValue()); - - if(!part) - throw ConstraintPartException(); - - //get the relevant solver in which the part needs to be added - part->ensureInitialisation(); - - return part->getGeometry3D(link.getSubValues()[0].c_str()); -} - - -void Constraint::init(Assembly::Product* ass) -{ - Assembly::PartRef* part1, *part2; - - if(First.getValue()) { - m_first_geom = initLink(First); - part1 = static_cast(First.getValue()); - } - - if(Second.getValue()) { - m_second_geom = initLink(Second); - part2= static_cast(Second.getValue()); - } - - //fix constraint - if(Type.getValue() == 0) { - if(part1) - part1->m_part->fix(true); - else if(part2) - part2->m_part->fix(true); - else - throw ConstraintPartException(); - - return; - }; - - //all other constraints need poth parts - if(!part1 || !part2) { - throw ConstraintPartException(); - }; - - //and both geometries - if(!m_first_geom || !m_second_geom) { - throw ConstraintInitException(); - }; - - //we may need the orientation - dcm::Direction dir; - - switch(Orientation.getValue()) { - case 0: - dir = dcm::parallel; - break; - - case 1: - dir = dcm::equal; - break; - - case 2: - dir = dcm::opposite; - break; - - default: - dir = dcm::perpendicular; - }; - - //we may need the SolutionSpace - dcm::SolutionSpace sspace; - - switch(SolutionSpace.getValue()) { - case 0: - sspace = dcm::bidirectional; - break; - - case 1: - sspace = dcm::positiv_directional; - break; - - default: - sspace = dcm::negative_directional; - }; - - //distance constraint - if(Type.getValue() == 1) - m_constraint = ass->m_solver->createConstraint3D(getNameInDocument(), m_first_geom, m_second_geom, (dcm::distance = Value.getValue()) = sspace); - - //orientation constraint - if(Type.getValue() == 2) - m_constraint = ass->m_solver->createConstraint3D(getNameInDocument(), m_first_geom, m_second_geom, dcm::orientation = dir); - - //angle constraint - if(Type.getValue() == 3) - m_constraint = ass->m_solver->createConstraint3D(getNameInDocument(), m_first_geom, m_second_geom, dcm::angle = Value.getValue()*M_PI/180.); - - //alignemnt constraint - if(Type.getValue() == 4) - m_constraint = ass->m_solver->createConstraint3D(getNameInDocument(), m_first_geom, m_second_geom, ((dcm::alignment = dir) = Value.getValue()) = sspace); - - //coincident constraint - if(Type.getValue() == 5) - m_constraint = ass->m_solver->createConstraint3D(getNameInDocument(), m_first_geom, m_second_geom, dcm::coincidence = dir); -} PyObject* Constraint::getPyObject(void) { diff --git a/src/Mod/Assembly/App/Constraint.h b/src/Mod/Assembly/App/Constraint.h index 11909f932..b40f9f886 100644 --- a/src/Mod/Assembly/App/Constraint.h +++ b/src/Mod/Assembly/App/Constraint.h @@ -40,13 +40,7 @@ namespace Assembly class AssemblyExport Constraint : public App::DocumentObject { PROPERTY_HEADER(Assembly::Constraint); - -protected: - boost::shared_ptr m_constraint; - boost::shared_ptr m_first_geom, m_second_geom; - - boost::shared_ptr< Geometry3D > initLink(App::PropertyLinkSub& link); - + public: Constraint(); @@ -67,10 +61,11 @@ public: return "AssemblyGui::ViewProviderConstraint"; } PyObject *getPyObject(void); - - /** @brief initialize the constraint in the assembly solver - */ - void init(Assembly::Product* ass); + +private: + static const char* OrientationEnums[]; + static const char* TypeEnums[]; + static const char* SolutionSpaceEnums[]; }; } //namespace Assembly diff --git a/src/Mod/Assembly/App/ConstraintGroup.cpp b/src/Mod/Assembly/App/ConstraintGroup.cpp index 46d553575..fe9894a53 100644 --- a/src/Mod/Assembly/App/ConstraintGroup.cpp +++ b/src/Mod/Assembly/App/ConstraintGroup.cpp @@ -31,7 +31,6 @@ #include "ConstraintGroupPy.h" #include "ConstraintGroup.h" -#include "PartRef.h" #include "Product.h" @@ -72,16 +71,6 @@ App::DocumentObjectExecReturn *ConstraintGroup::execute(void) return App::DocumentObject::StdReturn; } -void ConstraintGroup::init(Product* ass) { - std::vector obj = Constraints.getValues(); - - std::vector::iterator it; - for (it = obj.begin(); it != obj.end(); ++it) { - if ((*it)->getTypeId().isDerivedFrom(Assembly::Constraint::getClassTypeId())) { - static_cast(*it)->init(ass); - } - } -} } diff --git a/src/Mod/Assembly/App/ConstraintGroup.h b/src/Mod/Assembly/App/ConstraintGroup.h index 06a64b226..1fa281cd7 100644 --- a/src/Mod/Assembly/App/ConstraintGroup.h +++ b/src/Mod/Assembly/App/ConstraintGroup.h @@ -57,7 +57,6 @@ public: } //@} - void init(Assembly::Product* ass); }; } //namespace Assembly diff --git a/src/Mod/Assembly/App/Item.cpp b/src/Mod/Assembly/App/Item.cpp index 897f357ff..3abef9e77 100644 --- a/src/Mod/Assembly/App/Item.cpp +++ b/src/Mod/Assembly/App/Item.cpp @@ -43,25 +43,6 @@ PROPERTY_SOURCE_ABSTRACT(Assembly::Item, App::GeoFeature) Item::Item() { - ADD_PROPERTY_TYPE(CreatedBy,(""),0,App::Prop_None,"The creator of the Item"); - ADD_PROPERTY_TYPE(CreationDate,(Base::TimeInfo::currentDateTimeString()),0,App::Prop_ReadOnly,"Date of creation"); - ADD_PROPERTY_TYPE(LastModifiedBy,(""),0,App::Prop_None,0); - ADD_PROPERTY_TYPE(LastModifiedDate,("Unknown"),0,App::Prop_ReadOnly,"Date of last modification"); - ADD_PROPERTY_TYPE(Company,(""),0,App::Prop_None,"Additional tag to save the the name of the company"); - ADD_PROPERTY_TYPE(Comment,(""),0,App::Prop_None,"Additional tag to save a comment"); - ADD_PROPERTY_TYPE(Meta,(),0,App::Prop_None,"Map with additional meta information"); - ADD_PROPERTY_TYPE(Material,(),0,App::Prop_None,"Map with material properties"); - // create the uuid for the document - Base::Uuid id; - ADD_PROPERTY_TYPE(Id,(""),0,App::Prop_None,"ID (Part-Number) of the Item"); - ADD_PROPERTY_TYPE(Uid,(id),0,App::Prop_None,"UUID of the Item"); - - // license stuff - ADD_PROPERTY_TYPE(License,("CC BY 3.0"),0,App::Prop_None,"License string of the Item"); - ADD_PROPERTY_TYPE(LicenseURL,("http://creativecommons.org/licenses/by/3.0/"),0,App::Prop_None,"URL to the license text/contract"); - // color and apperance - ADD_PROPERTY(Color,(1.0,1.0,1.0,1.0)); // set transparent -> not used - ADD_PROPERTY(Visibility,(true)); } short Item::mustExecute() const diff --git a/src/Mod/Assembly/App/Item.h b/src/Mod/Assembly/App/Item.h index 49ec00340..ac9a61941 100644 --- a/src/Mod/Assembly/App/Item.h +++ b/src/Mod/Assembly/App/Item.h @@ -32,6 +32,7 @@ namespace Assembly { +/// Base class of all Assembly objects class AssemblyExport Item : public App::GeoFeature { PROPERTY_HEADER(Assembly::Item); @@ -40,51 +41,6 @@ public: Item(); ~Item() {}; - /** @name base properties of all Assembly Items - * This properties corospond mostly to the meta information - * in the App::Document class - */ - //@{ - /// Id e.g. Part number - App::PropertyString Id; - /// unique identifier of the Item - App::PropertyUUID Uid; - /// long description of the Item - App::PropertyString Description ; - /// creators name (utf-8) - App::PropertyString CreatedBy; - App::PropertyString CreationDate; - /// user last modified the document - App::PropertyString LastModifiedBy; - App::PropertyString LastModifiedDate; - /// company name UTF8(optional) - App::PropertyString Company; - /// long comment or description (UTF8 with line breaks) - App::PropertyString Comment; - /** License string - * Holds the short license string for the Item, e.g. CC-BY - * for the Creative Commons license suit. - */ - App::PropertyString License; - /// License descripton/contract URL - App::PropertyString LicenseURL; - /// Meta descriptons - App::PropertyMap Meta; - /// Meta descriptons - App::PropertyMap Material; - //@} - - /** @name Visual properties */ - //@{ - /** Base color of the Item - If the transparency value is 1.0 - the color or the next hirachy is used - */ - App::PropertyColor Color; - /// Visibility - App::PropertyBool Visibility; - //@} - /** @name methods override feature */ //@{ /// recalculate the feature @@ -96,8 +52,6 @@ public: } //@} - virtual TopoDS_Shape getShape(void)const =0 ; - PyObject *getPyObject(void); }; diff --git a/src/Mod/Assembly/App/PartRef.cpp b/src/Mod/Assembly/App/PartRef.cpp index f9adbbb12..c82d0962c 100644 --- a/src/Mod/Assembly/App/PartRef.cpp +++ b/src/Mod/Assembly/App/PartRef.cpp @@ -52,7 +52,7 @@ struct AssemblyItemException : std::exception { }; -PROPERTY_SOURCE(Assembly::PartRef, Assembly::Item) +PROPERTY_SOURCE(Assembly::PartRef, App::GeoFeature) PartRef::PartRef() { ADD_PROPERTY(Model, (0)); diff --git a/src/Mod/Assembly/App/PartRef.h b/src/Mod/Assembly/App/PartRef.h index c2f3606ed..ff269f2ed 100644 --- a/src/Mod/Assembly/App/PartRef.h +++ b/src/Mod/Assembly/App/PartRef.h @@ -25,7 +25,8 @@ #define Assembly_ItemPart_H #include -#include "Item.h" +#include + #include "Solver/Solver.h" @@ -34,15 +35,15 @@ namespace Assembly class Product; -class AssemblyExport PartRef : public Assembly::Item +class AssemblyExport PartRef : public App::GeoFeature { PROPERTY_HEADER(Assembly::PartRef); public: PartRef(); - App::PropertyLink Model; - App::PropertyLinkList Annotation; + App::PropertyLink Item; + //App::PropertyLinkList Annotation; /** @name methods override feature */ //@{ @@ -56,7 +57,7 @@ public: PyObject *getPyObject(void); //@} - virtual TopoDS_Shape getShape(void) const; + //virtual TopoDS_Shape getShape(void) const; bool holdsObject(App::DocumentObject* obj) const; Product* getParentAssembly(); diff --git a/src/Mod/Assembly/App/Product.cpp b/src/Mod/Assembly/App/Product.cpp index c47a36d7f..1e8144372 100644 --- a/src/Mod/Assembly/App/Product.cpp +++ b/src/Mod/Assembly/App/Product.cpp @@ -33,7 +33,6 @@ #include #include "Product.h" -#include "PartRef.h" #include "ConstraintGroup.h" @@ -46,23 +45,26 @@ PROPERTY_SOURCE(Assembly::Product, Assembly::Item) Product::Product() { ADD_PROPERTY(Items,(0)); - ADD_PROPERTY(Annotations,(0)); - ADD_PROPERTY(Rigid,(true)); -#ifdef ASSEMBLY_DEBUG_FACILITIES - ADD_PROPERTY(ApplyAtFailure,(false)); - ADD_PROPERTY(Precision,(1e-6)); - ADD_PROPERTY(SaveState,(false)); - ADD_PROPERTY(Iterations,(5e3)); - ADD_PROPERTY(LogLevel, (long(1))); + ADD_PROPERTY_TYPE(CreatedBy,(""),0,App::Prop_None,"The creator of the Item"); + ADD_PROPERTY_TYPE(CreationDate,(Base::TimeInfo::currentDateTimeString()),0,App::Prop_ReadOnly,"Date of creation"); + ADD_PROPERTY_TYPE(LastModifiedBy,(""),0,App::Prop_None,0); + ADD_PROPERTY_TYPE(LastModifiedDate,("Unknown"),0,App::Prop_ReadOnly,"Date of last modification"); + ADD_PROPERTY_TYPE(Company,(""),0,App::Prop_None,"Additional tag to save the the name of the company"); + ADD_PROPERTY_TYPE(Comment,(""),0,App::Prop_None,"Additional tag to save a comment"); + ADD_PROPERTY_TYPE(Meta,(),0,App::Prop_None,"Map with additional meta information"); + ADD_PROPERTY_TYPE(Material,(),0,App::Prop_None,"Map with material properties"); + // create the uuid for the document + Base::Uuid id; + ADD_PROPERTY_TYPE(Id,(""),0,App::Prop_None,"ID (Part-Number) of the Item"); + ADD_PROPERTY_TYPE(Uid,(id),0,App::Prop_None,"UUID of the Item"); + + // license stuff + ADD_PROPERTY_TYPE(License,("CC BY 3.0"),0,App::Prop_None,"License string of the Item"); + ADD_PROPERTY_TYPE(LicenseURL,("http://creativecommons.org/licenses/by/3.0/"),0,App::Prop_None,"URL to the license text/contract"); + // color and apperance + ADD_PROPERTY(Color,(1.0,1.0,1.0,1.0)); // set transparent -> not used + ADD_PROPERTY(Visibility,(true)); - std::vector vec; - vec.push_back("iteration"); - vec.push_back("solving"); - vec.push_back("manipulation"); - vec.push_back("information"); - vec.push_back("error"); - LogLevel.setEnumVector(vec); -#endif } short Product::mustExecute() const { @@ -73,108 +75,9 @@ App::DocumentObjectExecReturn* Product::execute(void) { Base::Console().Message("Execute\n"); - try { - - //create a solver and init all child assemblys with subsolvers - m_solver = boost::shared_ptr(new Solver); - m_downstream_placement = Base::Placement(Base::Vector3(0,0,0), Base::Rotation()); - Base::Placement dummy; - initSolver(boost::shared_ptr(), dummy, false); - initConstraints(boost::shared_ptr()); - -#ifdef ASSEMBLY_DEBUG_FACILITIES - - if(ApplyAtFailure.getValue()) - m_solver->setOption(dcm::ApplyResults); - else - m_solver->setOption(dcm::IgnoreResults); - - m_solver->setOption(Precision.getValue()); - m_solver->setOption(Iterations.getValue()); - - if(SaveState.getValue()) { - - ofstream myfile; - myfile.open("solverstate.txt"); - m_solver->saveState(myfile); - myfile.close(); - }; - - m_solver->setLoggingFilter(dcm::severity >= (dcm::severity_level)LogLevel.getValue()); - -#endif - - //solve the system - m_solver->solve(); - } - catch - (boost::exception& e) { - message.clear(); - message << "Solver exception " << *boost::get_error_info(e) - << "raised: " << boost::get_error_info(e)->c_str() << std::endl; - //throw Base::Exception(message.str().c_str()); - Base::Console().Error(message.str().c_str()); - } - catch - (std::exception& e) { - message.clear(); - message << "Exception raised in assembly solver: " << e.what() << std::endl; - //throw Base::Exception(message.str().c_str()); - Base::Console().Error(message.str().c_str()); - } - catch(Standard_ConstructionError& e) { - message.clear(); - message << "Construction Error raised in assembly solver during execution: "; - message << e.GetMessageString()<< std::endl; - Base::Console().Error(message.str().c_str()); - } - catch - (...) { - message.clear(); - message << "Unknown Exception raised in assembly solver during execution" << std::endl; - //throw Base::Exception(message.str().c_str()); - Base::Console().Error(message.str().c_str()); - }; - - this->touch(); - return App::DocumentObject::StdReturn; } -TopoDS_Shape Product::getShape(void) const { - std::vector s; - std::vector obj = Items.getValues(); - - std::vector::iterator it; - - for(it = obj.begin(); it != obj.end(); ++it) { - if((*it)->getTypeId().isDerivedFrom(Assembly::Item::getClassTypeId())) { - TopoDS_Shape aShape = static_cast(*it)->getShape(); - - if(!aShape.IsNull()) - s.push_back(aShape); - } - } - - if(s.size() > 0) { - TopoDS_Compound aRes = TopoDS_Compound(); - BRep_Builder aBuilder = BRep_Builder(); - aBuilder.MakeCompound(aRes); - - for(std::vector::iterator it = s.begin(); it != s.end(); ++it) { - - aBuilder.Add(aRes, *it); - } - - //if (aRes.IsNull()) - // throw Base::Exception("Resulting shape is invalid"); - return aRes; - } - - // set empty shape - return TopoDS_Compound(); - -} //PyObject* Product::getPyObject(void) { // if(PythonObject.is(Py::_None())) { @@ -185,159 +88,7 @@ TopoDS_Shape Product::getShape(void) const { // return Py::new_reference_to(PythonObject); //} -bool Product::isParentAssembly(PartRef* part) { - typedef std::vector::const_iterator iter; - - const std::vector& vector = Items.getValues(); - - for(iter it=vector.begin(); it != vector.end(); it++) { - - if((*it)->getTypeId() == Assembly::PartRef::getClassTypeId()) - if(*it == part) - return true; - }; - - return false; -} - -Product* Product::getToplevelAssembly() { - - typedef std::vector::const_iterator iter; - - const std::vector& vector = getInList(); - - for(iter it=vector.begin(); it != vector.end(); it++) { - - if((*it)->getTypeId() == Assembly::Product::getClassTypeId()) - return static_cast(*it)->getToplevelAssembly(); - }; - - return this; -}; - -Product* Product::getParentAssembly(PartRef* part) { - - typedef std::vector::const_iterator iter; - - const std::vector& vector = Items.getValues(); - - for(iter it=vector.begin(); it != vector.end(); it++) { - - if((*it)->getTypeId() == Assembly::PartRef::getClassTypeId()) { - if(*it == part) - return this; - } - else if((*it)->getTypeId() == Assembly::Product::getClassTypeId()) { - - Assembly::Product* assembly = static_cast(*it)->getParentAssembly(part); - - if(assembly) - return assembly; - } - }; - - return (Product*)NULL; -} - - - -std::pair Product::getContainingPart(App::DocumentObject* obj, bool isTop) { - - typedef std::vector::const_iterator iter; - - const std::vector& vector = Items.getValues(); - - for(iter it=vector.begin(); it != vector.end(); it++) { - - if((*it)->getTypeId() == Assembly::PartRef::getClassTypeId()) { - if(static_cast(*it)->holdsObject(obj)) - return std::make_pair(static_cast(*it), this); - } - else if((*it)->getTypeId() == Assembly::Product::getClassTypeId()) { - - std::pair part = static_cast(*it)->getContainingPart(obj, false); - - if(part.first && part.second) { - - if(isTop) - return part; - else - return std::make_pair(part.first, this); - } - } - }; - - return std::pair(NULL, NULL); -} - -void Product::initSolver(boost::shared_ptr parent, Base::Placement& PL_downstream, bool stopped) { - - if(parent) { - if(Rigid.getValue() || stopped) { - m_solver = parent->createSubsystem(); - m_solver->setTransformation(PL_downstream*this->Placement.getValue()); - stopped = true; //all below belongs to this rigid group - - //connect the recalculated signal in case we need to update the placement - m_solver->connectSignal(boost::bind(&Product::finish, this, _1)); - } - else { - m_solver = parent; - PL_downstream *= this->Placement.getValue(); - } - } - - //we always need to store the downstream placement as we may be a subassembly in a - //non-rigid subassembly - m_downstream_placement = PL_downstream; - - typedef std::vector::const_iterator iter; - const std::vector& vector = Items.getValues(); - - for(iter it=vector.begin(); it != vector.end(); it++) { - - if((*it)->getTypeId() == Assembly::Product::getClassTypeId()) { - - static_cast(*it)->initSolver(m_solver, PL_downstream, stopped); - } - }; -} - -void Product::initConstraints(boost::shared_ptr parent) { - - - - //get the constraint group and init the constraints - typedef std::vector::const_iterator iter; - - const std::vector& vector = Annotations.getValues(); - - for(iter it=vector.begin(); it != vector.end(); it++) { - - if((*it)->getTypeId() == Assembly::ConstraintGroup::getClassTypeId()) - static_cast(*it)->init(this); - }; - - // iterate down as long as a non-rigid subsystem exists - const std::vector& vector2 = Items.getValues(); - - for(iter it=vector2.begin(); it != vector2.end(); it++) { - - if((*it)->getTypeId() == Assembly::Product::getClassTypeId()) - static_cast(*it)->initConstraints(m_solver); - - }; - -}; - -//the callback for the recalculated signal -void Product::finish(boost::shared_ptr subsystem) { - - //assert(subsystem == m_solver); - Base::Placement p = m_solver->getTransformation(); - this->Placement.setValue(m_downstream_placement.inverse()*p); -}; } //assembly diff --git a/src/Mod/Assembly/App/Product.h b/src/Mod/Assembly/App/Product.h index e4dab7bd0..d71cab296 100644 --- a/src/Mod/Assembly/App/Product.h +++ b/src/Mod/Assembly/App/Product.h @@ -32,7 +32,6 @@ namespace Assembly { -class PartRef; class AssemblyExport Product : public Assembly::Item { @@ -41,9 +40,54 @@ class AssemblyExport Product : public Assembly::Item public: Product(); + /// Items of the Product App::PropertyLinkList Items; - App::PropertyLinkList Annotations; - App::PropertyBool Rigid; + + /** @name base properties of all Assembly Items + * This properties corospond mostly to the meta information + * in the App::Document class + */ + //@{ + /// Id e.g. Part number + App::PropertyString Id; + /// unique identifier of the Item + App::PropertyUUID Uid; + /// long description of the Item + App::PropertyString Description ; + /// creators name (utf-8) + App::PropertyString CreatedBy; + App::PropertyString CreationDate; + /// user last modified the document + App::PropertyString LastModifiedBy; + App::PropertyString LastModifiedDate; + /// company name UTF8(optional) + App::PropertyString Company; + /// long comment or description (UTF8 with line breaks) + App::PropertyString Comment; + /** License string + * Holds the short license string for the Item, e.g. CC-BY + * for the Creative Commons license suit. + */ + App::PropertyString License; + /// License descripton/contract URL + App::PropertyString LicenseURL; + /// Meta descriptons + App::PropertyMap Meta; + /// Meta descriptons + App::PropertyMap Material; + //@} + + /** @name Visual properties */ + //@{ + /** Base color of the Item + If the transparency value is 1.0 + the color or the next hirachy is used + */ + App::PropertyColor Color; + /// Visibility + App::PropertyBool Visibility; + //@} + /** @name methods override feature */ //@{ @@ -57,43 +101,6 @@ public: //PyObject *getPyObject(void); //@} - virtual TopoDS_Shape getShape(void) const; - - bool isParentAssembly(PartRef* part); - Product* getToplevelAssembly(); - Product* getParentAssembly(PartRef* part); - - //returns the PartRef which holds the given document object and the Product, which holds - //the this part and is a direct children of this Product. The returned Product is therefore - //the "TopLevel" Assembly holding the part of all children of this assembly. If this assembly holds - //the children directly, without any subassembly, the returned Product is this. - std::pair< PartRef*, Product* > getContainingPart(App::DocumentObject* obj, bool isTop=true); - - //create a new solver for this assembly and initalise all downstream itemassemblys either with a - //subsystem (if they are rigid) or with this solver plus the downstream placement - void initSolver(boost::shared_ptr parent, Base::Placement& pl_downstream, bool stopped); - - //initialise the oen constraint group and go downstream as long as non-rigid itemassemblys exist, - //which need to be initialised too - void initConstraints(boost::shared_ptr parent); - - //read the downstream itemassemblys and set their placement to the propertyplacement - void finish(boost::shared_ptr subsystem); - - boost::shared_ptr m_solver; - Base::Placement m_downstream_placement; - - -#ifdef ASSEMBLY_DEBUG_FACILITIES - App::PropertyBool ApplyAtFailure; - App::PropertyFloat Precision; - App::PropertyBool SaveState; - App::PropertyInteger Iterations; - App::PropertyEnumeration LogLevel; -#endif - -private: - std::stringstream message; }; } //namespace Assembly diff --git a/src/Mod/Assembly/App/ProductRef.cpp b/src/Mod/Assembly/App/ProductRef.cpp index f6df9f578..e4b7b85a9 100644 --- a/src/Mod/Assembly/App/ProductRef.cpp +++ b/src/Mod/Assembly/App/ProductRef.cpp @@ -33,7 +33,6 @@ #include #include "ProductRef.h" -#include "PartRef.h" #include "ConstraintGroup.h" #include "ProductRefPy.h" @@ -42,13 +41,10 @@ using namespace Assembly; namespace Assembly { -PROPERTY_SOURCE(Assembly::ProductRef, Assembly::Item) +PROPERTY_SOURCE(Assembly::ProductRef, Assembly::Item) ProductRef::ProductRef() { - ADD_PROPERTY(Items,(0)); - ADD_PROPERTY(Annotations,(0)); - ADD_PROPERTY(Rigid,(true)); - + ADD_PROPERTY(Item,(0)); } short ProductRef::mustExecute() const { diff --git a/src/Mod/Assembly/App/ProductRef.h b/src/Mod/Assembly/App/ProductRef.h index 0261b65c4..10665bcd9 100644 --- a/src/Mod/Assembly/App/ProductRef.h +++ b/src/Mod/Assembly/App/ProductRef.h @@ -27,13 +27,12 @@ #include #include "Item.h" -#include "PartRef.h" #include "Solver/Solver.h" namespace Assembly { -class ItemPart; + class AssemblyExport ProductRef : public Assembly::Item { @@ -42,9 +41,8 @@ class AssemblyExport ProductRef : public Assembly::Item public: ProductRef(); - App::PropertyLinkList Items; - App::PropertyLinkList Annotations; - App::PropertyBool Rigid; + /// The one and only GeomtricObject referenced + App::PropertyLink Item; /** @name methods override feature */ //@{ @@ -58,11 +56,6 @@ public: PyObject *getPyObject(void); //@} - virtual TopoDS_Shape getShape(void) const {return TopoDS_Shape();} - - std::pair< PartRef*, Product* > getContainingPart(App::DocumentObject* obj, bool isTop=true){ return std::pair(NULL, NULL);} - - }; } //namespace Assembly diff --git a/src/Mod/Assembly/App/ProductRefPyImp.cpp b/src/Mod/Assembly/App/ProductRefPyImp.cpp index d9c2ac2ca..a124d7ef2 100644 --- a/src/Mod/Assembly/App/ProductRefPyImp.cpp +++ b/src/Mod/Assembly/App/ProductRefPyImp.cpp @@ -3,10 +3,9 @@ #include "Mod/Assembly/App/ProductRef.h" -// inclusion of the generated files (generated out of ProductPy.xml) +// inclusion of the generated files (generated out of ProductRefPy.xml) #include "ProductRefPy.h" #include "ProductRefPy.cpp" -#include using namespace Assembly; diff --git a/src/Mod/Assembly/Gui/AppAssemblyGui.cpp b/src/Mod/Assembly/Gui/AppAssemblyGui.cpp index 3d1143dc0..cf9106911 100644 --- a/src/Mod/Assembly/Gui/AppAssemblyGui.cpp +++ b/src/Mod/Assembly/Gui/AppAssemblyGui.cpp @@ -33,7 +33,6 @@ #include "Workbench.h" #include "ViewProvider.h" -#include "ViewProviderPartRef.h" #include "ViewProviderProduct.h" #include "ViewProviderProductRef.h" #include "ViewProviderConstraintGroup.h" @@ -83,7 +82,6 @@ void AssemblyGuiExport initAssemblyGui() AssemblyGui::Workbench::init(); AssemblyGui::ViewProviderItem ::init(); - AssemblyGui::ViewProviderPartRef ::init(); AssemblyGui::ViewProviderProduct ::init(); AssemblyGui::ViewProviderProductRef ::init(); diff --git a/src/Mod/Assembly/Gui/CMakeLists.txt b/src/Mod/Assembly/Gui/CMakeLists.txt index fa9dd2648..bb0fecc71 100644 --- a/src/Mod/Assembly/Gui/CMakeLists.txt +++ b/src/Mod/Assembly/Gui/CMakeLists.txt @@ -29,8 +29,8 @@ set(AssemblyGui_LIBS ) set(AssemblyGui_MOC_HDRS - TaskAssemblyConstraints.h - TaskDlgAssemblyConstraints.h + #TaskAssemblyConstraints.h + #TaskDlgAssemblyConstraints.h ) fc_wrap_cpp(AssemblyGui_MOC_SRCS ${AssemblyGui_MOC_HDRS}) SOURCE_GROUP("Moc" FILES ${AssemblyGui_MOC_SRCS}) @@ -38,15 +38,15 @@ SOURCE_GROUP("Moc" FILES ${AssemblyGui_MOC_SRCS}) qt4_add_resources(AssemblyGui_SRCS Resources/Assembly.qrc) set(AssemblyGui_UIC_SRCS - TaskAssemblyConstraints.ui + #TaskAssemblyConstraints.ui ) qt4_wrap_ui(AssemblyGui_UIC_HDRS ${AssemblyGui_UIC_SRCS}) SET(AssemblyGuiViewProvider_SRCS ViewProvider.cpp ViewProvider.h - ViewProviderPartRef.cpp - ViewProviderPartRef.h + #ViewProviderPartRef.cpp + #ViewProviderPartRef.h ViewProviderProduct.cpp ViewProviderProduct.h ViewProviderProductRef.cpp @@ -55,10 +55,10 @@ SET(AssemblyGuiViewProvider_SRCS ViewProviderConstraint.h ViewProviderConstraintGroup.cpp ViewProviderConstraintGroup.h - TaskDlgAssemblyConstraints.cpp - TaskDlgAssemblyConstraints.h - TaskAssemblyConstraints.h - TaskAssemblyConstraints.cpp + #TaskDlgAssemblyConstraints.cpp + #TaskDlgAssemblyConstraints.h + #TaskAssemblyConstraints.h + #TaskAssemblyConstraints.cpp ) SOURCE_GROUP("ViewProvider" FILES ${AssemblyGuiViewProvider_SRCS}) diff --git a/src/Mod/Assembly/Gui/CommandConstraints.cpp b/src/Mod/Assembly/Gui/CommandConstraints.cpp index 2f17a08f4..16e50b65d 100644 --- a/src/Mod/Assembly/Gui/CommandConstraints.cpp +++ b/src/Mod/Assembly/Gui/CommandConstraints.cpp @@ -38,9 +38,8 @@ #include #include -#include #include -#include +//#include using namespace std; @@ -49,11 +48,11 @@ extern Assembly::Item* ActiveAsmObject; // Helper methods =========================================================== -Assembly::ConstraintGroup* getConstraintGroup(Assembly::ProductRef* Asm) +Assembly::ConstraintGroup* getConstraintGroup(Assembly::Product* Asm) { Assembly::ConstraintGroup* ConstGrp = 0; - std::vector Ano = Asm->Annotations.getValues(); + std::vector Ano = Asm->Items.getValues(); for(std::vector::const_iterator it = Ano.begin(); it != Ano.end(); ++it) { if((*it)->getTypeId().isDerivedFrom(Assembly::ConstraintGroup::getClassTypeId())) { @@ -65,7 +64,7 @@ Assembly::ConstraintGroup* getConstraintGroup(Assembly::ProductRef* Asm) return ConstGrp; } -bool getConstraintPrerequisits(Assembly::ProductRef** Asm, Assembly::ConstraintGroup** ConstGrp) +bool getConstraintPrerequisits(Assembly::Product** Asm, Assembly::ConstraintGroup** ConstGrp) { if(!ActiveAsmObject || !ActiveAsmObject->getTypeId().isDerivedFrom(Assembly::ProductRef::getClassTypeId())) { QMessageBox::warning(Gui::getMainWindow(), QObject::tr("No active Assembly"), @@ -73,7 +72,7 @@ bool getConstraintPrerequisits(Assembly::ProductRef** Asm, Assembly::ConstraintG return true; } - *Asm = static_cast(ActiveAsmObject); + *Asm = static_cast(ActiveAsmObject); // find the Constraint group of the active Assembly *ConstGrp = getConstraintGroup(*Asm); @@ -97,7 +96,7 @@ bool getConstraintPrerequisits(Assembly::ProductRef** Asm, Assembly::ConstraintG } -std::string asSubLinkString(Assembly::PartRef* part, std::string element) +std::string asSubLinkString(Assembly::ProductRef* part, std::string element) { std::string buf; buf += "(App.ActiveDocument."; diff --git a/src/Mod/Assembly/Gui/TaskAssemblyConstraints.cpp b/src/Mod/Assembly/Gui/TaskAssemblyConstraints.cpp index 91a220564..986f80d5b 100644 --- a/src/Mod/Assembly/Gui/TaskAssemblyConstraints.cpp +++ b/src/Mod/Assembly/Gui/TaskAssemblyConstraints.cpp @@ -24,6 +24,7 @@ #include "PreCompiled.h" #ifndef _PreComp_ +# include # include # include #endif @@ -32,7 +33,6 @@ #include "TaskAssemblyConstraints.h" #include -#include #include #include @@ -82,10 +82,10 @@ TaskAssemblyConstraints::TaskAssemblyConstraints(ViewProviderConstraint* vp) ass = dynamic_cast(obj->Second.getValue())->getParentAssembly(); }; - if(ass) - ass->getToplevelAssembly()->execute(); - else - return; + //if(ass) + // ass->getToplevelAssembly()->execute(); + //else + // return; //get the individual constraint settings ui->value->setValue(obj->Value.getValue()); @@ -242,55 +242,55 @@ TaskAssemblyConstraints::~TaskAssemblyConstraints() void TaskAssemblyConstraints::onSelectionChanged(const Gui::SelectionChanges& msg) { - if(msg.Type == Gui::SelectionChanges::AddSelection) { + //if(msg.Type == Gui::SelectionChanges::AddSelection) { - //add it as the first geometry? - if(ui->first_geom->text().isEmpty()) { - std::vector objs = Gui::Selection().getSelectionEx(); - Assembly::Constraint* con = dynamic_cast(view->getObject()); + // //add it as the first geometry? + // if(ui->first_geom->text().isEmpty()) { + // std::vector objs = Gui::Selection().getSelectionEx(); + // Assembly::Constraint* con = dynamic_cast(view->getObject()); - if(!ActiveAsmObject || !ActiveAsmObject->getTypeId().isDerivedFrom(Assembly::Product::getClassTypeId())) { - QMessageBox::warning(Gui::getMainWindow(), QObject::tr("No active Assembly"), - QObject::tr("You need a active (blue) Assembly to insert a Constraint. Please create a new one or make one active (double click).")); - return; - } + // if(!ActiveAsmObject || !ActiveAsmObject->getTypeId().isDerivedFrom(Assembly::Product::getClassTypeId())) { + // QMessageBox::warning(Gui::getMainWindow(), QObject::tr("No active Assembly"), + // QObject::tr("You need a active (blue) Assembly to insert a Constraint. Please create a new one or make one active (double click).")); + // return; + // } - std::pair part1 = static_cast(ActiveAsmObject)->getContainingPart(objs.back().getObject()); - con->First.setValue(part1.first, objs.back().getSubNames()); - QString str; - str = QString::fromAscii(part1.first->getNameInDocument()) + QString::fromAscii(".") + QString::fromStdString(con->First.getSubValues().front()); - ui->first_geom->setText(str); + // std::pair part1 = static_cast(ActiveAsmObject)->getContainingPart(objs.back().getObject()); + // con->First.setValue(part1.first, objs.back().getSubNames()); + // QString str; + // str = QString::fromAscii(part1.first->getNameInDocument()) + QString::fromAscii(".") + QString::fromStdString(con->First.getSubValues().front()); + // ui->first_geom->setText(str); - App::GetApplication().getActiveDocument()->recompute(); - setPossibleConstraints(); - setPossibleOptions(); - view->draw(); - return; - } + // App::GetApplication().getActiveDocument()->recompute(); + // setPossibleConstraints(); + // setPossibleOptions(); + // view->draw(); + // return; + // } - if(ui->second_geom->text().isEmpty()) { - std::vector objs = Gui::Selection().getSelectionEx(); - Assembly::Constraint* con = dynamic_cast(view->getObject()); + // if(ui->second_geom->text().isEmpty()) { + // std::vector objs = Gui::Selection().getSelectionEx(); + // Assembly::Constraint* con = dynamic_cast(view->getObject()); - if(!ActiveAsmObject || !ActiveAsmObject->getTypeId().isDerivedFrom(Assembly::Product::getClassTypeId())) { - QMessageBox::warning(Gui::getMainWindow(), QObject::tr("No active Assembly"), - QObject::tr("You need a active (blue) Assembly to insert a Constraint. Please create a new one or make one active (double click).")); - return; - } + // if(!ActiveAsmObject || !ActiveAsmObject->getTypeId().isDerivedFrom(Assembly::Product::getClassTypeId())) { + // QMessageBox::warning(Gui::getMainWindow(), QObject::tr("No active Assembly"), + // QObject::tr("You need a active (blue) Assembly to insert a Constraint. Please create a new one or make one active (double click).")); + // return; + // } - std::pair part2 = static_cast(ActiveAsmObject)->getContainingPart(objs.back().getObject()); - con->Second.setValue(part2.first, objs.back().getSubNames()); - QString str; - str = QString::fromAscii(part2.first->getNameInDocument()) + QString::fromAscii(".") + QString::fromStdString(con->Second.getSubValues().front()); - ui->second_geom->setText(str); + // std::pair part2 = static_cast(ActiveAsmObject)->getContainingPart(objs.back().getObject()); + // con->Second.setValue(part2.first, objs.back().getSubNames()); + // QString str; + // str = QString::fromAscii(part2.first->getNameInDocument()) + QString::fromAscii(".") + QString::fromStdString(con->Second.getSubValues().front()); + // ui->second_geom->setText(str); - App::GetApplication().getActiveDocument()->recompute(); - setPossibleConstraints(); - setPossibleOptions(); - view->draw(); - return; - } - } + // App::GetApplication().getActiveDocument()->recompute(); + // setPossibleConstraints(); + // setPossibleOptions(); + // view->draw(); + // return; + // } + //} } void TaskAssemblyConstraints::on_constraint_selection(bool clicked) @@ -379,242 +379,242 @@ void TaskAssemblyConstraints::on_clear_second() void TaskAssemblyConstraints::setPossibleOptions() { - //disable all orientations for later easy disabling - ui->parallel->setEnabled(false); - ui->equal->setEnabled(false); - ui->opposite->setEnabled(false); - ui->perpendicular->setEnabled(false); + ////disable all orientations for later easy disabling + //ui->parallel->setEnabled(false); + //ui->equal->setEnabled(false); + //ui->opposite->setEnabled(false); + //ui->perpendicular->setEnabled(false); - //disable solution spaces for later easy enabling - ui->bidirectional->setEnabled(false); - ui->pos_direction->setEnabled(false); - ui->neg_direction->setEnabled(false); + ////disable solution spaces for later easy enabling + //ui->bidirectional->setEnabled(false); + //ui->pos_direction->setEnabled(false); + //ui->neg_direction->setEnabled(false); - //this only works if both objects are set - Assembly::Constraint* obj = dynamic_cast(view->getObject()); + ////this only works if both objects are set + //Assembly::Constraint* obj = dynamic_cast(view->getObject()); - if(obj->First.getValue()) { + //if(obj->First.getValue()) { - Assembly::PartRef* p1 = dynamic_cast(obj->First.getValue()); + // Assembly::PartRef* p1 = dynamic_cast(obj->First.getValue()); - if(!p1) - return; + // if(!p1) + // return; - Assembly::Product* ass = p1->getParentAssembly(); + // Assembly::Product* ass = p1->getParentAssembly(); - //extract the geometries to use for comparison - boost::shared_ptr g1 = ass->m_solver->getGeometry3D(obj->First.getSubValues()[0].c_str()); + // //extract the geometries to use for comparison + // boost::shared_ptr g1 = ass->m_solver->getGeometry3D(obj->First.getSubValues()[0].c_str()); - if(!g1) - return; + // if(!g1) + // return; - if(obj->Second.getValue()) { + // if(obj->Second.getValue()) { - Assembly::PartRef* p2 = dynamic_cast(obj->Second.getValue()); + // Assembly::PartRef* p2 = dynamic_cast(obj->Second.getValue()); - if(!p2) - return; + // if(!p2) + // return; - boost::shared_ptr g2 = ass->m_solver->getGeometry3D(obj->Second.getSubValues()[0].c_str()); + // boost::shared_ptr g2 = ass->m_solver->getGeometry3D(obj->Second.getSubValues()[0].c_str()); - if(!g2) - return; + // if(!g2) + // return; - //distance - if(obj->Type.getValue() == 1) { + // //distance + // if(obj->Type.getValue() == 1) { - if(isCombination(g1,g2, dcm::geometry::point, dcm::geometry::plane) || - isCombination(g1,g2, dcm::geometry::point, dcm::geometry::cylinder)) { - ui->bidirectional->setEnabled(true); - ui->pos_direction->setEnabled(true); - ui->neg_direction->setEnabled(true); - }; - }; + // if(isCombination(g1,g2, dcm::geometry::point, dcm::geometry::plane) || + // isCombination(g1,g2, dcm::geometry::point, dcm::geometry::cylinder)) { + // ui->bidirectional->setEnabled(true); + // ui->pos_direction->setEnabled(true); + // ui->neg_direction->setEnabled(true); + // }; + // }; - //align & coincident - if(obj->Type.getValue() == 4 || obj->Type.getValue() == 5) { + // //align & coincident + // if(obj->Type.getValue() == 4 || obj->Type.getValue() == 5) { - if(isCombination(g1,g2, dcm::geometry::point, dcm::geometry::plane) || - isCombination(g1,g2, dcm::geometry::point, dcm::geometry::cylinder) || - isCombination(g1,g2, dcm::geometry::line, dcm::geometry::plane) || - isCombination(g1,g2, dcm::geometry::line, dcm::geometry::cylinder) || - isCombination(g1,g2, dcm::geometry::plane, dcm::geometry::plane) || - isCombination(g1,g2, dcm::geometry::plane, dcm::geometry::cylinder)) { - ui->bidirectional->setEnabled(true); - ui->pos_direction->setEnabled(true); - ui->neg_direction->setEnabled(true); - }; + // if(isCombination(g1,g2, dcm::geometry::point, dcm::geometry::plane) || + // isCombination(g1,g2, dcm::geometry::point, dcm::geometry::cylinder) || + // isCombination(g1,g2, dcm::geometry::line, dcm::geometry::plane) || + // isCombination(g1,g2, dcm::geometry::line, dcm::geometry::cylinder) || + // isCombination(g1,g2, dcm::geometry::plane, dcm::geometry::plane) || + // isCombination(g1,g2, dcm::geometry::plane, dcm::geometry::cylinder)) { + // ui->bidirectional->setEnabled(true); + // ui->pos_direction->setEnabled(true); + // ui->neg_direction->setEnabled(true); + // }; - if(isCombination(g1,g2, dcm::geometry::line, dcm::geometry::cylinder) || - isCombination(g1,g2, dcm::geometry::plane, dcm::geometry::plane) || - isCombination(g1,g2, dcm::geometry::line, dcm::geometry::cylinder) || - isCombination(g1,g2, dcm::geometry::cylinder, dcm::geometry::cylinder)) { - ui->parallel->setEnabled(true); - ui->equal->setEnabled(true); - ui->opposite->setEnabled(true); + // if(isCombination(g1,g2, dcm::geometry::line, dcm::geometry::cylinder) || + // isCombination(g1,g2, dcm::geometry::plane, dcm::geometry::plane) || + // isCombination(g1,g2, dcm::geometry::line, dcm::geometry::cylinder) || + // isCombination(g1,g2, dcm::geometry::cylinder, dcm::geometry::cylinder)) { + // ui->parallel->setEnabled(true); + // ui->equal->setEnabled(true); + // ui->opposite->setEnabled(true); - //ensure that perpendicular is not checked - if(ui->perpendicular->isChecked()) { - ui->parallel->setChecked(true); - obj->Orientation.setValue((long)0); - } - }; + // //ensure that perpendicular is not checked + // if(ui->perpendicular->isChecked()) { + // ui->parallel->setChecked(true); + // obj->Orientation.setValue((long)0); + // } + // }; - if(isCombination(g1,g2, dcm::geometry::line, dcm::geometry::plane) || - isCombination(g1,g2, dcm::geometry::plane, dcm::geometry::cylinder)) { - ui->perpendicular->setEnabled(true); + // if(isCombination(g1,g2, dcm::geometry::line, dcm::geometry::plane) || + // isCombination(g1,g2, dcm::geometry::plane, dcm::geometry::cylinder)) { + // ui->perpendicular->setEnabled(true); - //ensure that perpendicular is checked - if(!ui->perpendicular->isChecked()) { - ui->perpendicular->setChecked(true); - obj->Orientation.setValue((long)3); - } - }; - }; + // //ensure that perpendicular is checked + // if(!ui->perpendicular->isChecked()) { + // ui->perpendicular->setChecked(true); + // obj->Orientation.setValue((long)3); + // } + // }; + // }; - //orientation - if(obj->Type.getValue() == 2) { - ui->parallel->setEnabled(true); - ui->equal->setEnabled(true); - ui->opposite->setEnabled(true); - ui->perpendicular->setEnabled(true); - } + // //orientation + // if(obj->Type.getValue() == 2) { + // ui->parallel->setEnabled(true); + // ui->equal->setEnabled(true); + // ui->opposite->setEnabled(true); + // ui->perpendicular->setEnabled(true); + // } - } - } + // } + //} }; void TaskAssemblyConstraints::setPossibleConstraints() { - //diasble all constraints for easyer enabling - ui->fix->setEnabled(false); - ui->distance->setEnabled(false); - ui->orientation->setEnabled(false); - ui->angle->setEnabled(false); - ui->align->setEnabled(false); - ui->coincident->setEnabled(false); + ////diasble all constraints for easyer enabling + //ui->fix->setEnabled(false); + //ui->distance->setEnabled(false); + //ui->orientation->setEnabled(false); + //ui->angle->setEnabled(false); + //ui->align->setEnabled(false); + //ui->coincident->setEnabled(false); - Assembly::Constraint* obj = dynamic_cast(view->getObject()); + //Assembly::Constraint* obj = dynamic_cast(view->getObject()); - if(obj->First.getValue()) { + //if(obj->First.getValue()) { - Assembly::PartRef* p1 = dynamic_cast(obj->First.getValue()); + // Assembly::PartRef* p1 = dynamic_cast(obj->First.getValue()); - if(!p1) - return; + // if(!p1) + // return; - Assembly::Product* ass = p1->getParentAssembly(); + // Assembly::Product* ass = p1->getParentAssembly(); - //extract the geometries to use for comparison - boost::shared_ptr g1 = ass->m_solver->getGeometry3D(obj->First.getSubValues()[0].c_str()); + // //extract the geometries to use for comparison + // boost::shared_ptr g1 = ass->m_solver->getGeometry3D(obj->First.getSubValues()[0].c_str()); - //let's see if we have a part, if not give feedback to the user by color - if(!g1) { - QPalette palette = ui->widget->palette(); - palette.setColor(ui->first_geom->backgroundRole(), QColor(255, 0, 0, 127)); - ui->first_geom->setPalette(palette); - } - else { - //set normal color as we ma need to revert the red background - ui->first_geom->setPalette(ui->widget->palette()); - } + // //let's see if we have a part, if not give feedback to the user by color + // if(!g1) { + // QPalette palette = ui->widget->palette(); + // palette.setColor(ui->first_geom->backgroundRole(), QColor(255, 0, 0, 127)); + // ui->first_geom->setPalette(palette); + // } + // else { + // //set normal color as we ma need to revert the red background + // ui->first_geom->setPalette(ui->widget->palette()); + // } - if(obj->Second.getValue()) { + // if(obj->Second.getValue()) { - Assembly::PartRef* p2 = dynamic_cast(obj->Second.getValue()); + // Assembly::PartRef* p2 = dynamic_cast(obj->Second.getValue()); - if(!p2) - return; + // if(!p2) + // return; - boost::shared_ptr g2 = ass->m_solver->getGeometry3D(obj->Second.getSubValues()[0].c_str()); + // boost::shared_ptr g2 = ass->m_solver->getGeometry3D(obj->Second.getSubValues()[0].c_str()); - //let's see if we have a part, if not give feedback to the user by color - if(!g2) { - QPalette palette = ui->widget->palette(); - palette.setColor(ui->second_geom->backgroundRole(), QColor(255, 0, 0, 127)); - ui->second_geom->setPalette(palette); - } - else { - //set normal color as we ma need to revert the red background - ui->second_geom->setPalette(ui->widget->palette()); - } + // //let's see if we have a part, if not give feedback to the user by color + // if(!g2) { + // QPalette palette = ui->widget->palette(); + // palette.setColor(ui->second_geom->backgroundRole(), QColor(255, 0, 0, 127)); + // ui->second_geom->setPalette(palette); + // } + // else { + // //set normal color as we ma need to revert the red background + // ui->second_geom->setPalette(ui->widget->palette()); + // } - //return only here to allow coloring both line edits red if needed - if(!g1 || !g2) - return; + // //return only here to allow coloring both line edits red if needed + // if(!g1 || !g2) + // return; - //check all valid combinaions - if(isCombination(g1,g2, dcm::geometry::point, dcm::geometry::point)) { - ui->distance->setEnabled(true); - ui->coincident->setEnabled(true); - }; + // //check all valid combinaions + // if(isCombination(g1,g2, dcm::geometry::point, dcm::geometry::point)) { + // ui->distance->setEnabled(true); + // ui->coincident->setEnabled(true); + // }; - if(isCombination(g1,g2, dcm::geometry::point, dcm::geometry::line)) { - ui->distance->setEnabled(true); - ui->coincident->setEnabled(true); - }; + // if(isCombination(g1,g2, dcm::geometry::point, dcm::geometry::line)) { + // ui->distance->setEnabled(true); + // ui->coincident->setEnabled(true); + // }; - if(isCombination(g1,g2, dcm::geometry::point, dcm::geometry::plane)) { - ui->distance->setEnabled(true); - ui->coincident->setEnabled(true); - }; + // if(isCombination(g1,g2, dcm::geometry::point, dcm::geometry::plane)) { + // ui->distance->setEnabled(true); + // ui->coincident->setEnabled(true); + // }; - if(isCombination(g1,g2, dcm::geometry::point, dcm::geometry::cylinder)) { - ui->distance->setEnabled(true); - ui->coincident->setEnabled(true); - }; + // if(isCombination(g1,g2, dcm::geometry::point, dcm::geometry::cylinder)) { + // ui->distance->setEnabled(true); + // ui->coincident->setEnabled(true); + // }; - if(isCombination(g1,g2, dcm::geometry::line, dcm::geometry::line)) { - ui->distance->setEnabled(true); - ui->orientation->setEnabled(true); - ui->angle->setEnabled(true); - ui->coincident->setEnabled(true); - ui->align->setEnabled(true); - }; + // if(isCombination(g1,g2, dcm::geometry::line, dcm::geometry::line)) { + // ui->distance->setEnabled(true); + // ui->orientation->setEnabled(true); + // ui->angle->setEnabled(true); + // ui->coincident->setEnabled(true); + // ui->align->setEnabled(true); + // }; - if(isCombination(g1,g2, dcm::geometry::line, dcm::geometry::plane)) { - ui->orientation->setEnabled(true); - ui->angle->setEnabled(true); - ui->coincident->setEnabled(true); - ui->align->setEnabled(true); - }; + // if(isCombination(g1,g2, dcm::geometry::line, dcm::geometry::plane)) { + // ui->orientation->setEnabled(true); + // ui->angle->setEnabled(true); + // ui->coincident->setEnabled(true); + // ui->align->setEnabled(true); + // }; - if(isCombination(g1,g2, dcm::geometry::line, dcm::geometry::cylinder)) { - ui->distance->setEnabled(true); - ui->orientation->setEnabled(true); - ui->angle->setEnabled(true); - ui->coincident->setEnabled(true); - ui->align->setEnabled(true); - }; + // if(isCombination(g1,g2, dcm::geometry::line, dcm::geometry::cylinder)) { + // ui->distance->setEnabled(true); + // ui->orientation->setEnabled(true); + // ui->angle->setEnabled(true); + // ui->coincident->setEnabled(true); + // ui->align->setEnabled(true); + // }; - if(isCombination(g1,g2, dcm::geometry::plane, dcm::geometry::plane)) { - ui->orientation->setEnabled(true); - ui->angle->setEnabled(true); - ui->coincident->setEnabled(true); - ui->align->setEnabled(true); - }; + // if(isCombination(g1,g2, dcm::geometry::plane, dcm::geometry::plane)) { + // ui->orientation->setEnabled(true); + // ui->angle->setEnabled(true); + // ui->coincident->setEnabled(true); + // ui->align->setEnabled(true); + // }; - if(isCombination(g1,g2, dcm::geometry::plane, dcm::geometry::cylinder)) { - ui->orientation->setEnabled(true); - ui->angle->setEnabled(true); - ui->align->setEnabled(true); - }; + // if(isCombination(g1,g2, dcm::geometry::plane, dcm::geometry::cylinder)) { + // ui->orientation->setEnabled(true); + // ui->angle->setEnabled(true); + // ui->align->setEnabled(true); + // }; - if(isCombination(g1,g2, dcm::geometry::cylinder, dcm::geometry::cylinder)) { - ui->coincident->setEnabled(true); - ui->orientation->setEnabled(true); - ui->angle->setEnabled(true); - }; - } - else { - //return here to allow check for second geometry and color both red if needed - if(!g1) - return; + // if(isCombination(g1,g2, dcm::geometry::cylinder, dcm::geometry::cylinder)) { + // ui->coincident->setEnabled(true); + // ui->orientation->setEnabled(true); + // ui->angle->setEnabled(true); + // }; + // } + // else { + // //return here to allow check for second geometry and color both red if needed + // if(!g1) + // return; - //only fix works - ui->fix->setEnabled(true); - }; - } + // //only fix works + // ui->fix->setEnabled(true); + // }; + //} } bool TaskAssemblyConstraints::isCombination(boost::shared_ptr g1, boost::shared_ptr g2, dcm::geometry::types t1, dcm::geometry::types t2) diff --git a/src/Mod/Assembly/Gui/ViewProviderConstraint.cpp b/src/Mod/Assembly/Gui/ViewProviderConstraint.cpp index be8704355..3a611369f 100644 --- a/src/Mod/Assembly/Gui/ViewProviderConstraint.cpp +++ b/src/Mod/Assembly/Gui/ViewProviderConstraint.cpp @@ -22,8 +22,8 @@ #include "PreCompiled.h" #include "ViewProviderConstraint.h" -#include "TaskAssemblyConstraints.h" -#include "TaskDlgAssemblyConstraints.h" +//#include "TaskAssemblyConstraints.h" +//#include "TaskDlgAssemblyConstraints.h" #include "Mod/Assembly/App/Constraint.h" #include "Mod/Assembly/App/PartRef.h" #include @@ -273,7 +273,7 @@ void ViewProviderConstraint::draw() TopLoc_Location l1 = s1.Location(); gp_XYZ tr1 = l1.Transformation().TranslationPart(); Base::Placement p1(Base::Vector3d(tr1.X(), tr1.Y(), tr1.Z()), Base::Rotation()); - upstream_placement(p1, part1); + // upstream_placement(p1, part1); //p1 = part1->m_part->getGlobal() * p1; float q0 = (float)p1.getRotation().getValue()[0]; @@ -307,7 +307,7 @@ void ViewProviderConstraint::draw() TopLoc_Location l2 = s2.Location(); gp_XYZ tr2 = l2.Transformation().TranslationPart(); Base::Placement p2(Base::Vector3d(tr2.X(), tr2.Y(), tr2.Z()), Base::Rotation()); - upstream_placement(p2, part2); + //upstream_placement(p2, part2); p2 = p1.inverse()*p2; //p2 = p1.inverse() * (part2->m_part->getGlobal() * p2); @@ -353,58 +353,59 @@ void ViewProviderConstraint::onSelectionChanged(const Gui::SelectionChanges& msg TopoDS_Shape ViewProviderConstraint::getConstraintShape(int link) { - if(link == 1) { - //subshape of first link - //********************** - App::DocumentObject* obj1 = dynamic_cast(pcObject)->First.getValue(); + //if(link == 1) { + // //subshape of first link + // //********************** + // App::DocumentObject* obj1 = dynamic_cast(pcObject)->First.getValue(); - if(!obj1) - return TopoDS_Shape(); + // if(!obj1) + // return TopoDS_Shape(); - Assembly::PartRef* part1 = static_cast(obj1); + // Assembly::PartRef* part1 = static_cast(obj1); - if(!part1) - return TopoDS_Shape(); + // if(!part1) + // return TopoDS_Shape(); - Part::TopoShape ts; - App::DocumentObject* feature1 = part1->Model.getValue(); + // Part::TopoShape ts; + // App::DocumentObject* feature1 = part1->Model.getValue(); - if(feature1->getTypeId().isDerivedFrom(Part::Feature::getClassTypeId())) { - ts = static_cast(feature1)->Shape.getShape(); - } - else - return TopoDS_Shape(); + // if(feature1->getTypeId().isDerivedFrom(Part::Feature::getClassTypeId())) { + // ts = static_cast(feature1)->Shape.getShape(); + // } + // else + // return TopoDS_Shape(); - TopoDS_Shape s1 = ts.getSubShape(dynamic_cast(pcObject)->First.getSubValues()[0].c_str()); + // TopoDS_Shape s1 = ts.getSubShape(dynamic_cast(pcObject)->First.getSubValues()[0].c_str()); - return s1; - } - else { - //subshape of second link - //********************** - App::DocumentObject* obj2 = dynamic_cast(pcObject)->Second.getValue(); + // return s1; + //} + //else { + // //subshape of second link + // //********************** + // App::DocumentObject* obj2 = dynamic_cast(pcObject)->Second.getValue(); - if(!obj2) - return TopoDS_Shape(); + // if(!obj2) + // return TopoDS_Shape(); - Assembly::PartRef* part2 = static_cast(obj2); + // Assembly::PartRef* part2 = static_cast(obj2); - if(!part2) - return TopoDS_Shape(); + // if(!part2) + // return TopoDS_Shape(); - Part::TopoShape ts2; - App::DocumentObject* feature2 = part2->Model.getValue(); + // Part::TopoShape ts2; + // App::DocumentObject* feature2 = part2->Model.getValue(); - if(feature2->getTypeId().isDerivedFrom(Part::Feature::getClassTypeId())) { - ts2 = static_cast(feature2)->Shape.getShape(); - } - else - return TopoDS_Shape(); + // if(feature2->getTypeId().isDerivedFrom(Part::Feature::getClassTypeId())) { + // ts2 = static_cast(feature2)->Shape.getShape(); + // } + // else + // return TopoDS_Shape(); - TopoDS_Shape s2 = ts2.getSubShape(dynamic_cast(pcObject)->Second.getSubValues()[0].c_str()); + // TopoDS_Shape s2 = ts2.getSubShape(dynamic_cast(pcObject)->Second.getSubValues()[0].c_str()); - return s2; - }; + // return s2; + //}; + return TopoDS_Shape(); } void ViewProviderConstraint::setupContextMenu(QMenu* menu, QObject* receiver, const char* member) @@ -415,24 +416,25 @@ void ViewProviderConstraint::setupContextMenu(QMenu* menu, QObject* receiver, co bool ViewProviderConstraint::setEdit(int ModNum) { - // When double-clicking on the item for this sketch the - // object unsets and sets its edit mode without closing - // the task panel - Gui::TaskView::TaskDialog* dlg = Gui::Control().activeDialog(); - TaskDlgAssemblyConstraints* ConstraintsDlg = qobject_cast(dlg); + //// When double-clicking on the item for this sketch the + //// object unsets and sets its edit mode without closing + //// the task panel + //Gui::TaskView::TaskDialog* dlg = Gui::Control().activeDialog(); + //TaskDlgAssemblyConstraints* ConstraintsDlg = qobject_cast(dlg); - // start the edit dialog - if(ConstraintsDlg) - Gui::Control().showDialog(ConstraintsDlg); - else - Gui::Control().showDialog(new TaskDlgAssemblyConstraints(this)); + //// start the edit dialog + //if(ConstraintsDlg) + // Gui::Control().showDialog(ConstraintsDlg); + //else + // Gui::Control().showDialog(new TaskDlgAssemblyConstraints(this)); - //show the constraint geometries - internal_vp.switch_node(true); - pcModeSwitch->whichChild = 0; - draw(); + ////show the constraint geometries + //internal_vp.switch_node(true); + //pcModeSwitch->whichChild = 0; + //draw(); - return true; + //return true; + return false; } void ViewProviderConstraint::unsetEdit(int ModNum) diff --git a/src/Mod/Assembly/Gui/ViewProviderProduct.cpp b/src/Mod/Assembly/Gui/ViewProviderProduct.cpp index 5f71b75e9..7b7a8217d 100644 --- a/src/Mod/Assembly/Gui/ViewProviderProduct.cpp +++ b/src/Mod/Assembly/Gui/ViewProviderProduct.cpp @@ -95,9 +95,6 @@ std::vector ViewProviderProduct::getDisplayModes(void) const std::vector ViewProviderProduct::claimChildren(void)const { std::vector temp(static_cast(getObject())->Items.getValues()); - temp.insert(temp.end(), - static_cast(getObject())->Annotations.getValues().begin(), - static_cast(getObject())->Annotations.getValues().end()); return temp; } @@ -113,28 +110,29 @@ void ViewProviderProduct::setupContextMenu(QMenu* menu, QObject* receiver, const { ViewProviderItem::setupContextMenu(menu, receiver, member); // call the base class - QAction* toggle = menu->addAction(QObject::tr("Rigid subassembly"), receiver, member); - toggle->setData(QVariant(1000)); // identifier - toggle->setCheckable(true); - toggle->setToolTip(QObject::tr("Set if the subassembly shall be solved as on part (rigid) or if all parts of this assembly are solved for themselfe.")); - toggle->setStatusTip(QObject::tr("Set if the subassembly shall be solved as on part (rigid) or if all parts of this assembly are solved for themself.")); - bool prop = static_cast(getObject())->Rigid.getValue(); - toggle->setChecked(prop); + //QAction* toggle = menu->addAction(QObject::tr("Rigid subassembly"), receiver, member); + //toggle->setData(QVariant(1000)); // identifier + //toggle->setCheckable(true); + //toggle->setToolTip(QObject::tr("Set if the subassembly shall be solved as on part (rigid) or if all parts of this assembly are solved for themselfe.")); + //toggle->setStatusTip(QObject::tr("Set if the subassembly shall be solved as on part (rigid) or if all parts of this assembly are solved for themself.")); + //bool prop = static_cast(getObject())->Rigid.getValue(); + //toggle->setChecked(prop); } bool ViewProviderProduct::setEdit(int ModNum) { - if(ModNum == 1000) { // identifier - Gui::Command::openCommand("Change subassembly solving behaviour"); - if(!static_cast(getObject())->Rigid.getValue()) - Gui::Command::doCommand(Gui::Command::Doc,"FreeCAD.getDocument(\"%s\").getObject(\"%s\").Rigid = True",getObject()->getDocument()->getName(), getObject()->getNameInDocument()); - else - Gui::Command::doCommand(Gui::Command::Doc,"FreeCAD.getDocument(\"%s\").getObject(\"%s\").Rigid = False",getObject()->getDocument()->getName(), getObject()->getNameInDocument()); + //if(ModNum == 1000) { // identifier + // Gui::Command::openCommand("Change subassembly solving behaviour"); + // if(!static_cast(getObject())->Rigid.getValue()) + // Gui::Command::doCommand(Gui::Command::Doc,"FreeCAD.getDocument(\"%s\").getObject(\"%s\").Rigid = True",getObject()->getDocument()->getName(), getObject()->getNameInDocument()); + // else + // Gui::Command::doCommand(Gui::Command::Doc,"FreeCAD.getDocument(\"%s\").getObject(\"%s\").Rigid = False",getObject()->getDocument()->getName(), getObject()->getNameInDocument()); - Gui::Command::commitCommand(); - return false; - } - return ViewProviderItem::setEdit(ModNum); // call the base class + // Gui::Command::commitCommand(); + // return false; + //} + //return ViewProviderItem::setEdit(ModNum); // call the base class + return false; } bool ViewProviderProduct::allowDrop(const std::vector &objList,Qt::KeyboardModifiers keys,Qt::MouseButtons mouseBts,const QPoint &pos) diff --git a/src/Mod/Assembly/Gui/ViewProviderProductRef.cpp b/src/Mod/Assembly/Gui/ViewProviderProductRef.cpp index 4bd787523..ccc2bd2d1 100644 --- a/src/Mod/Assembly/Gui/ViewProviderProductRef.cpp +++ b/src/Mod/Assembly/Gui/ViewProviderProductRef.cpp @@ -93,47 +93,41 @@ std::vector ViewProviderProductRef::getDisplayModes(void) const std::vector ViewProviderProductRef::claimChildren(void)const { - std::vector temp(static_cast(getObject())->Items.getValues()); - temp.insert(temp.end(), - static_cast(getObject())->Annotations.getValues().begin(), - static_cast(getObject())->Annotations.getValues().end()); - - return temp; + return (static_cast(getObject())->Items.getValues()); } std::vector ViewProviderProductRef::claimChildren3D(void)const { - return static_cast(getObject())->Items.getValues(); - } void ViewProviderProductRef::setupContextMenu(QMenu* menu, QObject* receiver, const char* member) { ViewProviderItem::setupContextMenu(menu, receiver, member); // call the base class - QAction* toggle = menu->addAction(QObject::tr("Rigid subassembly"), receiver, member); - toggle->setData(QVariant(1000)); // identifier - toggle->setCheckable(true); - toggle->setToolTip(QObject::tr("Set if the subassembly shall be solved as on part (rigid) or if all parts of this assembly are solved for themselfe.")); - toggle->setStatusTip(QObject::tr("Set if the subassembly shall be solved as on part (rigid) or if all parts of this assembly are solved for themself.")); - bool prop = static_cast(getObject())->Rigid.getValue(); - toggle->setChecked(prop); + //QAction* toggle = menu->addAction(QObject::tr("Rigid subassembly"), receiver, member); + //toggle->setData(QVariant(1000)); // identifier + //toggle->setCheckable(true); + //toggle->setToolTip(QObject::tr("Set if the subassembly shall be solved as on part (rigid) or if all parts of this assembly are solved for themselfe.")); + //toggle->setStatusTip(QObject::tr("Set if the subassembly shall be solved as on part (rigid) or if all parts of this assembly are solved for themself.")); + //bool prop = static_cast(getObject())->Rigid.getValue(); + //toggle->setChecked(prop); } bool ViewProviderProductRef::setEdit(int ModNum) { - if(ModNum == 1000) { // identifier - Gui::Command::openCommand("Change subassembly solving behaviour"); - if(!static_cast(getObject())->Rigid.getValue()) - Gui::Command::doCommand(Gui::Command::Doc,"FreeCAD.getDocument(\"%s\").getObject(\"%s\").Rigid = True",getObject()->getDocument()->getName(), getObject()->getNameInDocument()); - else - Gui::Command::doCommand(Gui::Command::Doc,"FreeCAD.getDocument(\"%s\").getObject(\"%s\").Rigid = False",getObject()->getDocument()->getName(), getObject()->getNameInDocument()); + //if(ModNum == 1000) { // identifier + // Gui::Command::openCommand("Change subassembly solving behaviour"); + // if(!static_cast(getObject())->Rigid.getValue()) + // Gui::Command::doCommand(Gui::Command::Doc,"FreeCAD.getDocument(\"%s\").getObject(\"%s\").Rigid = True",getObject()->getDocument()->getName(), getObject()->getNameInDocument()); + // else + // Gui::Command::doCommand(Gui::Command::Doc,"FreeCAD.getDocument(\"%s\").getObject(\"%s\").Rigid = False",getObject()->getDocument()->getName(), getObject()->getNameInDocument()); - Gui::Command::commitCommand(); - return false; - } - return ViewProviderItem::setEdit(ModNum); // call the base class + // Gui::Command::commitCommand(); + // return false; + //} + //return ViewProviderItem::setEdit(ModNum); // call the base class + return false; } bool ViewProviderProductRef::allowDrop(const std::vector &objList,Qt::KeyboardModifiers keys,Qt::MouseButtons mouseBts,const QPoint &pos) diff --git a/src/Mod/Assembly/Gui/Workbench.cpp b/src/Mod/Assembly/Gui/Workbench.cpp index 7a11ac7ca..eb641e671 100644 --- a/src/Mod/Assembly/Gui/Workbench.cpp +++ b/src/Mod/Assembly/Gui/Workbench.cpp @@ -54,13 +54,13 @@ Gui::ToolBarItem* Workbench::setupToolBars() const Gui::ToolBarItem* root = StdWorkbench::setupToolBars(); Gui::ToolBarItem* part = new Gui::ToolBarItem(root); part->setCommand(QT_TR_NOOP("Assembly")); - *part << "Assembly_Constraint"; - *part << "Assembly_ConstraintFix"; - *part << "Assembly_ConstraintDistance"; - *part << "Assembly_ConstraintOrientation"; - *part << "Assembly_ConstraintAngle"; - *part << "Assembly_ConstraintCoincidence"; - *part << "Assembly_ConstraintAlignment"; + //*part << "Assembly_Constraint"; + //*part << "Assembly_ConstraintFix"; + //*part << "Assembly_ConstraintDistance"; + //*part << "Assembly_ConstraintOrientation"; + //*part << "Assembly_ConstraintAngle"; + //*part << "Assembly_ConstraintCoincidence"; + //*part << "Assembly_ConstraintAlignment"; *part << "Separator"; *part << "Assembly_AddNewPart"; *part << "Assembly_AddNewComponent"; @@ -77,12 +77,14 @@ Gui::MenuItem* Workbench::setupMenuBar() const Gui::MenuItem* asmCmd = new Gui::MenuItem(); root->insertItem(item, asmCmd); asmCmd->setCommand("&Assembly"); - *asmCmd << "Assembly_ConstraintFix" - << "Assembly_ConstraintDistance" - << "Assembly_ConstraintOrientation" - << "Assembly_ConstraintAngle" - << "Assembly_ConstraintCoincidence" - << "Assembly_ConstraintAlignment" + *asmCmd + + //<< "Assembly_ConstraintFix" + // << "Assembly_ConstraintDistance" + // << "Assembly_ConstraintOrientation" + // << "Assembly_ConstraintAngle" + // << "Assembly_ConstraintCoincidence" + // << "Assembly_ConstraintAlignment" << "Separator" << "Assembly_AddNewPart" << "Assembly_AddNewComponent"