X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FPythonFeaturesPlugin%2FPythonFeaturesPlugin_Box.py;h=d84e3394ff9a0dc97f262ca5ec72b90fcc4a3cae;hb=6f84fd29d85b783864cdbb3ac9fdd6a3ad3cbb7c;hp=4dbf89abc78571f8874950f9d8f18f056cf56cb3;hpb=6f28e05a6892ea3e1f06a0ddad78c5e4dbbbf83b;p=modules%2Fshaper.git diff --git a/src/PythonFeaturesPlugin/PythonFeaturesPlugin_Box.py b/src/PythonFeaturesPlugin/PythonFeaturesPlugin_Box.py index 4dbf89abc..d84e3394f 100644 --- a/src/PythonFeaturesPlugin/PythonFeaturesPlugin_Box.py +++ b/src/PythonFeaturesPlugin/PythonFeaturesPlugin_Box.py @@ -1,10 +1,11 @@ import ModelAPI -import sketch -import extrusion + from SketchResult import SketchResult +import extrusion +import sketch -class PythonFeaturesPlugin_Box(ModelAPI.ModelAPI_Feature): +class PythonFeaturesPlugin_Box(ModelAPI.ModelAPI_CompositeFeature): "Feature to create a box by drawing a sketch and extruding it" @@ -45,45 +46,60 @@ class PythonFeaturesPlugin_Box(ModelAPI.ModelAPI_Feature): def initAttributes(self): # C++ static methods (in example "type()" of the ModelAPI_AttributeDouble # should be called like this: moduleName.ClassName_staticMethod() - self.data().addAttribute(self.WIDTH_ID(), ModelAPI.ModelAPI_AttributeDouble_type()) - self.data().addAttribute(self.LENGTH_ID(), ModelAPI.ModelAPI_AttributeDouble_type()) - self.data().addAttribute(self.HEIGHT_ID(), ModelAPI.ModelAPI_AttributeDouble_type()) - self.data().addAttribute(self.WIDTH_REF_ID(), ModelAPI.ModelAPI_AttributeReference_type()) - self.data().addAttribute(self.LENGTH_REF_ID(), ModelAPI.ModelAPI_AttributeReference_type()) - self.data().addAttribute(self.HEIGHT_REF_ID(), ModelAPI.ModelAPI_AttributeReference_type()) + self.data().addAttribute(self.WIDTH_ID(), ModelAPI.ModelAPI_AttributeDouble_typeId()) + self.data().addAttribute(self.LENGTH_ID(), ModelAPI.ModelAPI_AttributeDouble_typeId()) + self.data().addAttribute(self.HEIGHT_ID(), ModelAPI.ModelAPI_AttributeDouble_typeId()) + self.data().addAttribute(self.WIDTH_REF_ID(), ModelAPI.ModelAPI_AttributeReference_typeId()) + self.data().addAttribute(self.LENGTH_REF_ID(), ModelAPI.ModelAPI_AttributeReference_typeId()) + self.data().addAttribute(self.HEIGHT_REF_ID(), ModelAPI.ModelAPI_AttributeReference_typeId()) aSession = ModelAPI.ModelAPI_Session.get() - aSession.validators().registerNotObligatory(self.getKind(), self.WIDTH_REF_ID()); - aSession.validators().registerNotObligatory(self.getKind(), self.LENGTH_REF_ID()); - aSession.validators().registerNotObligatory(self.getKind(), self.HEIGHT_REF_ID()); + aSession.validators().registerNotObligatory(self.getKind(), self.WIDTH_REF_ID()) + aSession.validators().registerNotObligatory(self.getKind(), self.LENGTH_REF_ID()) + aSession.validators().registerNotObligatory(self.getKind(), self.HEIGHT_REF_ID()) + aSession.validators().registerConcealment(self.getKind(), self.HEIGHT_REF_ID()) + self.mySketch = None # not yet initialized + self.myExtrusion = None # not yet initialized def execute(self): aWidth = self.real(self.WIDTH_ID()).value() aLength = self.real(self.LENGTH_ID()).value() aHeight = self.real(self.HEIGHT_ID()).value() - aWidthFeature = ModelAPI.modelAPI_Feature(self.reference(self.WIDTH_REF_ID()).value()) - aLengthFeature = ModelAPI.modelAPI_Feature(self.reference(self.LENGTH_REF_ID()).value()) - aHeightFeature = ModelAPI.modelAPI_Feature(self.reference(self.HEIGHT_REF_ID()).value()) + aWidthRefValue = self.reference(self.WIDTH_REF_ID()).value() + aLengthRefValue = self.reference(self.LENGTH_REF_ID()).value() + aHeightRefValue = self.reference(self.HEIGHT_REF_ID()).value() aResult = None - if not all((aWidthFeature, aLengthFeature, aLengthFeature)): + if not all((aWidthRefValue, aLengthRefValue, aHeightRefValue)): aResult = extrusion.getBody(self.makeBox(aLength, aWidth, aHeight)) else: + aHeightProxyResult = ModelAPI.modelAPI_Result(aHeightRefValue) + aWidthFeature = ModelAPI.modelAPI_Feature(aWidthRefValue) + aLengthFeature = ModelAPI.modelAPI_Feature(aLengthRefValue) + aHeightResult = ModelAPI.modelAPI_ResultBody(aHeightProxyResult) aWidthFeature.real("ConstraintValue").setValue(aWidth) aLengthFeature.real("ConstraintValue").setValue(aLength) - aHeightFeature.real("extrusion_size").setValue(aHeight) - aResult = extrusion.getBody(aHeightFeature) - self.setResult(aResult) + if aHeightResult is not None: + aHeightFeature = aHeightResult.document().feature(aHeightResult) + aHeightFeature.real("extrusion_size").setValue(aHeight) + aResult = extrusion.getBody(aHeightFeature) + # create a new result with copied shape from extrusion + aResultBody = self.document().createBody(self.data()) + if not aResult is None: + aResultBody.store(aResult.shape()) + self.setResult(aResultBody) + pass def makeBox(self, aWidth, aLength, aHeight): aSession = ModelAPI.ModelAPI_Session.get() aPart = aSession.activeDocument() # Starting the Sketch aSketch = sketch.addTo(aPart) + self.mySketch = sketch sketch.setXOYPlane(aSketch) # Creating the lines - l1 = sketch.addLine(10, 10, 10, 50, aSketch) - l2 = sketch.addLine(10, 50, 60, 60, aSketch) - l3 = sketch.addLine(60, 60, 50, 10, aSketch) - l4 = sketch.addLine(50, 10, 10, 10, aSketch) + l1 = sketch.addLine(10, 10, 10, 60, aSketch) + l2 = sketch.addLine(10, 60, 60, 60, aSketch) + l3 = sketch.addLine(60, 60, 60, 10, aSketch) + l4 = sketch.addLine(60, 10, 10, 10, aSketch) aSketch.execute() # Creating the constraints sketch.makeCoincident(sketch.getEndPoint(l1), sketch.getStartPoint(l2), aSketch) @@ -100,12 +116,32 @@ class PythonFeaturesPlugin_Box(ModelAPI.ModelAPI_Feature): builder = SketchResult(aSketch) # Creating a feature Extrusion aHeightFeature = extrusion.addNew(builder, aHeight, aPart) + self.myExtrusion = aHeightFeature # Store features... self.reference(self.WIDTH_REF_ID()).setValue(aWidthFeature) self.reference(self.LENGTH_REF_ID()).setValue(aLengthFeature) - self.reference(self.HEIGHT_REF_ID()).setValue(aHeightFeature) + self.reference(self.HEIGHT_REF_ID()).setValue(aHeightFeature.firstResult()) return aHeightFeature + def addFeature(self, theID): + pass + + def numberOfSubs(self): + # extrusion and sketch + return 2 + + def subFeature(self, theIndex): + if theIndex = 1: # sketch + return self.mySketch + return self.myExtrusion + + def subFeatureId(self, theIndex): + return 0 + + def isSub(self, theFeature): + if theFeature = self.mySketch or theFeature = self.myExtrusion: + return True + return False # TEST """