| | |
| | |
| |
|
| | |
| | |
| | |
| |
|
| | |
| | |
| |
|
| | import FreeCAD as App |
| | import Part |
| |
|
| | translate = App.Qt.translate |
| |
|
| |
|
| | def roundVector(v, dec): |
| | return str([round(v[0], dec), round(v[1], dec), round(v[2], dec)]) |
| |
|
| |
|
| | def buildShapeContent(objArg, decimals=2, advancedShapeContent=True): |
| | linkName = "" |
| | if objArg.isDerivedFrom("App::Link"): |
| | linkName = "<" + objArg.Name + "> " |
| |
|
| | obj = objArg |
| | shp = Part.getShape(objArg) |
| | typeStr = str(shp.ShapeType) |
| | lbl = "" if obj.Name == obj.Label else " (" + obj.Label + ")" |
| | result = linkName + obj.Name + lbl + "\n" |
| | result += translate("TaskCheckGeometryResults", "Shape type") + ": " + typeStr + "\n" |
| | result += ( |
| | translate("TaskCheckGeometryResults", "Vertices") + ": " + str(len(shp.Vertexes)) + "\n" |
| | ) |
| | result += translate("TaskCheckGeometryResults", "Edges") + ": " + str(len(shp.Edges)) + "\n" |
| | result += translate("TaskCheckGeometryResults", "Wires") + ": " + str(len(shp.Wires)) + "\n" |
| | result += translate("TaskCheckGeometryResults", "Faces") + ": " + str(len(shp.Faces)) + "\n" |
| | result += translate("TaskCheckGeometryResults", "Shells") + ": " + str(len(shp.Shells)) + "\n" |
| | result += translate("TaskCheckGeometryResults", "Solids") + ": " + str(len(shp.Solids)) + "\n" |
| | result += ( |
| | translate("TaskCheckGeometryResults", "CompSolids") |
| | + ": " |
| | + str(len(shp.CompSolids)) |
| | + "\n" |
| | ) |
| | result += ( |
| | translate("TaskCheckGeometryResults", "Compounds") + ": " + str(len(shp.Compounds)) + "\n" |
| | ) |
| | result += ( |
| | translate("TaskCheckGeometryResults", "Shapes") |
| | + ": " |
| | + str( |
| | len( |
| | shp.Vertexes |
| | + shp.Edges |
| | + shp.Wires |
| | + shp.Faces |
| | + shp.Shells |
| | + shp.Solids |
| | + shp.CompSolids |
| | + shp.Compounds |
| | ) |
| | ) |
| | + "\n" |
| | ) |
| | if advancedShapeContent: |
| | result += "----------\n" |
| | if ( |
| | hasattr(shp, "Area") |
| | and not "Wire" in typeStr |
| | and not "Edge" in typeStr |
| | and not "Vertex" in typeStr |
| | ): |
| | result += ( |
| | translate("TaskCheckGeometryResults", "Area") |
| | + ": " |
| | + str(round(shp.Area, decimals)) |
| | + "\n" |
| | ) |
| | if ( |
| | hasattr(shp, "Volume") |
| | and not "Wire" in typeStr |
| | and not "Edge" in typeStr |
| | and not "Vertex" in typeStr |
| | and not "Face" in typeStr |
| | ): |
| | result += ( |
| | translate("TaskCheckGeometryResults", "Volume") |
| | + ": " |
| | + str(round(shp.Volume, decimals)) |
| | + "\n" |
| | ) |
| | if hasattr(shp, "Mass"): |
| | result += ( |
| | translate("TaskCheckGeometryResults", "Mass") |
| | + ": " |
| | + str(round(shp.Mass, decimals)) |
| | + "\n" |
| | ) |
| | if hasattr(shp, "Length"): |
| | result += ( |
| | translate("TaskCheckGeometryResults", "Length") |
| | + ": " |
| | + str(round(shp.Length, decimals)) |
| | + "\n" |
| | ) |
| | if hasattr(shp, "Curve") and hasattr(shp.Curve, "Radius"): |
| | result += ( |
| | translate("TaskCheckGeometryResults", "Radius") |
| | + ": " |
| | + str(round(shp.Curve.Radius, decimals)) |
| | + "\n" |
| | ) |
| | if hasattr(shp, "Curve") and hasattr(shp.Curve, "Center"): |
| | result += ( |
| | translate("TaskCheckGeometryResults", "Curve center") |
| | + ": " |
| | + str([round(vv, decimals) for vv in shp.Curve.Center]) |
| | + "\n" |
| | ) |
| | if hasattr(shp, "Curve") and hasattr(shp.Curve, "Continuity"): |
| | result += ( |
| | translate("TaskCheckGeometryResults", "Continuity") |
| | + ": " |
| | + str(shp.Curve.Continuity) |
| | + "\n" |
| | ) |
| | if hasattr(shp, "CenterOfMass"): |
| | result += ( |
| | translate("TaskCheckGeometryResults", "Center of mass") |
| | + ": " |
| | + roundVector(shp.CenterOfMass, decimals) |
| | + "\n" |
| | ) |
| | if hasattr(shp, "normalAt"): |
| | try: |
| | result += ( |
| | "normalAt(0): " + str([round(vv, decimals) for vv in shp.normalAt(0)]) + "\n" |
| | ) |
| | except Exception: |
| | try: |
| | result += ( |
| | "normalAt(0,0): " |
| | + str([round(vv, decimals) for vv in shp.normalAt(0, 0)]) |
| | + "\n" |
| | ) |
| | except Exception: |
| | pass |
| | if hasattr(shp, "isClosed") and ("Wire" in typeStr or "Edge" in typeStr): |
| | result += ( |
| | translate("TaskCheckGeometryResults", "Is closed") |
| | + "? " |
| | + str(shp.isClosed()) |
| | + "\n" |
| | ) |
| | if hasattr(shp, "Orientation"): |
| | result += ( |
| | translate("TaskCheckGeometryResults", "Orientation") |
| | + ": " |
| | + str(shp.Orientation) |
| | + "\n" |
| | ) |
| | if hasattr(shp, "PrincipalProperties"): |
| | props = shp.PrincipalProperties |
| | for p in props: |
| | if isinstance(props[p], App.Vector) or isinstance(props[p], tuple): |
| | result += str(p) + ": " + roundVector(props[p], decimals) + "\n" |
| | else: |
| | result += str(p) + ": " + str(props[p]) + "\n" |
| | if hasattr(obj, "getGlobalPlacement"): |
| | if obj.getGlobalPlacement() != obj.Placement: |
| | rpl = obj.getGlobalPlacement() * obj.Placement.inverse() |
| | rot = rpl.Rotation |
| | if hasattr(shp, "CenterOfMass"): |
| | result += ( |
| | translate("TaskCheckGeometryResults", "Global center of mass") |
| | + ": " |
| | + roundVector(rpl.multVec(shp.CenterOfMass), decimals) |
| | + "\n" |
| | ) |
| | if hasattr(shp, "PrincipalProperties"): |
| | props = shp.PrincipalProperties |
| | for p in props: |
| | if "AxisOfInertia" in p: |
| | result += ( |
| | "Global " |
| | + str(p) |
| | + ": " |
| | + roundVector(rot.multVec(props[p]), decimals) |
| | + "\n" |
| | ) |
| | else: |
| | result += ( |
| | translate("TaskCheckGeometryResults", "Global placement") |
| | + " = " |
| | + translate("TaskCheckGeometryResults", "Placement") |
| | ) |
| | return result |
| |
|