def isValidShape(self): if self._coefficient < 0: _err( translate('Rocket', "For %s transitions the coefficient must be >= 0") % self._type) return False return super().isValidShape()
def isValidShape(self): if self._coefficient <= 0 or self._coefficient > 1: _err( translate( 'Rocket', "For %s transitions the coefficient must be in the range (0 < coefficient <= 1)" ) % self._type) return False return super().isValidShape()
def handleEndTag(self, tag, content): _tag = tag.lower().strip() if _tag == "version": if content.strip() not in self._supportedVersions: _err("unsupported version '%s'" % content) # throw exception return else: super().handleEndTag(tag, content)
def _zInVertex(self, z, vertexes, tolerance): if len(vertexes) != 2: _err( translate('Rocket', "Unable to handle shapes other than lines")) return False return self._pointOnLine(z, vertexes[0].Point.z - tolerance, vertexes[1].Point.z + tolerance) or \ self._pointOnLine(z, vertexes[1].Point.z - tolerance, vertexes[0].Point.z + tolerance)
def _sweepLengthFromAngle(self, value): theta = _toFloat(value) if theta <= -90.0 or theta >= 90.0: _err("Sweep angle must be greater than -90 and less than +90") return theta = math.radians(-1.0 * (theta + 90.0)) length = self._finForm.heightInput.property( "quantity").Value / math.tan(theta) self._finForm.sweepLengthInput.setText("%f" % length) self._obj.SweepLength = length
def draw(self): if not self.isValidShape(): return try: self._obj.Shape = self._drawGuide() self._obj.Placement = self._placement except (ZeroDivisionError, Part.OCCError): _err( translate('Rocket', "Rail Guide parameters produce an invalid shape")) return
def draw(self): if not self.isValidShape(): return try: if self._railButtonType == RAIL_BUTTON_AIRFOIL: self._obj.Shape = self._drawAirfoil() else: self._obj.Shape = self._drawButton() self._obj.Placement = self._placement except (ZeroDivisionError, Part.OCCError): _err( translate('Rocket', "Rail button parameters produce an invalid shape")) return
def end(self): if self._tag.lower() == "bodytube": obj = BodyTube() elif self._tag.lower() == "tubecoupler": obj = Coupler() elif self._tag.lower() == "engineblock": obj = EngineBlock() elif self._tag.lower() == "launchlug": obj = LaunchLug() elif self._tag.lower() == "centeringring": obj = CenteringRing() else: _err("Unable to close body tube object for %s" % self._tag) return super().end() self.setValues(obj) self.validate(obj) self.persist(obj, self._connection) return super().end()
def validate(self): super().validate() if self._noseType not in [ TYPE_CONE.lower(), TYPE_ELLIPTICAL.lower(), TYPE_HAACK.lower(), TYPE_OGIVE.lower(), TYPE_VON_KARMAN.lower(), TYPE_PARABOLA.lower(), TYPE_PARABOLIC.lower(), TYPE_POWER.lower() ]: _err("NoseCone: Shape is invalid '%s'" % self._noseType) return False self.validatePositive(self._outsideDiameter[0], "Outside Diameter invalid") self.validateNonNegative(self._shoulderDiameter[0], "Shoulder Diameter invalid") self.validateNonNegative(self._shoulderLength[0], "Shoulder Length invalid") self.validatePositive(self._length[0], "Length invalid") if not self._filled: self.validatePositive(self._thickness[0], "Thickness invalid") self.validateNonEmptyString( self._outsideDiameter[1], "Outside Diameter Units invalid '%s" % self._outsideDiameter[1]) self.validateNonEmptyString( self._shoulderDiameter[1], "Shoulder Diameter Units invalid '%s" % self._shoulderDiameter[1]) self.validateNonEmptyString( self._shoulderLength[1], "Shoulder Length Units invalid '%s" % self._shoulderLength[1]) self.validateNonEmptyString( self._length[1], "Length Units invalid '%s" % self._length[1]) if not self._filled: self.validateNonEmptyString( self._thickness[1], "Thickness Units invalid '%s" % self._thickness[1])
def draw(self): if not self.isValidShape(): return edges = None try: edges = self._drawTubeEdges() except (ZeroDivisionError, Part.OCCError): _err( translate('Rocket', "Body tube parameters produce an invalid shape")) return if edges is not None: try: wire = Part.Wire(edges) face = Part.Face(wire) self._obj.Shape = face.revolve(FreeCAD.Vector(0, 0, 0), FreeCAD.Vector(1, 0, 0), 360) self._obj.Placement = self._placement except Part.OCCError: _err( translate('Rocket', "Body tube parameters produce an invalid shape")) return else: _err( translate('Rocket', "Body tube parameters produce an invalid shape"))
def draw(self): if not self.isValidShape(): return self._debugShape = False edges = None try: if self._style == STYLE_SOLID: if self._shoulder: edges = self._drawSolidShoulder() else: edges = self._drawSolid() elif self._style == STYLE_SOLID_CORE: if self._shoulder: edges = self._drawSolidShoulderCore() else: edges = self._drawSolidCore() elif self._style == STYLE_HOLLOW: if self._shoulder: edges = self._drawHollowShoulder() else: edges = self._drawHollow() else: if self._shoulder: edges = self._drawCappedShoulder() else: edges = self._drawCapped() except (ValueError, ZeroDivisionError, Part.OCCError) as ex: if self._debugShape: raise ex _err( translate('Rocket', "Transition parameters produce an invalid shape")) return if edges is not None: try: if self._debugShape: for edge in edges: Part.show(edge) wire = Part.Wire(edges) face = Part.Face(wire) self._obj.Shape = face.revolve(FreeCAD.Vector(0, 0, 0), FreeCAD.Vector(1, 0, 0), 360) self._obj.Placement = self._placement except Part.OCCError as ex: if self._debugShape: raise ex _err( translate( 'Rocket', "Transition parameters produce an invalid shape")) return else: _err( translate('Rocket', "Transition parameters produce an invalid shape"))
def draw(self): if not self.isValidShape(): return try: profiles = self._makeProfiles() if profiles is not None and len(profiles) > 0: if isinstance(profiles[0], list): # Using a compound instead of a fuse makes drawing much faster, but also leads to # a number of 'BOPAlgo SelfIntersect' errors. Se we stick with the fuse loft = None for profile in profiles: if loft is None: loft = Part.makeLoft(profile, True) else: loft = loft.fuse(Part.makeLoft(profile, True)) else: loft = Part.makeLoft(profiles, True) if loft is not None: mask = self._makeCommon() if mask is not None: loft = loft.common(mask) if self._obj.Ttw: ttw = self._makeTtw() if ttw: loft = loft.fuse(ttw) self._obj.Shape = loft self._obj.Placement = self._placement except (ZeroDivisionError, Part.OCCError): _err(translate('Rocket', "Fin parameters produce an invalid shape")) return
def isValidShape(self): # Add error checking here if self._obj.Ttw: if self._obj.TtwOffset >= self._obj.RootChord: _err( translate('Rocket', "Ttw offset must be less than the root chord")) return False if self._obj.TtwLength <= 0: _err(translate('Rocket', "Ttw length must be greater than 0")) return False if self._obj.TtwHeight <= 0: _err(translate('Rocket', "Ttw height must be greater than 0")) return False if self._obj.TtwThickness <= 0: _err( translate('Rocket', "Ttw thickness must be greater than 0")) return False return True
def verifyShape(self, shape): if shape is None: _err(translate('Rocket', "shape is empty")) return False if issubclass(type(shape), Part.Compound): _err(translate('Rocket', "Compound objects not supported")) return False # Verify the shape creates a closed face face = Part.Face(shape.Wires) if not face.isValid(): _err(translate('Rocket', "Sketch must create a valid face")) return False return True
def draw(self): if not self.isValidShape(): return edges = None try: if self._style == STYLE_SOLID: if self._shoulder: edges = self.drawSolidShoulder() else: edges = self.drawSolid() elif self._style == STYLE_HOLLOW: if self._shoulder: edges = self.drawHollowShoulder() else: edges = self.drawHollow() else: if self._shoulder: edges = self.drawCappedShoulder() else: edges = self.drawCapped() except (ZeroDivisionError, Part.OCCError): _err( translate('Rocket', "Nose cone parameters produce an invalid shape")) return if edges is not None: try: wire = Part.Wire(edges) face = Part.Face(wire) self._obj.Shape = face.revolve(FreeCAD.Vector(0, 0, 0), FreeCAD.Vector(1, 0, 0), 360) self._obj.Placement = self._placement except Part.OCCError: _err( translate('Rocket', "Nose cone parameters produce an invalid shape")) return else: _err( translate('Rocket', "Nose cone parameters produce an invalid shape"))
def isValidShape(self): # Perform some general validations if self._ID < 0: _err( translate( 'Rocket', "Body tube inner diameter must be greater than zero")) return False if self._OD <= self._ID: _err( translate( 'Rocket', "Body tube outer diameter must be greater than the inner")) return False if self._length < 0: _err( translate('Rocket', "Body tube length must be greater than zero")) return False return True
def isValidShape(self): # Perform some general validations if self._middleWidth <= 0: _err(translate('Rocket', "Middle width must be greater than zero")) return False if self._topWidth <= self._middleWidth: _err( translate('Rocket', "Top width must be greater than the middle width")) return False if self._baseWidth <= self._middleWidth: _err( translate('Rocket', "Base width must be greater than the middle width")) return False if self._topThickness <= 0: _err(translate('Rocket', "Top thickness must be greater than zero")) return False if self._baseThickness <= 0: _err( translate('Rocket', "Base thickness must be greater than zero")) return False if self._thickness <= (self._topThickness + self._baseThickness): _err( translate( 'Rocket', "Total thickness must be greater than the sum of top and base thickness" )) return False if self._length <= 0: _err(translate('Rocket', "Length must be greater than zero")) return False if self._forwardSweep: if (self._forwardSweepAngle <= 0.0) or (self._forwardSweepAngle >= 90.0): _err( translate( 'Rocket', "Forward sweep angle must be greater than 0 degrees and less than 90 degrees" )) return False if self._aftSweep: if (self._aftSweepAngle <= 0.0) or (self._aftSweepAngle >= 90.0): _err( translate( 'Rocket', "Aft sweep angle must be greater than 0 degrees and less than 90 degrees" )) return False if self._notch: if self._notchWidth <= 0: _err( translate('Rocket', "Notch width must be greater than zero")) return False if self._notchWidth >= self._middleWidth: _err( translate('Rocket', "Notch width can not exceed the middle width")) return False if self._notchDepth <= 0: _err( translate('Rocket', "Notch depth must be greater than zero")) return False if self._notchDepth >= self._thickness: _err( translate( 'Rocket', "Notch depth can not exceed the total thickness")) return False return True
def isValidShape(self): if not super().isValidShape(): return # Perform some general validations if self._centerDiameter <= 0: _err( translate( 'Rocket', "Centering ring center diameter must be greater than zero") ) return False if self._centerDiameter >= self._diameter: _err( translate( 'Rocket', "Centering ring center diameter must be less than the outer diameter" )) return False if self._step: if self._centerDiameter >= self._stepDiameter: _err( translate( 'Rocket', "Centering ring center diameter must be less than the step diameter" )) return False if self._notched: if self._notchWidth > self._centerDiameter: _err( translate( 'Rocket', "The notch width must be less than or equal to the center diameter" )) return False if self._notchWidth <= 0: _err( translate('Rocket', "The notch width must be greater than zero")) return False if self._notchHeight <= 0: _err( translate('Rocket', "The notch height must be greater than zero")) return False if self._holes: if self._holeCenter - (self._holeDiameter / 2.0) <= ( self._centerDiameter / 2.0): _err( translate('Rocket', "Hole extends inside the center diameter")) return False return True
def isValidShape(self): # Perform some general validations if self._diameter <= 0: _err( translate('Rocket', "Outer diameter must be greater than zero")) return False if self._step: if self._stepDiameter <= 0: _err( translate('Rocket', "Step diameter must be greater than zero")) return False if self._stepDiameter >= self._diameter: _err( translate( 'Rocket', "Step diameter must less than the outer diameter")) return False if self._holes: if self._holeDiameter <= 0: _err( translate('Rocket', "Hole diameter must be greater than zero")) return False if self._holeCenter + (self._holeDiameter / 2.0) >= ( self._diameter / 2.0): _err( translate('Rocket', "Hole extends outside the outer diameter")) return False if self._step: if self._holeCenter + (self._holeDiameter / 2.0) >= ( self._stepDiameter / 2.0): _err( translate('Rocket', "Hole extends outside the step diameter")) return False return True
def isValidShape(self): # Perform some general validations if self._outerDiameter <= 0: _err( translate('Rocket', "Outer diameter must be greater than zero")) return False if self._innerDiameter <= 0: _err( translate('Rocket', "Inner diameter must be greater than zero")) return False if self._outerDiameter <= self._innerDiameter: _err( translate( 'Rocket', "Outer diameter must be greater than the inner diameter")) return False if self._topThickness <= 0: _err(translate('Rocket', "Top thickness must be greater than zero")) return False if self._baseThickness <= 0: _err( translate('Rocket', "Base thickness must be greater than zero")) return False if self._thickness <= 0: _err(translate('Rocket', "Thickness must be greater than zero")) return False if self._thickness <= (self._topThickness + self._baseThickness): _err( translate( 'Rocket', "Top and base thickness can not excedd the total thickness" )) return False if self._railButtonType == RAIL_BUTTON_AIRFOIL: if self._length <= 0: _err( translate( 'Rocket', "Length must be greater than zero for airfoil rail buttons" )) return False if self._length <= self._outerDiameter: _err( translate( 'Rocket', "Length must be greater than the outer diameter for airfoil rail buttons" )) return False return True
def isValidShape(self): # Perform some general validations if self._style in [STYLE_HOLLOW, STYLE_CAPPED]: if self._thickness <= 0: _err( translate('Rocket', "For %s nose cones thickness must be > 0") % self._style) return False if self._thickness >= self._radius: _err( translate( 'Rocket', "Nose cones thickness must be less than the nose cone radius" )) return False if self._shoulder: if self._shoulderLength <= 0: _err(translate('Rocket', "Shoulder length must be > 0")) return False if self._shoulderRadius <= 0: _err(translate('Rocket', "Shoulder diameter must be > 0")) return False if self._shoulderRadius > self._radius: _err( translate( 'Rocket', "Shoulder diameter can not exceed the nose cone diameter" )) return False if self._style in [STYLE_HOLLOW, STYLE_CAPPED]: if self._shoulderThickness <= 0: _err( translate( 'Rocket', "For %s nose cones with a shoulder, shoulder thickness must be > 0" ) % self._style) return False if self._shoulderThickness >= self._shoulderRadius: _err( translate( 'Rocket', "Shoulder thickness must be less than the shoulder radius" )) return False return True
def execute(self, obj): _err("No execute method defined for %s" % (self.__class__.__name__))
def isValidShape(self): #Perform some general validations if self._style in [STYLE_HOLLOW, STYLE_CAPPED]: if self._thickness <= 0: _err( translate('Rocket', "For %s transitions thickness must be > 0") % self._style) return False if self._thickness >= self._foreRadius or self._thickness >= self._aftRadius: _err( translate( 'Rocket', "Transition thickness must be less than the front or back radius" )) return False elif self._style == STYLE_SOLID_CORE: if self._coreRadius >= self._foreRadius or self._coreRadius >= self._aftRadius: _err( translate( 'Rocket', "Transition core must be less than the front or back diameter" )) return False if self._foreShoulder: if self._coreRadius >= self._foreShoulderRadius: _err( translate( 'Rocket', "Transition core must be less than the shoulder diameter" )) return False if self._aftShoulder: if self._coreRadius >= self._aftShoulderRadius: _err( translate( 'Rocket', "Transition core must be less than the shoulder diameter" )) return False if self._foreShoulder: if self._foreShoulderLength <= 0: _err(translate('Rocket', "Forward shoulder length must be > 0")) return False if self._foreShoulderRadius <= 0: _err( translate('Rocket', "Forward shoulder diameter must be > 0")) return False if self._foreShoulderRadius > self._foreRadius: _err( translate( 'Rocket', "Forward shoulder diameter can not exceed the transition diameter at the shoulder" )) return False if self._style in [STYLE_HOLLOW, STYLE_CAPPED]: if self._foreShoulderThickness <= 0: _err( translate( 'Rocket', "For %s transitions with a shoulder, shoulder thickness must be > 0" ) % self._style) return False if self._foreShoulderThickness >= self._foreShoulderRadius: _err( translate( 'Rocket', "Shoulder thickness must be less than the shoulder radius" )) return False if self._aftShoulder: if self._aftShoulderLength <= 0: _err(translate('Rocket', "Aft shoulder length must be > 0")) return False if self._aftShoulderRadius <= 0: _err(translate('Rocket', "Aft shoulder diameter must be > 0")) return False if self._aftShoulderRadius > self._aftRadius: _err( translate( 'Rocket', "Aft shoulder diameter can not exceed the transition diameter at the shoulder" )) return False if self._style in [STYLE_HOLLOW, STYLE_CAPPED]: if self._aftShoulderThickness <= 0: _err( translate( 'Rocket', "For %s transitions with a shoulder, shoulder thickness must be > 0" ) % self._style) return False if self._aftShoulderThickness >= self._aftShoulderRadius: _err( translate( 'Rocket', "Shoulder thickness must be less than the shoulder radius" )) return False return True