ArchComponent.Component Class Reference

Public Member Functions

def applyShape (self, obj, shape, placement, allowinvalid=False, allownosolid=False)
 
def clone (self, obj)
 
def computeAreas (self, obj)
 
def execute (self, obj)
 
def getExtrusionData (self, obj)
 
def getHosts (self, obj)
 
def getMovableChildren (self, obj)
 
def getParentHeight (self, obj)
 
def getSiblings (self, obj)
 
def hideSubobjects (self, obj, prop)
 
def isIdentity (self, placement)
 
def isStandardCase (self, obj)
 
def onBeforeChange (self, obj, prop)
 
def onChanged (self, obj, prop)
 
def onDocumentRestored (self, obj)
 
def processSubShapes (self, obj, base, placement=None)
 
def rebase (self, shape, hint=None)
 
def setProperties (self, obj)
 
def spread (self, obj, shape, placement=None)
 
- Public Member Functions inherited from ArchIFC.IfcProduct
def getIfcSchema (self)
 
- Public Member Functions inherited from ArchIFC.IfcRoot
def addIfcAttribute (self, obj, attribute)
 
def addIfcAttributes (self, ifcTypeSchema, obj)
 
def addIfcAttributeValueExpressions (self, obj, attribute)
 
def getCanonicalisedIfcTypes (self)
 
def getIfcAttributeSchema (self, ifcTypeSchema, name)
 
def getIfcSchema (self)
 
def getIfcTypeSchema (self, IfcType)
 
def getObjIfcComplexAttribute (self, obj, attributeName)
 
def migrateDeprecatedAttributes (self, obj)
 
def onChanged (self, obj, prop)
 
def purgeUnusedIfcAttributesFromPropertiesList (self, ifcTypeSchema, obj)
 
def setObjIfcAttributeValue (self, obj, attributeName, value)
 
def setObjIfcComplexAttributeValue (self, obj, attributeName, value)
 
def setProperties (self, obj)
 
def setupIfcAttributes (self, obj)
 
def setupIfcComplexAttributes (self, obj)
 

Public Attributes

 flatarea
 
 oldPlacement
 
 Subvolume
 
 Type
 

Detailed Description

The Arch Component object.

Acts as a base for all other Arch objects, such as Arch walls and Arch
structures. Its properties and behaviours are common to all Arch objects.

You can learn more about Arch Components, and the purpose of Arch
Components here: https://wiki.freecadweb.org/Arch_Component

Parameters
----------
obj: <App::FeaturePython>
    The object to turn into an Arch Component

Member Function Documentation

◆ applyShape()

def ArchComponent.Component.applyShape (   self,
  obj,
  shape,
  placement,
  allowinvalid = False,
  allownosolid = False 
)
Check the given shape, then assign it to the object.

Check if the shape is valid, isn't null, and if it has volume. Remove
redundant edges from the shape. Spread the shape to the "Axis" with
method .spread().

Set the object's Shape and Placement to the values given, if
successful.

Finally, run .computeAreas() method, to calculate the horizontal and
vertical area of the shape.

Parameters
----------
obj: <App::FeaturePython>
    The component object.
shape: <Part.Shape>
    The shape to check and apply to the object.
placement: <Base.Placement>
    The placement to apply to the object.
allowinvalid: bool, optional
    Whether to allow invalid shapes, or to throw an error.
allownosolid: bool, optional
    Whether to allow non-solid shapes, or to throw an error.

References ArchComponent.Component.computeAreas(), ArchEquipment._Equipment.computeAreas(), ArchRoof._Roof.computeAreas(), ArchSite._Site.computeAreas(), ArchWindow._Window.computeAreas(), Base::Placement.isIdentity(), Base::Rotation.isIdentity(), ArchComponent.Component.isIdentity(), and ArchComponent.Component.spread().

Referenced by ArchStructure.CommandStructuralSystem.Activated(), and ArchTruss.Truss.execute().

◆ clone()

def ArchComponent.Component.clone (   self,
  obj 
)
If the object is a clone, copy the shape.

If the object is a clone according to the "CloneOf" property, copy the
object's shape and several properties relating to shape, such as
"Length" and "Thickness".

Only perform the copy if this object and the object it's a clone of are
of the same type, or if the object has the type "Component" or
"BuildingPart".

Parameters
----------
obj: <App::FeaturePython>
    The component object.

Returns
-------
bool
    True if the copy occurs, False if otherwise.

Referenced by ArchPanel.CommandPanelSheet.Activated(), ArchStructure.CommandStructuralSystem.Activated(), ArchComponent.Component.execute(), ArchCurtainWall.CurtainWall.execute(), ArchTruss.Truss.execute(), Mod.PartDesign.WizardShaft.SegmentFunction.SegmentFunction.integrated(), and PathTests.TestPathHelix.TestPathHelix.test04().

◆ computeAreas()

def ArchComponent.Component.computeAreas (   self,
  obj 
)
Compute the area properties of the object's shape.

Compute the vertical area, horizontal area, and perimeter length of
the object's shape.

The vertical area is the surface area of the faces perpendicular to the
ground.

The horizontal area is the area of the shape, when projected onto a
hyperplane across the XY axes, IE: the area when viewed from a bird's
eye view.

The perimeter length is the length of the outside edges of this bird's
eye view.

Assign these values to the object's "VerticalArea", "HorizontalArea",
and "PerimeterLength" properties.

Parameters
----------
obj: <App::FeaturePython>
    The component object.

Referenced by ArchComponent.Component.applyShape(), ArchSite.Compass.buildCoordinates(), and ArchRoof.makeRoof().

◆ execute()

def ArchComponent.Component.execute (   self,
  obj 
)
Method run when the object is recomputed.

If the object is a clone, just copy the shape it's cloned from.

Process subshapes of the object to add additions, and subtract
subtractions from the object's shape.

Parameters
----------
obj: <App::FeaturePython>
    The component object.

Reimplemented in ArchCurtainWall.CurtainWall, and ArchTruss.Truss.

References Gui::ViewProviderIndex.clone(), zipios::BasicEntry.clone(), zipios::CollectionCollection.clone(), zipios::DirectoryCollection.clone(), zipios::ZipFile.clone(), zipios::ZipLocalEntry.clone(), zipios::ZipCDirEntry.clone(), zipios::FileCollection.clone(), zipios::FileEntry.clone(), Mod.PartDesign.WizardShaft.SegmentFunction.SegmentFunctionSegment.clone(), Mod.PartDesign.WizardShaft.SegmentFunction.SegmentFunction.clone(), ArchComponent.Component.clone(), Part::Geometry.clone(), Part::Geom2dPoint.clone(), Part::Geom2dBezierCurve.clone(), Part::Geom2dBSplineCurve.clone(), Part::Geom2dCircle.clone(), Part::Geom2dArcOfCircle.clone(), Part::Geom2dEllipse.clone(), Part::Geom2dArcOfEllipse.clone(), Part::Geom2dHyperbola.clone(), Part::Geom2dArcOfHyperbola.clone(), Part::Geom2dParabola.clone(), Part::Geom2dArcOfParabola.clone(), Part::Geom2dLine.clone(), Part::Geom2dLineSegment.clone(), Part::Geom2dOffsetCurve.clone(), Part::Geom2dTrimmedCurve.clone(), Sketcher::Constraint.clone(), Sketcher::ExternalGeometryFacade.clone(), Sketcher::GeometryFacade.clone(), TechDraw::CosmeticVertex.clone(), TechDraw::CosmeticEdge.clone(), TechDraw::CenterLine.clone(), TechDraw::GeomFormat.clone(), Part::Geometry2d.clone(), Part::Geom2dConic.clone(), Part::Geom2dArcOfConic.clone(), PathTests.TestPathHelix.TestPathHelix.clone, ArchComponent.Component.processSubShapes(), ArchComponent.Component.spread(), App::FeaturePythonPyT< FeaturePyT >.Type, App::Part.Type, App::PropertyData::PropertySpec.Type, Base::PyObjectBase.Type, Base::Type.Type(), Py::Type.Type(), Gui::SelectionChanges.Type, ArchAxis._Axis.Type, ArchAxisSystem._AxisSystem.Type, ArchBuilding._Building.Type, ArchBuildingPart.BuildingPart.Type, ArchComponent.Component.Type, ArchEquipment._Equipment.Type, ArchFence._Fence.Type, ArchFloor._Floor.Type, ArchFrame._Frame.Type, ArchGrid.ArchGrid.Type, ArchMaterial._ArchMaterialContainer.Type, ArchMaterial._ArchMaterial.Type, ArchMaterial._ArchMultiMaterial.Type, ArchPanel._Panel.Type, ArchPanel.PanelView.Type, ArchPanel.PanelCut.Type, ArchPanel.PanelSheet.Type, ArchPipe._ArchPipe.Type, ArchPipe._ArchPipeConnector.Type, ArchPrecast._Precast.Type, ArchProject._Project.Type, ArchRebar._Rebar.Type, ArchReference.ArchReference.Type, ArchRoof._Roof.Type, ArchSchedule._ArchSchedule.Type, ArchSectionPlane._SectionPlane.Type, ArchSectionPlane._ArchDrawingView.Type, ArchSite._Site.Type, ArchSpace._Space.Type, ArchStairs._Stairs.Type, ArchStructure._Structure.Type, ArchStructure._StructuralSystem.Type, ArchTruss.Truss.Type, ArchWall._Wall.Type, ArchWindow._Window.Type, draftobjects.base.DraftObject.Type, draftobjects.draft_annotation.DraftAnnotation.Type, draftobjects.hatch.Hatch.Type, draftobjects.layer.Layer.Type, draftobjects.layer.LayerContainer.Type, draftobjects.wpproxy.WorkingPlaneProxy.Type, femobjects.constant_vacuumpermittivity.ConstantVacuumPermittivity.Type, femobjects.constraint_bodyheatsource.ConstraintBodyHeatSource.Type, femobjects.constraint_centrif.ConstraintCentrif.Type, femobjects.constraint_electrostaticpotential.ConstraintElectrostaticPotential.Type, femobjects.constraint_flowvelocity.ConstraintFlowVelocity.Type, femobjects.constraint_initialflowvelocity.ConstraintInitialFlowVelocity.Type, femobjects.constraint_sectionprint.ConstraintSectionPrint.Type, femobjects.constraint_selfweight.ConstraintSelfWeight.Type, femobjects.constraint_tie.ConstraintTie.Type, femobjects.element_fluid1D.ElementFluid1D.Type, femobjects.element_geometry1D.ElementGeometry1D.Type, femobjects.element_geometry2D.ElementGeometry2D.Type, femobjects.element_rotation1D.ElementRotation1D.Type, femobjects.material_common.MaterialCommon.Type, femobjects.material_mechanicalnonlinear.MaterialMechanicalNonlinear.Type, femobjects.material_reinforced.MaterialReinforced.Type, femobjects.mesh_boundarylayer.MeshBoundaryLayer.Type, femobjects.mesh_gmsh.MeshGmsh.Type, femobjects.mesh_group.MeshGroup.Type, femobjects.mesh_region.MeshRegion.Type, femobjects.mesh_result.MeshResult.Type, femobjects.result_mechanical.ResultMechanical.Type, femobjects.solver_ccxtools.SolverCcxTools.Type, femsolver.calculix.solver.Proxy.Type, femsolver.elmer.equations.elasticity.Proxy.Type, femsolver.elmer.equations.electricforce.Proxy.Type, femsolver.elmer.equations.electrostatic.Proxy.Type, femsolver.elmer.equations.flow.Proxy.Type, femsolver.elmer.equations.flux.Proxy.Type, femsolver.elmer.equations.heat.Proxy.Type, femsolver.elmer.solver.Proxy.Type, femsolver.mystran.solver.Proxy.Type, femsolver.z88.solver.Proxy.Type, FemGui::FemSelectionGate.Type, Import::FeatureImportIges.Type(), Import::FeatureImportStep.Type(), BOPTools.JoinFeatures.FeatureConnect.Type, BOPTools.JoinFeatures.FeatureEmbed.Type, BOPTools.JoinFeatures.FeatureCutout.Type, BOPTools.SplitFeatures.FeatureBooleanFragments.Type, BOPTools.SplitFeatures.FeatureSlice.Type, BOPTools.SplitFeatures.FeatureXOR.Type, CompoundTools.CompoundFilter._CompoundFilter.Type, JoinFeatures._PartJoinFeature.Type, PartDesign::Boolean.Type, PartDesign::FeatureExtrude.Type, Mod.PartDesign.InvoluteGearFeature._InvoluteGear.Type, Mod.PartDesign.SprocketFeature.Sprocket.Type, Path::Tool.Type, Robot::Waypoint.Type, Sketcher::ConstraintIds.Type, Sketcher::Constraint.Type, SketcherGui::AutoConstraint.Type, Spreadsheet_legacy.Spreadsheet.Type, Spreadsheet_legacy.SpreadsheetController.Type, Spreadsheet_legacy.SpreadsheetPropertyController.Type, TechDraw::DrawProjGroupItem.Type, TechDraw::DrawViewDimension.Type, TechDrawGui::QGCustomBorder.Type, TechDrawGui::QGCustomClip.Type, TechDrawGui::QGCustomImage.Type, TechDrawGui::QGCustomLabel.Type, TechDrawGui::QGCustomRect.Type, TechDrawGui::QGCustomSvg.Type, TechDrawGui::QGCustomText.Type, TechDrawGui::QGDisplayArea.Type, TechDrawGui::QGMarker.Type, TechDrawGui::QGEPath.Type, TechDrawGui::QGIArrow.Type, TechDrawGui::QGICaption.Type, TechDrawGui::QGICenterLine.Type, TechDrawGui::QGICMark.Type, TechDrawGui::QGIDecoration.Type, TechDrawGui::QGIDimLines.Type, TechDrawGui::QGIDrawingTemplate.Type, TechDrawGui::QGIEdge.Type, TechDrawGui::QGIFace.Type, TechDrawGui::QGIGhostHighlight.Type, TechDrawGui::QGIHighlight.Type, TechDrawGui::QGILeaderLine.Type, TechDrawGui::QGIMatting.Type, TechDrawGui::QGIPrimPath.Type, TechDrawGui::QGIProjGroup.Type, TechDrawGui::QGIRichAnno.Type, TechDrawGui::QGISectionLine.Type, TechDrawGui::QGISVGTemplate.Type, TechDrawGui::QGITemplate.Type, TechDrawGui::QGITile.Type, TechDrawGui::QGIVertex.Type, TechDrawGui::QGIView.Type, TechDrawGui::QGIViewAnnotation.Type, TechDrawGui::QGIBalloonLabel.Type, TechDrawGui::QGIViewBalloon.Type, TechDrawGui::QGIViewClip.Type, TechDrawGui::QGIViewCollection.Type, TechDrawGui::QGIDatumLabel.Type, TechDrawGui::QGIViewDimension.Type, TechDrawGui::QGIViewImage.Type, TechDrawGui::QGIViewPart.Type, TechDrawGui::QGIViewSection.Type, TechDrawGui::QGIViewSpreadsheet.Type, TechDrawGui::QGIViewSymbol.Type, TechDrawGui::QGIWeldSymbol.Type, TechDrawGui::QGMText.Type, TechDrawGui::QGTracker.Type, TechDrawGui::TemplateTextField.Type, DocumentObject.DocumentObject.Type(), and DocumentObject.ViewProvider.Type().

Referenced by draftobjects.facebinder.Facebinder.addSubobjects(), PathScripts.PathDressupDogbone.ObjectDressup.boneStateList(), ArchSite.Compass.buildCoordinates(), PathScripts.PathDressupHoldingTags.ObjectTagDressup.generateTags(), ArchPanel.PanelCut.getWires(), ArchSchedule.CommandArchSchedule.IsActive(), Mod.PartDesign.Scripts.DistanceBolt.DistanceBolt.onChanged(), Mod.PartDesign.Scripts.Epitrochoid.Epitrochoid.onChanged(), Mod.PartDesign.Scripts.Parallelepiped.Parallelepiped.onChanged(), Mod.PartDesign.Scripts.Parallelepiped.BoxCylinder.onChanged(), Mod.PartDesign.Scripts.Spring.MySpring.onChanged(), FeaturePython.DistanceBolt.onChanged(), PathScripts.PathStock.StockFromBase.onChanged(), PathScripts.PathStock.StockCreateBox.onChanged(), PathScripts.PathStock.StockCreateCylinder.onChanged(), draftobjects.draftlink.DraftLink.onDocumentRestored(), draftobjects.patharray.PathArray.onDocumentRestored(), and draftobjects.pathtwistedarray.PathTwistedArray.onDocumentRestored().

◆ getExtrusionData()

def ArchComponent.Component.getExtrusionData (   self,
  obj 
)
Get the object's extrusion data.

Recursively scrape the Bases of the object, until a Base that is
derived from a <Part::Extrusion> is found. From there, copy the
extrusion to the (0,0,0) origin.

With this copy, get the <Part.Face> the shape was originally
extruded from, the <Base.Vector> of the extrusion, and the
<Base.Placement> needed to move the copy back to its original
location/orientation. Return this data as a tuple.

If an object derived from a <Part::Multifuse> is encountered, return
this data as a tuple containing lists. The lists will contain the same
data as above, from each of the objects within the multifuse.

Parameters
----------
obj: <App::FeaturePython>
    The component object.

Returns
-------
tuple
    Tuple containing:

    1) The <Part.Face> the object was extruded from.
    2) The <Base.Vector> of the extrusion.
    3) The <Base.Placement> of the extrusion.

References ArchCommands.getExtrusionData(), Base::Placement.isIdentity(), Base::Rotation.isIdentity(), ArchComponent.Component.isIdentity(), and ArchComponent.Component.rebase().

Referenced by ArchStructure.CommandStructuralSystem.Activated(), and ArchWall.areSameWallTypes().

◆ getHosts()

def ArchComponent.Component.getHosts (   self,
  obj 
)
Return the objects that have this one as host,
that is, objects with a "Host" property pointing
at this object, or a "Hosts" property containing
this one.

Returns
-------
list of <Arch._Structure>
    The Arch Structures hosting this component.

◆ getMovableChildren()

def ArchComponent.Component.getMovableChildren (   self,
  obj 
)
Find the component's children set to move with their host.

In this case, children refer to Additions, Subtractions, and objects
linked to this object that refer to it as a host in the "Host" or
"Hosts" properties. Objects are set to move with their host via the
MoveWithHost property.

Parameters
----------
obj: <App::FeaturePython>
    The component object.

Returns
-------
list of <App::FeaturePython>
    List of child objects set to move with their host.

Referenced by ArchComponent.Component.onChanged().

◆ getParentHeight()

def ArchComponent.Component.getParentHeight (   self,
  obj 
)
Get a height value from hosts.

Recursively crawl hosts until a Floor or BuildingPart is found, then
return the value of its Height property.

Parameters
---------
obj: <App::FeaturePython>
    The component object.

Returns
-------
<App::PropertyLength>
    The Height value of the found Floor or BuildingPart.

References ArchComponent.Component.getParentHeight().

Referenced by ArchStructure.CommandStructuralSystem.Activated(), and ArchComponent.Component.getParentHeight().

◆ getSiblings()

def ArchComponent.Component.getSiblings (   self,
  obj 
)
Find objects that have the same Base object, and type.

Look to base object, and find other objects that are based off this
base object. If these objects are the same type, return them.

Parameters
----------
obj: <App::FeaturePython>
    The component object.

Returns
-------
list of <App::FeaturePython>
    List of objects that have the same Base and type as this component.

◆ hideSubobjects()

def ArchComponent.Component.hideSubobjects (   self,
  obj,
  prop 
)
Hides Additions and Subtractions of this Component when that list changes.

Intended to be used in conjunction with the .onChanged() method, to
access the property that has changed.

When an object loses or gains an Addition, this method hides all
Additions.  When it gains or loses a Subtraction, this method hides all
Subtractions.

Does not effect objects of type Window, or clones of Windows.

Parameters
----------
obj: <App::FeaturePython>
    The component object.
prop: string
    The name of the property that has changed.

References ArchComponent.Component.onChanged().

Referenced by ArchStructure.CommandStructuralSystem.Activated().

◆ isIdentity()

def ArchComponent.Component.isIdentity (   self,
  placement 
)
Check if a placement is *almost* zero.

Check if a <Base.Placement>'s displacement from (0,0,0) is almost zero,
and if the angle of its rotation about its axis is almost zero.

Parameters
----------
placement: <Base.Placement>
    The placement to examine.

Returns
-------
bool
    Returns true if angle and displacement are almost zero, false it
    otherwise.

Referenced by ArchComponent.Component.applyShape(), ArchComponent.Component.getExtrusionData(), and ArchComponent.Component.processSubShapes().

◆ isStandardCase()

def ArchComponent.Component.isStandardCase (   self,
  obj 
)
Determine if the component is a standard case of its IFC type.

Not all IFC types have a standard case.

If an object is a standard case or not varies between the different
types. Each type has its own rules to define what is a standard case.

Rotated objects, or objects with Additions or Subtractions are not
standard cases.

All objects whose IfcType is suffixed with the string " Sandard Case"
are automatically a standard case.

Parameters
----------
obj: <App::FeaturePython>
    The component object.

Returns
-------
bool
    Whether the object is a standard case or not.

◆ onBeforeChange()

def ArchComponent.Component.onBeforeChange (   self,
  obj,
  prop 
)
Method called before the object has a property changed.

Specifically, this method is called before the value changes.

If "Placement" has changed, record the old placement, so that
.onChanged() can compare between the old and new placement, and move
its children accordingly.

Parameters
----------
obj: <App::FeaturePython>
    The component object.
prop: string
    The name of the property that has changed.

References ArchComponent.Component.onChanged().

Referenced by ArchWall.areSameWallTypes(), and PathScripts.PathGui.QuantitySpinBox.updateProperty().

◆ onChanged()

def ArchComponent.Component.onChanged (   self,
  obj,
  prop 
)

◆ onDocumentRestored()

◆ processSubShapes()

def ArchComponent.Component.processSubShapes (   self,
  obj,
  base,
  placement = None 
)
Add Additions and Subtractions to a base shape.

If Additions exist, fuse them to the base shape. If no base is
provided, just fuse other additions to the first addition.

If Subtractions exist, cut them from the base shape. Roofs and Windows
are treated uniquely, as they define their own Shape to subtract from
parent shapes using their .getSubVolume() methods.

TODO determine what the purpose of the placement argument is.

Parameters
----------
obj: <App::FeaturePython>
    The component object.
base: <Part.Shape>, optional
    The base shape to add Additions and Subtractions to.
placement: <Base.Placement>, optional
    Prior to adding or subtracting subshapes, the <Base.Placement> of
    the subshapes are multiplied by the inverse of this parameter.

Returns
-------
<Part.Shape>
    The base shape, with the additions and subtractions performed.

References Base::Placement.isIdentity(), Base::Rotation.isIdentity(), ArchComponent.Component.isIdentity(), and ArchWall.mergeShapes().

Referenced by ArchPanel.CommandPanelSheet.Activated(), ArchStructure.CommandStructuralSystem.Activated(), ArchStructure.StructSelectionObserver.addSelection(), ArchComponent.Component.execute(), and ArchTruss.Truss.execute().

◆ rebase()

def ArchComponent.Component.rebase (   self,
  shape,
  hint = None 
)
Copy a shape to the (0,0,0) origin.

Create a copy of a shape, such that its center of mass is in the
(0,0,0) origin.

TODO Determine the way the shape is rotated by this method.

Return the copy of the shape, and the <Base.Placement> needed to move
the copy back to its original location/orientation.

Parameters
----------
shape: <Part.Shape>
    The shape to copy.
hint: <Base.Vector>, optional
    If the angle between the normal vector of the shape, and the hint
    vector is greater than 90 degrees, the normal will be reversed
    before being rotated.

Referenced by ArchStructure.CommandStructuralSystem.Activated(), ArchComponent.Component.getExtrusionData(), and exportIFC.getRepresentation().

◆ setProperties()

◆ spread()

def ArchComponent.Component.spread (   self,
  obj,
  shape,
  placement = None 
)
Copy the object to its Axis's points.

If the object has the "Axis" property assigned, create a copy of the
shape for each point on the object assigned as the "Axis".  Translate
each of these copies equal to the displacement of the points from the
(0,0,0) origin.

If the object's "Axis" is unassigned, return the original shape
unchanged.

Parameters
----------
obj: <App::FeaturePython>
    The component object.
shape: <Part.Shape>
    The shape to copy.
placement:
    Does nothing.

Returns
-------
<Part.Shape>
    The shape, either spread to the axis points, or unchanged.

Referenced by ArchComponent.Component.applyShape(), and ArchComponent.Component.execute().

Member Data Documentation

◆ flatarea

ArchComponent.Component.flatarea

◆ oldPlacement

ArchComponent.Component.oldPlacement

◆ Subvolume

ArchComponent.Component.Subvolume

◆ Type


The documentation for this class was generated from the following file: