The most basic features of PADL allow the user to build their own Assets using any of the available Primitives, i.e. Box, Cone, Sphere, etc. The user can then configure the Asset to be driven by one or more Physical Attributes allowing the Asset to be sized and orientated as required. A simple example is the Flange which consists of one Cylinder and one Cone.

 

The PADL Definition for the Flange needs to define two things:

  1. How to use the Physical Attributes (Position, Direction, Diameter, Thickness, Weld, Neck Diameter, Weld Diameter) to calculate the properties of the Cylinder and Cone (shown in blue)
  2. How to use the properties of the Cylinder and the Cone and to calculate the Physical Attributes (shown in yellow).

One example of how this works would be the “Flange Diameter” as it has quite a simple relationship with the Cylinder’s Radius. Basically the “Flange Diameter” is defined as twice the Cylinder’s Radius and the Cylinder’s Radius is defined as half of the “Flange Diameter”.

PADL is a powerful tool and this example has barely skimmed the surface but hopefully served as a good introduction.

<PAD>

  <Attributes>

    <AttributeName="Position"Type="Position"Default="0,0,0">

      <Definition>C1.Position - (C1.Direction * (C1.Length / 2))</Definition>

      <Definition>CF1.Position - (CF1.Direction * (C1.Length))</Definition>

    </Attribute>

    <AttributeName="Direction"Type="Direction"Default="1,0,0">

      <Definition>C1.Direction</Definition>

      <Definition>CF1.Direction</Definition>

    </Attribute>

    <AttributeName="Orientation"Type="Orientation"Default="0,0,1">

      <Definition>C1.Orientation</Definition>

    </Attribute>

    <AttributeName="FlangeThickness"Type="Dimension"Default="25"ScalableAxes="X">

      <Definition>C1.Length</Definition>

    </Attribute>

    <AttributeName="FlangeDiameter"Type="Diameter"Default="100"ScalableAxes="YZ">

      <Definition>C1.Radius * 2</Definition>

    </Attribute>

    <AttributeName="WeldThickness"Type="Dimension"Default="25"ScalableAxes="X">

      <Definition>CF1.Height</Definition>

    </Attribute>

    <AttributeName="NeckDiameter"Type="Diameter"Default="75"ScalableAxes="YZ">

      <Definition>CF1.BaseRadius * 2</Definition>

    </Attribute>

    <AttributeName="PipeDiameter"Type="Diameter"Default="50"ScalableAxes="YZ">

      <Definition>CF1.TopRadius * 2</Definition>

    </Attribute>

  </Attributes>

  <Primitives>

    <PrimitiveName="C1"Type="Cylinder">

      <PropertyName="Position">Position + (Direction * (FlangeThickness / 2))</Property>

      <PropertyName="Direction">Direction</Property>

      <PropertyName="Orientation">Orientation</Property>

      <PropertyName="Length">FlangeThickness</Property>

      <PropertyName="Radius">FlangeDiameter / 2</Property>

    </Primitive>

    <PrimitiveName="CF1"Type="ConeFrustrum">

      <PropertyName="Position">Position + (Direction * FlangeThickness)</Property>

      <PropertyName="Direction">Direction</Property>

      <PropertyName="Height">WeldThickness</Property>

      <PropertyName="BaseRadius">NeckDiameter / 2</Property>

      <PropertyName="TopRadius">PipeDiameter / 2</Property>

    </Primitive>

  </Primitives>

</PAD>