public override void Decorate()
    {
        Bend bend = m_Conduit.bend;

        // Get Roll Angle
        float rollAngleDeg = (float)bend.GetOutputParameter(EBendParameterName.RollAngleDegrees).value;
        float riseM        = (float)bend.GetInputParameter(EBendParameterName.Rise).value;
        float rollM        = (float)bend.GetInputParameter(EBendParameterName.Roll).value;
        var   centerline   = m_Conduit.centerline;
        var   indices      = m_Conduit.centerlineBendIndices;

        if (rollAngleDeg == 0f || indices.Count == 0 || bend.alert != null)
        {
            // Disable Lines
            EnableLines(false);
            return;
        }
        if (!m_LinesEnabled)
        {
            EnableLines(true);
        }

        // Get Points
        //Vector3 csFirst = centerline[ indices[0].index ].point;
        //Vector3 ceSecond = centerline[ indices[3].index ].point;
        Vector3 cEnd = centerline[centerline.Count - 1].point;

        Vector3 origin = Vector3.zero;

        origin.z = cEnd.z;
        Vector3 riseOrigin = origin;

        riseOrigin.y -= m_LineWidth * 0.5f;
        // Generate Circle Sector Mesh
        //ConduitGenerator.GenerateSector( sectorMesh, riseM, rollAngleDeg, 5f );
        m_RiseLine.Draw(riseOrigin, riseOrigin + Vector3.up * riseM);
        m_RollLine.Draw(origin, origin + Vector3.left * rollM);

        // Positions
        //sectorObject.localPosition = origin;
        m_Conduit.transform.rotation = Quaternion.Euler(0f, 0f, rollAngleDeg);
        transform.localRotation      = Quaternion.Euler(0f, 0f, 360f - rollAngleDeg); // Undo Rotation (since we're child of Conduit)
    }
    public override void Decorate()
    {
        Bend bend = m_Conduit.bend;

        // Get Values
        var centerline  = m_Conduit.centerline;
        var bendIndices = m_Conduit.centerlineBendIndices;

        float spacingM   = (float)bend.GetInputParameter(EBendParameterName.Spacing).value;
        float spreadM    = (float)bend.GetOutputParameter(EBendParameterName.KickSpread).value;
        float shiftM     = (float)bend.GetOutputParameter(EBendParameterName.Shift).value;
        float travelM    = (float)bend.GetOutputParameter(EBendParameterName.KickTravel).value;
        float firstMarkM = (float)bend.GetOutputParameter(EBendParameterName.KickFirstMark).value;

        // Get Start and End Centerline Indices
        int     cs90_i   = bendIndices[2].index;
        int     ce90_i   = bendIndices[3].index;
        int     csKick_i = bendIndices[0].index;
        int     ceKick_i = bendIndices[1].index;
        Vector3 cs90     = centerline[cs90_i].point;

        // Have the Bends Changed?
        float angleDeg = (float)bend.inputParameters[0].value;

        // Re-Copy Split Mesh
        ConduitGenerator.CopyLastConduitPartial(bendKickMesh, 0, ceKick_i);
        // OPT: We Don't need to Re-Copy the 90 every time, we could just rotate a Clone as needed
        ConduitGenerator.CopyLastConduitPartial(bend90Mesh, ceKick_i, centerline.Count - 1);

        // Record Start Position of Kick
        bend90Adjust  = cs90;
        bend90Forward = centerline[cs90_i].forwardDir;

        lastAngleDeg = angleDeg;

        //----------------
        // Set Positions
        //----------------
        // Space & Slide Conduit
        Vector3 conduitOrig = m_Conduit.transform.localPosition;

        conduitOrig.y = spacingM;
        m_Conduit.transform.localPosition = conduitOrig;

        // Slide & Shift Parallel Conduit
        float   partialShift = (spacingM * Mathf.Tan(angleDeg * Mathf.Deg2Rad * 0.5f));
        Vector3 parallelOrig = conduitOrig;

        parallelOrig.y          = -spacingM;
        parallelOrig.z          = partialShift; // a 'part' of the total ShiftM
        transform.localPosition = parallelOrig;

        // Shift Parallel 90
        m_P90Conduit.transform.localPosition = (cs90 - bend90Adjust) + bend90Forward * (shiftM);

        //----------------
        // Draw Lines
        //----------------
        Vector3 startSpread = centerline[ce90_i].point;

        startSpread.y += Engine.conduitDiameterM * 0.5f;
        Vector3 endSpread      = startSpread + m_Conduit.transform.forward * spreadM;
        Vector3 startShift     = centerline[ceKick_i].point;
        Vector3 endShift       = centerline[ceKick_i].point + shiftM * bend90Forward;
        Vector3 startTravel    = centerline[csKick_i].point;
        Vector3 startFirstMark = centerline[ceKick_i].point + centerline[ceKick_i].radialDir * m_Conduit.conduitDiameterM;

        m_SpreadLine.Draw(startSpread, endSpread);
        m_ShiftLine.Draw(startShift, endShift);
        m_FirstMarkLine.Draw(startFirstMark, startFirstMark + centerline[ceKick_i].forwardDir * firstMarkM);
        m_TravelLine.Draw(startTravel, startTravel + centerline[csKick_i].forwardDir * travelM);
    }