parameters: (shape)
return_statement: return [App.Placement(mat),
              round(vx.Length, precision()),
              round(vy.Length, precision()),
              round(vz.Length, precision())]
docstring: Return a list containing the placement, and dimensions of the shape.
  
      The dimensios are length, width and height of a the parallelepiped,
      rounded to the value indicated by `precision`.
      The placement point is the lowest corner of the shape.
  
      If it is not a parallelepiped (cuboid), return None.
docstring_summary: Return a list containing the placement, and dimensions of the shape.
docstring_tokens: Return a list containing the placement and dimensions of the shape .
function: def getCubicDimensions(shape):
      """Return a list containing the placement, and dimensions of the shape.
  
      The dimensios are length, width and height of a the parallelepiped,
      rounded to the value indicated by `precision`.
      The placement point is the lowest corner of the shape.
  
      If it is not a parallelepiped (cuboid), return None.
      """
      if not isCubic(shape):
          return None
  
      # determine lowest face, which will be our base
      z = [10, 1000000000000]
      for i in range(len(shape.Faces)):
          if shape.Faces[i].CenterOfMass.z < z[1]:
              z = [i, shape.Faces[i].CenterOfMass.z]
  
      if z[0] > 5:
          return None
  
      base = shape.Faces[z[0]]
      basepoint = base.Edges[0].Vertexes[0].Point
      plpoint = base.CenterOfMass
      # basenorm = base.normalAt(0.5, 0.5)
  
      # getting length and width
      vx = vec(base.Edges[0])
      vy = vec(base.Edges[1])
      if round(vx.Length) == round(vy.Length):
          vy = vec(base.Edges[2])
  
      # getting rotations
      rotZ = DraftVecUtils.angle(vx)
      rotY = DraftVecUtils.angle(vx, App.Vector(vx.x, vx.y, 0))
      rotX = DraftVecUtils.angle(vy, App.Vector(vy.x, vy.y, 0))
  
      # getting height
      vz = None
      rpi = round(math.pi/2, precision())
      for i in range(1, 6):
          for e in shape.Faces[i].Edges:
              if basepoint in [e.Vertexes[0].Point, e.Vertexes[1].Point]:
                  vtemp = vec(e)
                  # print(vtemp)
                  if round(vtemp.getAngle(vx), precision()) == rpi:
                      if round(vtemp.getAngle(vy), precision()) == rpi:
                          vz = vtemp
  
      if not vz:
          return None
  
      mat = App.Matrix()
      mat.move(plpoint)
      mat.rotateX(rotX)
      mat.rotateY(rotY)
      mat.rotateZ(rotZ)
  
      return [App.Placement(mat),
              round(vx.Length, precision()),
              round(vy.Length, precision()),
              round(vz.Length, precision())]
function_tokens: def getCubicDimensions ( shape ) : if not isCubic ( shape ) : return None # determine lowest face, which will be our base z = [ 10 , 1000000000000 ] for i in range ( len ( shape . Faces ) ) : if shape . Faces [ i ] . CenterOfMass . z < z [ 1 ] : z = [ i , shape . Faces [ i ] . CenterOfMass . z ] if z [ 0 ] > 5 : return None base = shape . Faces [ z [ 0 ] ] basepoint = base . Edges [ 0 ] . Vertexes [ 0 ] . Point plpoint = base . CenterOfMass # basenorm = base.normalAt(0.5, 0.5) # getting length and width vx = vec ( base . Edges [ 0 ] ) vy = vec ( base . Edges [ 1 ] ) if round ( vx . Length ) == round ( vy . Length ) : vy = vec ( base . Edges [ 2 ] ) # getting rotations rotZ = DraftVecUtils . angle ( vx ) rotY = DraftVecUtils . angle ( vx , App . Vector ( vx . x , vx . y , 0 ) ) rotX = DraftVecUtils . angle ( vy , App . Vector ( vy . x , vy . y , 0 ) ) # getting height vz = None rpi = round ( math . pi / 2 , precision ( ) ) for i in range ( 1 , 6 ) : for e in shape . Faces [ i ] . Edges : if basepoint in [ e . Vertexes [ 0 ] . Point , e . Vertexes [ 1 ] . Point ] : vtemp = vec ( e ) # print(vtemp) if round ( vtemp . getAngle ( vx ) , precision ( ) ) == rpi : if round ( vtemp . getAngle ( vy ) , precision ( ) ) == rpi : vz = vtemp if not vz : return None mat = App . Matrix ( ) mat . move ( plpoint ) mat . rotateX ( rotX ) mat . rotateY ( rotY ) mat . rotateZ ( rotZ ) return [ App . Placement ( mat ) , round ( vx . Length , precision ( ) ) , round ( vy . Length , precision ( ) ) , round ( vz . Length , precision ( ) ) ]