#include <GeomAlgoAPI_Prism.h>
+#include <GeomAPI_Dir.h>
+#include <GeomAPI_Edge.h>
+#include <GeomAPI_Lin.h>
+
//=================================================================================================
FeaturesPlugin_Extrusion::FeaturesPlugin_Extrusion()
{
{
theMakeShapes.clear();
- /// Sub-feature of the composite should be set in the base list.
- setSketchObjectToList();
-
// Getting base shapes.
getBaseShapes(theBaseShapes);
+ //Getting direction.
+ std::shared_ptr<GeomAPI_Dir> aDir;
+ std::shared_ptr<GeomAPI_Edge> anEdge;
+ AttributeSelectionPtr aSelection = selection(DIRECTION_OBJECT_ID());
+ if(aSelection.get() && aSelection->value().get() && aSelection->value()->isEdge()) {
+ anEdge = std::shared_ptr<GeomAPI_Edge>(new GeomAPI_Edge(aSelection->value()));
+ } else if(aSelection->context().get() &&
+ aSelection->context()->shape().get() &&
+ aSelection->context()->shape()->isEdge()) {
+ anEdge = std::shared_ptr<GeomAPI_Edge>(new GeomAPI_Edge(aSelection->context()->shape()));
+ }
+ if(anEdge.get()) {
+ if(anEdge->isLine()) {
+ aDir = anEdge->line()->direction();
+ }
+ }
+
// Getting sizes.
double aToSize = 0.0;
double aFromSize = 0.0;
GeomShapePtr aFromShape;
if(string(CREATION_METHOD())->value() == "ByPlanesAndOffsets") {
- AttributeSelectionPtr aSelection = selection(TO_OBJECT_ID());
+ aSelection = selection(TO_OBJECT_ID());
if(aSelection.get()) {
aToShape = std::dynamic_pointer_cast<GeomAPI_Shape>(aSelection->value());
if(!aToShape.get() && aSelection->context().get()) {
for(ListOfShape::const_iterator anIter = theBaseShapes.cbegin(); anIter != theBaseShapes.cend(); anIter++) {
std::shared_ptr<GeomAPI_Shape> aBaseShape = *anIter;
- std::shared_ptr<GeomAlgoAPI_Prism> aPrismAlgo(new GeomAlgoAPI_Prism(aBaseShape,
+ std::shared_ptr<GeomAlgoAPI_Prism> aPrismAlgo(new GeomAlgoAPI_Prism(aBaseShape, aDir,
aToShape, aToSize,
aFromShape, aFromSize));
if(!isMakeShapeValid(aPrismAlgo)) {