void DraftDxfRead::OnReadInsert(const double* point, const double* scale, const char* name, double rotation) { std::cout << "Inserting block " << name << " rotation " << rotation << " pos " << point[0] << "," << point[1] << "," << point[2] << std::endl; for(std::map<std::string,std::vector<Part::TopoShape*> > ::const_iterator i = layers.begin(); i != layers.end(); ++i) { std::string k = i->first; std::string prefix = "BLOCKS "; prefix += name; prefix += " "; if(k.substr(0, prefix.size()) == prefix) { BRep_Builder builder; TopoDS_Compound comp; builder.MakeCompound(comp); std::vector<Part::TopoShape*> v = i->second; for(std::vector<Part::TopoShape*>::const_iterator j = v.begin(); j != v.end(); ++j) { const TopoDS_Shape& sh = (*j)->_Shape; if (!sh.IsNull()) builder.Add(comp, sh); } if (!comp.IsNull()) { Part::TopoShape* pcomp = new Part::TopoShape(comp); Base::Matrix4D mat; mat.scale(scale[0],scale[1],scale[2]); mat.rotZ(rotation); mat.move(point[0],point[1],point[2]); pcomp->transformShape(mat,true); AddObject(pcomp); } } } }
App::DocumentObjectExecReturn *Body::execute(void) { /* Base::Console().Error("Body '%s':\n", getNameInDocument()); App::DocumentObject* tip = Tip.getValue(); Base::Console().Error(" Tip: %s\n", (tip == NULL) ? "None" : tip->getNameInDocument()); std::vector<App::DocumentObject*> model = Model.getValues(); Base::Console().Error(" Model:\n"); for (std::vector<App::DocumentObject*>::const_iterator m = model.begin(); m != model.end(); m++) { if (*m == NULL) continue; Base::Console().Error(" %s", (*m)->getNameInDocument()); if (Body::isSolidFeature(*m)) { App::DocumentObject* baseFeature = static_cast<PartDesign::Feature*>(*m)->BaseFeature.getValue(); Base::Console().Error(", Base: %s\n", baseFeature == NULL ? "None" : baseFeature->getNameInDocument()); } else { Base::Console().Error("\n"); } } */ App::DocumentObject* tip = Tip.getValue(); Part::TopoShape tipShape; if ( tip ) { if ( !tip->getTypeId().isDerivedFrom ( PartDesign::Feature::getClassTypeId() ) && tip != BaseFeature.getValue () ) { return new App::DocumentObjectExecReturn ( "Linked object is not a PartDesign feature" ); } // get the shape of the tip tipShape = static_cast<Part::Feature *>(tip)->Shape.getShape(); if ( tipShape.getShape().IsNull () ) { return new App::DocumentObjectExecReturn ( "Tip shape is empty" ); } // We should hide here the transformation of the baseFeature tipShape.transformShape (tipShape.getTransform(), true ); } else { tipShape = Part::TopoShape(); } Shape.setValue ( tipShape ); return App::DocumentObject::StdReturn; }