basic infrastructure
This commit is contained in:
committed by
Stefan Tröger
parent
395557b096
commit
d50f7f1787
@@ -1,7 +1,8 @@
|
||||
/***************************************************************************
|
||||
* Copyright (c) 2012 Juergen Riegel <FreeCAD@juergen-riegel.net> *
|
||||
* Copyright (c) 2013 Stefan Tröger <stefantroeger@gmx.net> *
|
||||
* *
|
||||
* This file is part of the FreeCAD CAx development system. *
|
||||
* This file is part of the FreeCAD CAx development m_solvertem. *
|
||||
* *
|
||||
* This library is free software; you can redistribute it and/or *
|
||||
* modify it under the terms of the GNU Library General Public *
|
||||
@@ -25,9 +26,28 @@
|
||||
#ifndef _PreComp_
|
||||
#endif
|
||||
|
||||
#include <Standard_Failure.hxx>
|
||||
#include <TopTools_IndexedMapOfShape.hxx>
|
||||
#include <TopExp.hxx>
|
||||
#include <TopoDS.hxx>
|
||||
#include <GeomAbs_SurfaceType.hxx>
|
||||
#include <gp_Pln.hxx>
|
||||
#include <GeomAbs_CurveType.hxx>
|
||||
#include <BRep_Tool.hxx>
|
||||
#include <TopoDS_Vertex.hxx>
|
||||
#include <gp_Pnt.hxx>
|
||||
#include <BRepAdaptor_Curve.hxx>
|
||||
#include <TopoDS_Edge.hxx>
|
||||
#include <gp_Cylinder.hxx>
|
||||
#include <BRepAdaptor_Surface.hxx>
|
||||
#include <TopoDS_Face.hxx>
|
||||
|
||||
#include <Base/Placement.h>
|
||||
#include <Base/Console.h>
|
||||
|
||||
#include "Constraint.h"
|
||||
#include "Item.h"
|
||||
#include "ItemPart.h"
|
||||
|
||||
|
||||
using namespace Assembly;
|
||||
@@ -57,4 +77,37 @@ App::DocumentObjectExecReturn *Constraint::execute(void)
|
||||
return App::DocumentObject::StdReturn;
|
||||
}
|
||||
|
||||
void Constraint::init(boost::shared_ptr< Solver > solver) {
|
||||
|
||||
//check if we have Assembly::ItemPart's
|
||||
if( First.getValue()->getTypeId() != ItemPart::getClassTypeId() ||
|
||||
Second.getValue()->getTypeId() != ItemPart::getClassTypeId() ) {
|
||||
Base::Console().Message("Links are not ItemPart's, the constraint is invalid\n");
|
||||
return;
|
||||
};
|
||||
|
||||
//see if the parts are already initialized for the solver
|
||||
Assembly::ItemPart* part1 = static_cast<Assembly::ItemPart*>(First.getValue());
|
||||
if(!part1->m_part) {
|
||||
part1->m_part = solver->createPart(part1->Placement.getValue(), part1->Uid.getValueStr());
|
||||
part1->m_part->connectSignal<dcm::recalculated>(boost::bind(&ItemPart::setCalculatedPlacement, part1, _1));
|
||||
}
|
||||
|
||||
Assembly::ItemPart* part2 = static_cast<Assembly::ItemPart*>(Second.getValue());
|
||||
if(!part2->m_part) {
|
||||
part2->m_part = solver->createPart(part2->Placement.getValue(), part2->Uid.getValueStr());
|
||||
part2->m_part->connectSignal<dcm::recalculated>(boost::bind(&ItemPart::setCalculatedPlacement, part2, _1));
|
||||
}
|
||||
|
||||
//let's get the geometrys
|
||||
m_first_geom = part1->getGeometry3D(First.getSubValues()[0].c_str());
|
||||
m_second_geom = part2->getGeometry3D(Second.getSubValues()[0].c_str());
|
||||
|
||||
if(!m_first_geom || !m_second_geom) {
|
||||
Base::Console().Message("Unable to initialize geometry\n");
|
||||
return;
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user