Robert,

I did a similar thing last year, but this had a
new twist to it so...

The attached does it, but arbitrary intersection
angles of your real linework will determine what
parameters you want in the bufferer.  I decided
to make square-ended "sausages" from the linework.
Playing with the buffer width also produced some
weird stuff eventually, but that would be because
FME needs some basis on which to declare when the
sausage ends overlap.  Too big a buffer width and
they don't overlap very nicely.

Thanks for the diversion...

Mark


Get the maximum benefit from your FME, FME Objects, or SpatialDirect via our 
Professional Services team.  Visit www.safe.com/services for details. 
Yahoo! Groups Links

<*> To visit your group on the web, go to:
    http://groups.yahoo.com/group/fme/

<*> To unsubscribe from this group, send an email to:
    [EMAIL PROTECTED]

<*> Your use of Yahoo! Groups is subject to:
    http://docs.yahoo.com/info/terms/
 
#! <?xml version="1.0" encoding="iso-8859-1" ?>
#! <WORKSPACE
#
#
#    Commandline to run this workspace:
#
#    fme.exe homers_delight.fmw
#
#
#! GRID_VISIBLE="false"
#! ZOOM_SCALE="100"
#! FME_BUILD_NUM="1630"
#! FFS_ROUTING_DIR=""
#! FFS_ROUTING_DIR_SRC=""
#! ROUTE_FROM_FFS="false"
#! GRID_HEIGHT="50"
#! ROUTE_TO_VIEWER="false"
#! TITLE="Untitled"
#! SHOW_INFO_NODES="true"
#! SHOW_BOOKMARKS="true"
#! VIEW_POSITION="9 0"
#! VIEW_PAGE_BREAKS="false"
#! WORKSPACE_VERSION="1"
#! ROUTE_TO_NULL="false"
#! LOG_FILE=""
#! ROUTE_TO_FFS="false"
#! SHOW_ANNOTATIONS="true"
#! GRID_WIDTH="50"
#! GRID_SNAPTO="false"
#! >
#! <DATASETS>
#! </DATASETS>
#! <DATA_TYPES>
#! </DATA_TYPES>
#! <GEOM_TYPES>
#! </GEOM_TYPES>
#! <FEATURE_TYPES>
#! </FEATURE_TYPES>
#! <COMMENTS>
#! <COMMENT
#! IDENTIFIER="27"
#! COMMENT_VALUE="A bunch of lines|"
#! POSITION="594 -53"
#! ORDER="28"
#! FOLLOW_ANCHOR="true"
#! INFO_NODE="false"
#! ANCHORED_NODE="0"
#! />
#! <COMMENT
#! IDENTIFIER="28"
#! COMMENT_VALUE="Just a &quot;funnel&quot; to |converge them all|"
#! POSITION="690 -245"
#! ORDER="29"
#! FOLLOW_ANCHOR="true"
#! INFO_NODE="false"
#! ANCHORED_NODE="8"
#! />
#! <COMMENT
#! IDENTIFIER="29"
#! COMMENT_VALUE="If there is dirty linework...|"
#! POSITION="594 -1042"
#! ORDER="30"
#! FOLLOW_ANCHOR="true"
#! INFO_NODE="false"
#! ANCHORED_NODE="9"
#! />
#! <COMMENT
#! IDENTIFIER="30"
#! COMMENT_VALUE="Original linework|"
#! POSITION="1558 -32"
#! ORDER="31"
#! FOLLOW_ANCHOR="true"
#! INFO_NODE="false"
#! ANCHORED_NODE="1"
#! />
#! <COMMENT
#! IDENTIFIER="31"
#! COMMENT_VALUE="Intersected linework|"
#! POSITION="1500 -1413"
#! ORDER="32"
#! FOLLOW_ANCHOR="true"
#! INFO_NODE="false"
#! ANCHORED_NODE="10"
#! />
#! <COMMENT
#! IDENTIFIER="32"
#! COMMENT_VALUE="Sausages from lines|"
#! POSITION="2029 -510"
#! ORDER="33"
#! FOLLOW_ANCHOR="true"
#! INFO_NODE="false"
#! ANCHORED_NODE="11"
#! />
#! <COMMENT
#! IDENTIFIER="33"
#! COMMENT_VALUE="Four donuts from sausages|Doh! And a poly|"
#! POSITION="1942 -1038"
#! ORDER="34"
#! FOLLOW_ANCHOR="true"
#! INFO_NODE="false"
#! ANCHORED_NODE="13"
#! />
#! <COMMENT
#! IDENTIFIER="34"
#! COMMENT_VALUE="Buffer width is significant.  Play with it|and watch the wild results in VIS-4||See FME doc&apos;n for |Interpolation Angle and|Buffer Style.|"
#! POSITION="1589 -175"
#! ORDER="35"
#! FOLLOW_ANCHOR="true"
#! INFO_NODE="false"
#! ANCHORED_NODE="7"
#! />
#! <COMMENT
#! IDENTIFIER="35"
#! COMMENT_VALUE="The &quot;sausages&quot; overlap of course|"
#! POSITION="1247 -1111"
#! ORDER="36"
#! FOLLOW_ANCHOR="true"
#! INFO_NODE="false"
#! ANCHORED_NODE="12"
#! />
#! </COMMENTS>
#! <CONSTANTS>
#! </CONSTANTS>
#! <BOOKMARKS>
#! </BOOKMARKS>
#! <TRANSFORMERS>
#! <TRANSFORMER
#! IDENTIFIER="0"
#! TYPE="2DCreator"
#! VERSION="1"
#! POSITION="38 -116"
#! ORDER="14"
#! PARMS_EDITED="true"
#! ENABLED="true"
#! >
#! <OUTPUT_FEAT NAME="CREATED"/>
#! <FEAT_COLLAPSED COLLAPSED="0"/>
#! <XFORM_ATTR ATTR_NAME="_creation_instance" IS_USER_CREATED="false" FEAT_INDEX="0"/>
#! <XFORM_PARM PARM_NAME="NUM" PARM_VALUE="1" ALWAYS_PROMPT_PARM="false"/>
#! <XFORM_PARM PARM_NAME="XFORMER_NAME" PARM_VALUE="2DCREATOR" ALWAYS_PROMPT_PARM="false"/>
#! <XFORM_PARM PARM_NAME="ATEND" PARM_VALUE="no" ALWAYS_PROMPT_PARM="false"/>
#! <XFORM_PARM PARM_NAME="CRE_ATTR" PARM_VALUE="_creation_instance" ALWAYS_PROMPT_PARM="false"/>
#! <XFORM_PARM PARM_NAME="COORDS" PARM_VALUE="0 0 1 1" ALWAYS_PROMPT_PARM="false"/>
#! </TRANSFORMER>
#! <TRANSFORMER
#! IDENTIFIER="1"
#! TYPE="Visualizer"
#! VERSION="1"
#! POSITION="1286 -47"
#! ORDER="15"
#! PARMS_EDITED="true"
#! ENABLED="true"
#! >
#! <XFORM_PARM PARM_NAME="XFORMER_NAME" PARM_VALUE="VISUALIZER" ALWAYS_PROMPT_PARM="false"/>
#! <XFORM_PARM PARM_NAME="TACKATTRS" PARM_VALUE="" ALWAYS_PROMPT_PARM="false"/>
#! <XFORM_PARM PARM_NAME="PEN_COLOR" PARM_VALUE="" ALWAYS_PROMPT_PARM="false"/>
#! <XFORM_PARM PARM_NAME="AREA_COLOR" PARM_VALUE="" ALWAYS_PROMPT_PARM="false"/>
#! </TRANSFORMER>
#! <TRANSFORMER
#! IDENTIFIER="2"
#! TYPE="2DCreator"
#! VERSION="1"
#! POSITION="38 -275"
#! ORDER="16"
#! PARMS_EDITED="true"
#! ENABLED="true"
#! >
#! <OUTPUT_FEAT NAME="CREATED"/>
#! <FEAT_COLLAPSED COLLAPSED="0"/>
#! <XFORM_ATTR ATTR_NAME="_creation_instance" IS_USER_CREATED="false" FEAT_INDEX="0"/>
#! <XFORM_PARM PARM_NAME="NUM" PARM_VALUE="1" ALWAYS_PROMPT_PARM="false"/>
#! <XFORM_PARM PARM_NAME="XFORMER_NAME" PARM_VALUE="2DCREATOR_2" ALWAYS_PROMPT_PARM="false"/>
#! <XFORM_PARM PARM_NAME="ATEND" PARM_VALUE="no" ALWAYS_PROMPT_PARM="false"/>
#! <XFORM_PARM PARM_NAME="CRE_ATTR" PARM_VALUE="_creation_instance" ALWAYS_PROMPT_PARM="false"/>
#! <XFORM_PARM PARM_NAME="COORDS" PARM_VALUE="0 0 1 0" ALWAYS_PROMPT_PARM="false"/>
#! </TRANSFORMER>
#! <TRANSFORMER
#! IDENTIFIER="3"
#! TYPE="2DCreator"
#! VERSION="1"
#! POSITION="38 -425"
#! ORDER="17"
#! PARMS_EDITED="true"
#! ENABLED="true"
#! >
#! <OUTPUT_FEAT NAME="CREATED"/>
#! <FEAT_COLLAPSED COLLAPSED="0"/>
#! <XFORM_ATTR ATTR_NAME="_creation_instance" IS_USER_CREATED="false" FEAT_INDEX="0"/>
#! <XFORM_PARM PARM_NAME="NUM" PARM_VALUE="1" ALWAYS_PROMPT_PARM="false"/>
#! <XFORM_PARM PARM_NAME="XFORMER_NAME" PARM_VALUE="2DCREATOR_3" ALWAYS_PROMPT_PARM="false"/>
#! <XFORM_PARM PARM_NAME="ATEND" PARM_VALUE="no" ALWAYS_PROMPT_PARM="false"/>
#! <XFORM_PARM PARM_NAME="CRE_ATTR" PARM_VALUE="_creation_instance" ALWAYS_PROMPT_PARM="false"/>
#! <XFORM_PARM PARM_NAME="COORDS" PARM_VALUE="1 0 1 1" ALWAYS_PROMPT_PARM="false"/>
#! </TRANSFORMER>
#! <TRANSFORMER
#! IDENTIFIER="4"
#! TYPE="2DCreator"
#! VERSION="1"
#! POSITION="38 -582"
#! ORDER="18"
#! PARMS_EDITED="true"
#! ENABLED="true"
#! >
#! <OUTPUT_FEAT NAME="CREATED"/>
#! <FEAT_COLLAPSED COLLAPSED="0"/>
#! <XFORM_ATTR ATTR_NAME="_creation_instance" IS_USER_CREATED="false" FEAT_INDEX="0"/>
#! <XFORM_PARM PARM_NAME="NUM" PARM_VALUE="1" ALWAYS_PROMPT_PARM="false"/>
#! <XFORM_PARM PARM_NAME="XFORMER_NAME" PARM_VALUE="2DCREATOR_4" ALWAYS_PROMPT_PARM="false"/>
#! <XFORM_PARM PARM_NAME="ATEND" PARM_VALUE="no" ALWAYS_PROMPT_PARM="false"/>
#! <XFORM_PARM PARM_NAME="CRE_ATTR" PARM_VALUE="_creation_instance" ALWAYS_PROMPT_PARM="false"/>
#! <XFORM_PARM PARM_NAME="COORDS" PARM_VALUE="1 1 0 1" ALWAYS_PROMPT_PARM="false"/>
#! </TRANSFORMER>
#! <TRANSFORMER
#! IDENTIFIER="5"
#! TYPE="2DCreator"
#! VERSION="1"
#! POSITION="38 -782"
#! ORDER="19"
#! PARMS_EDITED="true"
#! ENABLED="true"
#! >
#! <OUTPUT_FEAT NAME="CREATED"/>
#! <FEAT_COLLAPSED COLLAPSED="0"/>
#! <XFORM_ATTR ATTR_NAME="_creation_instance" IS_USER_CREATED="false" FEAT_INDEX="0"/>
#! <XFORM_PARM PARM_NAME="NUM" PARM_VALUE="1" ALWAYS_PROMPT_PARM="false"/>
#! <XFORM_PARM PARM_NAME="XFORMER_NAME" PARM_VALUE="2DCREATOR_5" ALWAYS_PROMPT_PARM="false"/>
#! <XFORM_PARM PARM_NAME="ATEND" PARM_VALUE="no" ALWAYS_PROMPT_PARM="false"/>
#! <XFORM_PARM PARM_NAME="CRE_ATTR" PARM_VALUE="_creation_instance" ALWAYS_PROMPT_PARM="false"/>
#! <XFORM_PARM PARM_NAME="COORDS" PARM_VALUE="0 1 0 0" ALWAYS_PROMPT_PARM="false"/>
#! </TRANSFORMER>
#! <TRANSFORMER
#! IDENTIFIER="6"
#! TYPE="2DCreator"
#! VERSION="1"
#! POSITION="38 -981"
#! ORDER="20"
#! PARMS_EDITED="true"
#! ENABLED="true"
#! >
#! <OUTPUT_FEAT NAME="CREATED"/>
#! <FEAT_COLLAPSED COLLAPSED="0"/>
#! <XFORM_ATTR ATTR_NAME="_creation_instance" IS_USER_CREATED="false" FEAT_INDEX="0"/>
#! <XFORM_PARM PARM_NAME="NUM" PARM_VALUE="1" ALWAYS_PROMPT_PARM="false"/>
#! <XFORM_PARM PARM_NAME="XFORMER_NAME" PARM_VALUE="2DCREATOR_6" ALWAYS_PROMPT_PARM="false"/>
#! <XFORM_PARM PARM_NAME="ATEND" PARM_VALUE="no" ALWAYS_PROMPT_PARM="false"/>
#! <XFORM_PARM PARM_NAME="CRE_ATTR" PARM_VALUE="_creation_instance" ALWAYS_PROMPT_PARM="false"/>
#! <XFORM_PARM PARM_NAME="COORDS" PARM_VALUE="1 0 0 1" ALWAYS_PROMPT_PARM="false"/>
#! </TRANSFORMER>
#! <TRANSFORMER
#! IDENTIFIER="7"
#! TYPE="Bufferer"
#! VERSION="2"
#! POSITION="1202 -535"
#! ORDER="21"
#! PARMS_EDITED="true"
#! ENABLED="true"
#! >
#! <OUTPUT_FEAT NAME="BUFFERED"/>
#! <FEAT_COLLAPSED COLLAPSED="0"/>
#! <XFORM_ATTR ATTR_NAME="_overlaps" IS_USER_CREATED="false" FEAT_INDEX="0"/>
#! <XFORM_ATTR ATTR_NAME="_segments" IS_USER_CREATED="false" FEAT_INDEX="0"/>
#! <XFORM_ATTR ATTR_NAME="_creation_instance" IS_USER_CREATED="false" FEAT_INDEX="0"/>
#! <XFORM_PARM PARM_NAME="ANGLE" PARM_VALUE="0" ALWAYS_PROMPT_PARM="false"/>
#! <XFORM_PARM PARM_NAME="BUFFSTYLE" PARM_VALUE="CAP_PROJECTING" ALWAYS_PROMPT_PARM="false"/>
#! <XFORM_PARM PARM_NAME="GROUP_BY" PARM_VALUE="" ALWAYS_PROMPT_PARM="false"/>
#! <XFORM_PARM PARM_NAME="WIDTH" PARM_VALUE="0.01" ALWAYS_PROMPT_PARM="false"/>
#! <XFORM_PARM PARM_NAME="XFORMER_NAME" PARM_VALUE="BUFFERER" ALWAYS_PROMPT_PARM="false"/>
#! </TRANSFORMER>
#! <TRANSFORMER
#! IDENTIFIER="8"
#! TYPE="Scaler"
#! VERSION="0"
#! POSITION="653 -471"
#! ORDER="22"
#! PARMS_EDITED="true"
#! ENABLED="true"
#! >
#! <OUTPUT_FEAT NAME="SCALED"/>
#! <FEAT_COLLAPSED COLLAPSED="0"/>
#! <XFORM_ATTR ATTR_NAME="_creation_instance" IS_USER_CREATED="false" FEAT_INDEX="0"/>
#! <XFORM_PARM PARM_NAME="ZSCALE" PARM_VALUE="1" ALWAYS_PROMPT_PARM="false"/>
#! <XFORM_PARM PARM_NAME="TEXT_LOC_ONLY" PARM_VALUE="Location and Size" ALWAYS_PROMPT_PARM="false"/>
#! <XFORM_PARM PARM_NAME="XFORMER_NAME" PARM_VALUE="SCALER" ALWAYS_PROMPT_PARM="false"/>
#! <XFORM_PARM PARM_NAME="YSCALE" PARM_VALUE="1" ALWAYS_PROMPT_PARM="false"/>
#! <XFORM_PARM PARM_NAME="XSCALE" PARM_VALUE="1" ALWAYS_PROMPT_PARM="false"/>
#! </TRANSFORMER>
#! <TRANSFORMER
#! IDENTIFIER="9"
#! TYPE="Intersector"
#! VERSION="1"
#! POSITION="657 -686"
#! ORDER="23"
#! PARMS_EDITED="true"
#! ENABLED="true"
#! >
#! <OUTPUT_FEAT NAME="INTERSECTED"/>
#! <FEAT_COLLAPSED COLLAPSED="0"/>
#! <XFORM_ATTR ATTR_NAME="_overlaps" IS_USER_CREATED="false" FEAT_INDEX="0"/>
#! <XFORM_ATTR ATTR_NAME="_segments" IS_USER_CREATED="false" FEAT_INDEX="0"/>
#! <XFORM_ATTR ATTR_NAME="_creation_instance" IS_USER_CREATED="false" FEAT_INDEX="0"/>
#! <OUTPUT_FEAT NAME="NODE"/>
#! <FEAT_COLLAPSED COLLAPSED="1"/>
#! <XFORM_ATTR ATTR_NAME="_node_number" IS_USER_CREATED="false" FEAT_INDEX="1"/>
#! <XFORM_ATTR ATTR_NAME="_overlaps" IS_USER_CREATED="false" FEAT_INDEX="1"/>
#! <XFORM_ATTR ATTR_NAME="_segments" IS_USER_CREATED="false" FEAT_INDEX="1"/>
#! <XFORM_PARM PARM_NAME="LIST_NAME" PARM_VALUE="" ALWAYS_PROMPT_PARM="false"/>
#! <XFORM_PARM PARM_NAME="OV_ATTR" PARM_VALUE="_overlaps" ALWAYS_PROMPT_PARM="false"/>
#! <XFORM_PARM PARM_NAME="XFORMER_NAME" PARM_VALUE="INTERSECTOR" ALWAYS_PROMPT_PARM="false"/>
#! <XFORM_PARM PARM_NAME="SEG_ATTR" PARM_VALUE="_segments" ALWAYS_PROMPT_PARM="false"/>
#! <XFORM_PARM PARM_NAME="DUPLICATE_Z_NODES" PARM_VALUE="No" ALWAYS_PROMPT_PARM="false"/>
#! <XFORM_PARM PARM_NAME="GRP_BY" PARM_VALUE="" ALWAYS_PROMPT_PARM="false"/>
#! </TRANSFORMER>
#! <TRANSFORMER
#! IDENTIFIER="10"
#! TYPE="Visualizer"
#! VERSION="1"
#! POSITION="1200 -1211"
#! ORDER="24"
#! PARMS_EDITED="true"
#! ENABLED="true"
#! >
#! <XFORM_PARM PARM_NAME="XFORMER_NAME" PARM_VALUE="VISUALIZER_2" ALWAYS_PROMPT_PARM="false"/>
#! <XFORM_PARM PARM_NAME="TACKATTRS" PARM_VALUE="" ALWAYS_PROMPT_PARM="false"/>
#! <XFORM_PARM PARM_NAME="PEN_COLOR" PARM_VALUE="" ALWAYS_PROMPT_PARM="false"/>
#! <XFORM_PARM PARM_NAME="AREA_COLOR" PARM_VALUE="" ALWAYS_PROMPT_PARM="false"/>
#! </TRANSFORMER>
#! <TRANSFORMER
#! IDENTIFIER="11"
#! TYPE="Visualizer"
#! VERSION="1"
#! POSITION="1767 -498"
#! ORDER="25"
#! PARMS_EDITED="true"
#! ENABLED="true"
#! >
#! <XFORM_PARM PARM_NAME="XFORMER_NAME" PARM_VALUE="VISUALIZER_3" ALWAYS_PROMPT_PARM="false"/>
#! <XFORM_PARM PARM_NAME="TACKATTRS" PARM_VALUE="" ALWAYS_PROMPT_PARM="false"/>
#! <XFORM_PARM PARM_NAME="PEN_COLOR" PARM_VALUE="" ALWAYS_PROMPT_PARM="false"/>
#! <XFORM_PARM PARM_NAME="AREA_COLOR" PARM_VALUE="" ALWAYS_PROMPT_PARM="false"/>
#! </TRANSFORMER>
#! <TRANSFORMER
#! IDENTIFIER="12"
#! TYPE="Dissolver"
#! VERSION="2"
#! POSITION="1212 -757"
#! ORDER="26"
#! PARMS_EDITED="true"
#! ENABLED="true"
#! >
#! <OUTPUT_FEAT NAME="AREA"/>
#! <FEAT_COLLAPSED COLLAPSED="0"/>
#! <XFORM_ATTR ATTR_NAME="_num_dissolved" IS_USER_CREATED="false" FEAT_INDEX="0"/>
#! <XFORM_ATTR ATTR_NAME="_overlaps" IS_USER_CREATED="false" FEAT_INDEX="0"/>
#! <XFORM_ATTR ATTR_NAME="_segments" IS_USER_CREATED="false" FEAT_INDEX="0"/>
#! <XFORM_ATTR ATTR_NAME="_creation_instance" IS_USER_CREATED="false" FEAT_INDEX="0"/>
#! <OUTPUT_FEAT NAME="INTERIOR_LINE"/>
#! <FEAT_COLLAPSED COLLAPSED="1"/>
#! <XFORM_ATTR ATTR_NAME="_num_dissolved" IS_USER_CREATED="false" FEAT_INDEX="1"/>
#! <XFORM_ATTR ATTR_NAME="_overlaps" IS_USER_CREATED="false" FEAT_INDEX="1"/>
#! <XFORM_ATTR ATTR_NAME="_segments" IS_USER_CREATED="false" FEAT_INDEX="1"/>
#! <XFORM_ATTR ATTR_NAME="_creation_instance" IS_USER_CREATED="false" FEAT_INDEX="1"/>
#! <OUTPUT_FEAT NAME="NON_POLYGON"/>
#! <FEAT_COLLAPSED COLLAPSED="2"/>
#! <XFORM_ATTR ATTR_NAME="_num_dissolved" IS_USER_CREATED="false" FEAT_INDEX="2"/>
#! <XFORM_ATTR ATTR_NAME="_overlaps" IS_USER_CREATED="false" FEAT_INDEX="2"/>
#! <XFORM_ATTR ATTR_NAME="_segments" IS_USER_CREATED="false" FEAT_INDEX="2"/>
#! <XFORM_ATTR ATTR_NAME="_creation_instance" IS_USER_CREATED="false" FEAT_INDEX="2"/>
#! <XFORM_PARM PARM_NAME="LIST_NAME" PARM_VALUE="" ALWAYS_PROMPT_PARM="false"/>
#! <XFORM_PARM PARM_NAME="AV" PARM_VALUE="" ALWAYS_PROMPT_PARM="false"/>
#! <XFORM_PARM PARM_NAME="GROUP_BY" PARM_VALUE="" ALWAYS_PROMPT_PARM="false"/>
#! <XFORM_PARM PARM_NAME="NO_OVRLP" PARM_VALUE="No" ALWAYS_PROMPT_PARM="false"/>
#! <XFORM_PARM PARM_NAME="XFORMER_NAME" PARM_VALUE="DISSOLVER" ALWAYS_PROMPT_PARM="false"/>
#! <XFORM_PARM PARM_NAME="SUM" PARM_VALUE="" ALWAYS_PROMPT_PARM="false"/>
#! <XFORM_PARM PARM_NAME="DIS_ATTR" PARM_VALUE="_num_dissolved" ALWAYS_PROMPT_PARM="false"/>
#! <XFORM_PARM PARM_NAME="WEIGHT" PARM_VALUE="" ALWAYS_PROMPT_PARM="false"/>
#! </TRANSFORMER>
#! <TRANSFORMER
#! IDENTIFIER="13"
#! TYPE="Visualizer"
#! VERSION="1"
#! POSITION="1771 -785"
#! ORDER="27"
#! PARMS_EDITED="true"
#! ENABLED="true"
#! >
#! <XFORM_PARM PARM_NAME="XFORMER_NAME" PARM_VALUE="VISUALIZER_4" ALWAYS_PROMPT_PARM="false"/>
#! <XFORM_PARM PARM_NAME="TACKATTRS" PARM_VALUE="" ALWAYS_PROMPT_PARM="false"/>
#! <XFORM_PARM PARM_NAME="PEN_COLOR" PARM_VALUE="" ALWAYS_PROMPT_PARM="false"/>
#! <XFORM_PARM PARM_NAME="AREA_COLOR" PARM_VALUE="" ALWAYS_PROMPT_PARM="false"/>
#! </TRANSFORMER>
#! </TRANSFORMERS>
#! <FEAT_LINKS>
#! <FEAT_LINK
#! IDENTIFIER="14"
#! SOURCE_NODE="0"
#! TARGET_NODE="8"
#! SOURCE_PORT_DESC="fo 0"
#! TARGET_PORT_DESC="fi 0"
#! EXTRA_POINTS=""
#! />
#! <FEAT_LINK
#! IDENTIFIER="15"
#! SOURCE_NODE="2"
#! TARGET_NODE="8"
#! SOURCE_PORT_DESC="fo 0"
#! TARGET_PORT_DESC="fi 0"
#! EXTRA_POINTS=""
#! />
#! <FEAT_LINK
#! IDENTIFIER="16"
#! SOURCE_NODE="3"
#! TARGET_NODE="8"
#! SOURCE_PORT_DESC="fo 0"
#! TARGET_PORT_DESC="fi 0"
#! EXTRA_POINTS=""
#! />
#! <FEAT_LINK
#! IDENTIFIER="17"
#! SOURCE_NODE="4"
#! TARGET_NODE="8"
#! SOURCE_PORT_DESC="fo 0"
#! TARGET_PORT_DESC="fi 0"
#! EXTRA_POINTS=""
#! />
#! <FEAT_LINK
#! IDENTIFIER="18"
#! SOURCE_NODE="5"
#! TARGET_NODE="8"
#! SOURCE_PORT_DESC="fo 0"
#! TARGET_PORT_DESC="fi 0"
#! EXTRA_POINTS=""
#! />
#! <FEAT_LINK
#! IDENTIFIER="19"
#! SOURCE_NODE="6"
#! TARGET_NODE="8"
#! SOURCE_PORT_DESC="fo 0"
#! TARGET_PORT_DESC="fi 0"
#! EXTRA_POINTS=""
#! />
#! <FEAT_LINK
#! IDENTIFIER="20"
#! SOURCE_NODE="8"
#! TARGET_NODE="9"
#! SOURCE_PORT_DESC="fo 0"
#! TARGET_PORT_DESC="fi 0"
#! EXTRA_POINTS=""
#! />
#! <FEAT_LINK
#! IDENTIFIER="21"
#! SOURCE_NODE="9"
#! TARGET_NODE="7"
#! SOURCE_PORT_DESC="fo 0"
#! TARGET_PORT_DESC="fi 0"
#! EXTRA_POINTS=""
#! />
#! <FEAT_LINK
#! IDENTIFIER="22"
#! SOURCE_NODE="8"
#! TARGET_NODE="1"
#! SOURCE_PORT_DESC="fo 0"
#! TARGET_PORT_DESC="fi 0"
#! EXTRA_POINTS=""
#! />
#! <FEAT_LINK
#! IDENTIFIER="23"
#! SOURCE_NODE="9"
#! TARGET_NODE="10"
#! SOURCE_PORT_DESC="fo 0"
#! TARGET_PORT_DESC="fi 0"
#! EXTRA_POINTS=""
#! />
#! <FEAT_LINK
#! IDENTIFIER="24"
#! SOURCE_NODE="7"
#! TARGET_NODE="11"
#! SOURCE_PORT_DESC="fo 0"
#! TARGET_PORT_DESC="fi 0"
#! EXTRA_POINTS=""
#! />
#! <FEAT_LINK
#! IDENTIFIER="25"
#! SOURCE_NODE="7"
#! TARGET_NODE="12"
#! SOURCE_PORT_DESC="fo 0"
#! TARGET_PORT_DESC="fi 0"
#! EXTRA_POINTS=""
#! />
#! <FEAT_LINK
#! IDENTIFIER="26"
#! SOURCE_NODE="12"
#! TARGET_NODE="13"
#! SOURCE_PORT_DESC="fo 0"
#! TARGET_PORT_DESC="fi 0"
#! EXTRA_POINTS=""
#! />
#! </FEAT_LINKS>
#! <ATTR_LINKS>
#! </ATTR_LINKS>
#! <SUBDOCUMENTS>
#! </SUBDOCUMENTS>
#! <LOOKUP_TABLES>
#! </LOOKUP_TABLES>
#! </WORKSPACE>
#! 
#! START_HEADER
#! START_WB_HEADER
READER_TYPE NULL
READER_KEYWORD NULL_SOURCE
NULL_SOURCE_DATASET null
WRITER_TYPE NULL
WRITER_KEYWORD NULL_DEST
NULL_DEST_DATASET null
#! END_WB_HEADER
#! END_HEADER

# -------------------------------------------------------------------------


# -------------------------------------------------------------------------

MACRO WORKSPACE_NAME homers_delight 
# -------------------------------------------------------------------------

FACTORY_DEF * CreationFactory    FACTORY_NAME 2DCREATOR    2D_GEOMETRY 0 0 1 1    CREATE_AT_END no    NUMBER_TO_CREATE 1    OUTPUT FEATURE_TYPE 2DCREATOR_CREATED        @SupplyAttributes(?,creation_instance,0)        @RenameAttributes(_creation_instance,creation_instance) 

# -------------------------------------------------------------------------

FACTORY_DEF * CreationFactory    FACTORY_NAME 2DCREATOR_2    2D_GEOMETRY 0 0 1 0    CREATE_AT_END no    NUMBER_TO_CREATE 1    OUTPUT FEATURE_TYPE 2DCREATOR_2_CREATED        @SupplyAttributes(?,creation_instance,0)        @RenameAttributes(_creation_instance,creation_instance) 

# -------------------------------------------------------------------------

FACTORY_DEF * CreationFactory    FACTORY_NAME 2DCREATOR_3    2D_GEOMETRY 1 0 1 1    CREATE_AT_END no    NUMBER_TO_CREATE 1    OUTPUT FEATURE_TYPE 2DCREATOR_3_CREATED        @SupplyAttributes(?,creation_instance,0)        @RenameAttributes(_creation_instance,creation_instance) 

# -------------------------------------------------------------------------

FACTORY_DEF * CreationFactory    FACTORY_NAME 2DCREATOR_4    2D_GEOMETRY 1 1 0 1    CREATE_AT_END no    NUMBER_TO_CREATE 1    OUTPUT FEATURE_TYPE 2DCREATOR_4_CREATED        @SupplyAttributes(?,creation_instance,0)        @RenameAttributes(_creation_instance,creation_instance) 

# -------------------------------------------------------------------------

FACTORY_DEF * CreationFactory    FACTORY_NAME 2DCREATOR_5    2D_GEOMETRY 0 1 0 0    CREATE_AT_END no    NUMBER_TO_CREATE 1    OUTPUT FEATURE_TYPE 2DCREATOR_5_CREATED        @SupplyAttributes(?,creation_instance,0)        @RenameAttributes(_creation_instance,creation_instance) 

# -------------------------------------------------------------------------

FACTORY_DEF * CreationFactory    FACTORY_NAME 2DCREATOR_6    2D_GEOMETRY 1 0 0 1    CREATE_AT_END no    NUMBER_TO_CREATE 1    OUTPUT FEATURE_TYPE 2DCREATOR_6_CREATED        @SupplyAttributes(?,creation_instance,0)        @RenameAttributes(_creation_instance,creation_instance) 

# -------------------------------------------------------------------------

FACTORY_DEF * TeeFactory    FACTORY_NAME SCALER    INPUT  FEATURE_TYPE 2DCREATOR_CREATED    INPUT  FEATURE_TYPE 2DCREATOR_2_CREATED    INPUT  FEATURE_TYPE 2DCREATOR_3_CREATED    INPUT  FEATURE_TYPE 2DCREATOR_4_CREATED    INPUT  FEATURE_TYPE 2DCREATOR_5_CREATED    INPUT  FEATURE_TYPE 2DCREATOR_6_CREATED    OUTPUT FEATURE_TYPE SCALER_SCALED         @Scale(1,1,1) 

FACTORY_DEF * TeeFactory   FACTORY_NAME "SCALER_SCALED Splitter"   INPUT FEATURE_TYPE SCALER_SCALED   OUTPUT FEATURE_TYPE SCALER_SCALED_0   OUTPUT FEATURE_TYPE SCALER_SCALED_1 
# -------------------------------------------------------------------------

FACTORY_DEF * TeeFactory    FACTORY_NAME INTERSECTOR_Splitter    INPUT  FEATURE_TYPE SCALER_SCALED_0    OUTPUT FEATURE_TYPE ___TOINTER___ 
FACTORY_DEF * IntersectionFactory    FACTORY_NAME INTERSECTOR_Self    INPUT FEATURE_TYPE ___TOINTER___ fme_type fme_line    INPUT FEATURE_TYPE ___TOINTER___ fme_type fme_area    IGNORE_NODE_HEIGHTS YES    SELF_INTERSECTION_ONLY    OUTPUT SEGMENT  FEATURE_TYPE ___TOINTER___ 
FACTORY_DEF * TeeFactory    FACTORY_NAME INTERSECTOR_ArcStroker    INPUT FEATURE_TYPE ___TOINTER___ fme_type fme_arc    OUTPUT FEATURE_TYPE *         @Arc(&fme_primary_axis,&fme_secondary_axis,20,&fme_rotation,&fme_start_angle,&fme_sweep_angle)         @SupplyAttributes(fme_type,fme_line) 
FACTORY_DEF * TeeFactory    FACTORY_NAME INTERSECTOR_EllipseStroker    INPUT FEATURE_TYPE ___TOINTER___ fme_type fme_ellipse    OUTPUT FEATURE_TYPE *         @Arc(&fme_primary_axis,&fme_secondary_axis,20,&fme_rotation)         @SupplyAttributes(fme_type,fme_area) 
FACTORY_DEF * IntersectionFactory    FACTORY_NAME INTERSECTOR_ALL    INPUT FEATURE_TYPE ___TOINTER___    OVERLAP_COUNT_ATTRIBUTE _overlaps    SEGMENT_COUNT_ATTRIBUTE _segments    NODE_NUMBER_ATTR _node_number    IGNORE_NODE_HEIGHTS YES    OUTPUT SEGMENT  FEATURE_TYPE INTERSECTOR_INTERSECTED        fme_type fme_line 

FACTORY_DEF * TeeFactory   FACTORY_NAME "INTERSECTOR_INTERSECTED Splitter"   INPUT FEATURE_TYPE INTERSECTOR_INTERSECTED   OUTPUT FEATURE_TYPE INTERSECTOR_INTERSECTED_0   OUTPUT FEATURE_TYPE INTERSECTOR_INTERSECTED_1 
# -------------------------------------------------------------------------

INCLUDE [if { ("CAP_PROJECTING" == "SIDES_ONLY") ||               ("CAP_PROJECTING" == "LEFT_SIDE_ONLY") ||               ("CAP_PROJECTING" == "RIGHT_SIDE_ONLY") } {              puts "MACRO BUFFER_GEOM_TYPE fme_line"          } else {              puts "MACRO BUFFER_GEOM_TYPE fme_area"          }          ] 
DEFAULT_MACRO BUFFERER_nonnullgroupby 
FACTORY_DEF * TestFactory    FACTORY_NAME BUFFERER_group_by_tester    INPUT  FEATURE_TYPE INTERSECTOR_INTERSECTED_0    TEST "$(BUFFERER_nonnullgroupby)" != ""    TEST @GeometryType() == "fme_line"    BOOLEAN_OPERATOR AND    OUTPUT PASSED FEATURE_TYPE __to_line_join__    OUTPUT FAILED FEATURE_TYPE __do_buffer__ 
FACTORY_DEF * ArcFactory    FACTORY_NAME BUFFERER_line_joiner    INPUT FEATURE_TYPE __to_line_join__    END_NODED    CLOSE_LOOPS NO    OUTPUT LINE FEATURE_TYPE __do_buffer__ 
FACTORY_DEF * TeeFactory    FACTORY_NAME BUFFERER_bufferer    INPUT FEATURE_TYPE __do_buffer__    OUTPUT FEATURE_TYPE __consider__        @Buffer2(0.01,0,CAP_PROJECTING) 
FACTORY_DEF * TestFactory    FACTORY_NAME BUFFERER_buffer_width_0_bypass    INPUT FEATURE_TYPE __consider__    TEST "0.01" = 0    OUTPUT PASSED FEATURE_TYPE __done_buffer__    OUTPUT FAILED FEATURE_TYPE __consider__ 
FACTORY_DEF * TestFactory    FACTORY_NAME BUFFERER_router2    INPUT FEATURE_TYPE __consider__    TEST "$(BUFFERER_nonnullgroupby)" == ""    TEST "$(BUFFER_GEOM_TYPE)" == "fme_line"    BOOLEAN_OPERATOR OR    OUTPUT PASSED FEATURE_TYPE __done_buffer__    OUTPUT FAILED FEATURE_TYPE __to_dissolve__ 
FACTORY_DEF * OverlayFactory    FACTORY_NAME BUFFERER_cutter    INPUT POLYGON FEATURE_TYPE __to_dissolve__    OUTPUT POLYGON  FEATURE_TYPE __to_dissolve__ 
FACTORY_DEF * PolygonDissolveFactory    FACTORY_NAME BUFFERER_dissolver    INPUT FEATURE_TYPE __to_dissolve__    DISSOLVE_COUNT_ATTRIBUTE __force_attribute_accumulation__    OUTPUT POLYGON FEATURE_TYPE __done_buffer__        @RemoveAttributes(__force_attribute_accumulation__) 
FACTORY_DEF * TeeFactory    FACTORY_NAME BUFFERER_outputter    INPUT FEATURE_TYPE __done_buffer__    OUTPUT FEATURE_TYPE BUFFERER_BUFFERED 

FACTORY_DEF * TeeFactory   FACTORY_NAME "BUFFERER_BUFFERED Splitter"   INPUT FEATURE_TYPE BUFFERER_BUFFERED   OUTPUT FEATURE_TYPE BUFFERER_BUFFERED_0   OUTPUT FEATURE_TYPE BUFFERER_BUFFERED_1 
# -------------------------------------------------------------------------

# Set the directive to add all the meta-attributes to the features. 
# We do this so users see all possible information in the viewed 
# features. 

READER_META_ATTRIBUTES fme_feature_type fme_dataset fme_basename 
# First, set up the temporary directory that will be used for 
# the recordings we will be viewing (these three lines do this) 
# They assume that the WORKSPACE_NAME macro has already been set 

DEFAULT_MACRO WORKSPACE_TEMP_DIR 
INCLUDE [ if {[string length {$(WORKSPACE_TEMP_DIR)}] < 2} {               if {[info exists env(TEMP)]}                  {set gVisualizerTemp $env(TEMP)}               else                  {set gVisualizerTemp c:} ;               regsub -all { } {$(WORKSPACE_NAME)} {_} wsname;               set gVisualizerTemp $gVisualizerTemp\\${wsname}_[clock format [clock seconds] -format %H%M%S] ;               puts "MACRO WORKSPACE_TEMP_DIR $gVisualizerTemp";         } ;         if { [string length {}] > 0 } {             set catter "" ;             set comma "" ;             foreach attr "" {                 set catter "$catter$comma&$attr" ;                 set comma ",_," ;             } ;             puts "MACRO CATMAC [EMAIL PROTECTED]($catter)" ;         }         else {             puts "MACRO CATMAC " ;         };         set safeName [regsub -all {[\\/\*\?\|\>\<:\$\;]} {VISUALIZER_3} _];         puts "MACRO SAFE_FFS_NAME $safeName";         ] 
# Make the temporary directory that the FFS files will live in. 
FACTORY_DEF * CreationFactory      FACTORY_NAME VISUALIZER_3_DirCreator      OUTPUT FEATURE_TYPE __nukeme__          @Tcl2("catch {file mkdir {$(WORKSPACE_TEMP_DIR)}}") 
FACTORY_DEF * TeeFactory    FACTORY_NAME VISUALIZER_3_DirCreatorCleanerUpper    INPUT FEATURE_TYPE __nukeme__ 
# Now route all the features into the recorder, changing their 
# feature type to the transformer name so that they view nicely 

FACTORY_DEF * TeeFactory    FACTORY_NAME VISUALIZER_3_SetterUpper    INPUT  FEATURE_TYPE BUFFERER_BUFFERED_0    OUTPUT FEATURE_TYPE __viewme__ 
FACTORY_DEF * RecorderFactory    FACTORY_NAME VISUALIZER_3_Recorder    INPUT FEATURE_TYPE __viewme__ @FeatureType(VISUALIZER_3$(CATMAC))    FEATURE_FILE "$(WORKSPACE_TEMP_DIR)/$(SAFE_FFS_NAME).ffs"    MODE RECORD_PASS_THROUGH 
FACTORY_DEF * CreationFactory      FACTORY_NAME VISUALIZER_3_Trigger      CREATE_AT_END      OUTPUT FEATURE_TYPE __nukeme__          @TCL("lappend gVisualizerFilesToView $(SAFE_FFS_NAME)") 
FACTORY_DEF * TeeFactory    FACTORY_NAME VISUALIZER_3_CleanerUpper    INPUT FEATURE_TYPE __nukeme__ 

# -------------------------------------------------------------------------

FACTORY_DEF * PolygonDissolveFactory    FACTORY_NAME DISSOLVER    INPUT  FEATURE_TYPE BUFFERER_BUFFERED_1    DISSOLVE_COUNT_ATTRIBUTE _num_dissolved    AVERAGE_FIELDS    WEIGHTED_AVERAGE_FIELDS    SUM_FIELDS    NON_OVERLAPPING_INPUT No    OUTPUT POLYGON FEATURE_TYPE DISSOLVER_AREA        fme_type fme_area 

# -------------------------------------------------------------------------

# Set the directive to add all the meta-attributes to the features. 
# We do this so users see all possible information in the viewed 
# features. 

READER_META_ATTRIBUTES fme_feature_type fme_dataset fme_basename 
# First, set up the temporary directory that will be used for 
# the recordings we will be viewing (these three lines do this) 
# They assume that the WORKSPACE_NAME macro has already been set 

DEFAULT_MACRO WORKSPACE_TEMP_DIR 
INCLUDE [ if {[string length {$(WORKSPACE_TEMP_DIR)}] < 2} {               if {[info exists env(TEMP)]}                  {set gVisualizerTemp $env(TEMP)}               else                  {set gVisualizerTemp c:} ;               regsub -all { } {$(WORKSPACE_NAME)} {_} wsname;               set gVisualizerTemp $gVisualizerTemp\\${wsname}_[clock format [clock seconds] -format %H%M%S] ;               puts "MACRO WORKSPACE_TEMP_DIR $gVisualizerTemp";         } ;         if { [string length {}] > 0 } {             set catter "" ;             set comma "" ;             foreach attr "" {                 set catter "$catter$comma&$attr" ;                 set comma ",_," ;             } ;             puts "MACRO CATMAC [EMAIL PROTECTED]($catter)" ;         }         else {             puts "MACRO CATMAC " ;         };         set safeName [regsub -all {[\\/\*\?\|\>\<:\$\;]} {VISUALIZER_4} _];         puts "MACRO SAFE_FFS_NAME $safeName";         ] 
# Make the temporary directory that the FFS files will live in. 
FACTORY_DEF * CreationFactory      FACTORY_NAME VISUALIZER_4_DirCreator      OUTPUT FEATURE_TYPE __nukeme__          @Tcl2("catch {file mkdir {$(WORKSPACE_TEMP_DIR)}}") 
FACTORY_DEF * TeeFactory    FACTORY_NAME VISUALIZER_4_DirCreatorCleanerUpper    INPUT FEATURE_TYPE __nukeme__ 
# Now route all the features into the recorder, changing their 
# feature type to the transformer name so that they view nicely 

FACTORY_DEF * TeeFactory    FACTORY_NAME VISUALIZER_4_SetterUpper    INPUT  FEATURE_TYPE DISSOLVER_AREA    OUTPUT FEATURE_TYPE __viewme__ 
FACTORY_DEF * RecorderFactory    FACTORY_NAME VISUALIZER_4_Recorder    INPUT FEATURE_TYPE __viewme__ @FeatureType(VISUALIZER_4$(CATMAC))    FEATURE_FILE "$(WORKSPACE_TEMP_DIR)/$(SAFE_FFS_NAME).ffs"    MODE RECORD_PASS_THROUGH 
FACTORY_DEF * CreationFactory      FACTORY_NAME VISUALIZER_4_Trigger      CREATE_AT_END      OUTPUT FEATURE_TYPE __nukeme__          @TCL("lappend gVisualizerFilesToView $(SAFE_FFS_NAME)") 
FACTORY_DEF * TeeFactory    FACTORY_NAME VISUALIZER_4_CleanerUpper    INPUT FEATURE_TYPE __nukeme__ 

# -------------------------------------------------------------------------

# Set the directive to add all the meta-attributes to the features. 
# We do this so users see all possible information in the viewed 
# features. 

READER_META_ATTRIBUTES fme_feature_type fme_dataset fme_basename 
# First, set up the temporary directory that will be used for 
# the recordings we will be viewing (these three lines do this) 
# They assume that the WORKSPACE_NAME macro has already been set 

DEFAULT_MACRO WORKSPACE_TEMP_DIR 
INCLUDE [ if {[string length {$(WORKSPACE_TEMP_DIR)}] < 2} {               if {[info exists env(TEMP)]}                  {set gVisualizerTemp $env(TEMP)}               else                  {set gVisualizerTemp c:} ;               regsub -all { } {$(WORKSPACE_NAME)} {_} wsname;               set gVisualizerTemp $gVisualizerTemp\\${wsname}_[clock format [clock seconds] -format %H%M%S] ;               puts "MACRO WORKSPACE_TEMP_DIR $gVisualizerTemp";         } ;         if { [string length {}] > 0 } {             set catter "" ;             set comma "" ;             foreach attr "" {                 set catter "$catter$comma&$attr" ;                 set comma ",_," ;             } ;             puts "MACRO CATMAC [EMAIL PROTECTED]($catter)" ;         }         else {             puts "MACRO CATMAC " ;         };         set safeName [regsub -all {[\\/\*\?\|\>\<:\$\;]} {VISUALIZER_2} _];         puts "MACRO SAFE_FFS_NAME $safeName";         ] 
# Make the temporary directory that the FFS files will live in. 
FACTORY_DEF * CreationFactory      FACTORY_NAME VISUALIZER_2_DirCreator      OUTPUT FEATURE_TYPE __nukeme__          @Tcl2("catch {file mkdir {$(WORKSPACE_TEMP_DIR)}}") 
FACTORY_DEF * TeeFactory    FACTORY_NAME VISUALIZER_2_DirCreatorCleanerUpper    INPUT FEATURE_TYPE __nukeme__ 
# Now route all the features into the recorder, changing their 
# feature type to the transformer name so that they view nicely 

FACTORY_DEF * TeeFactory    FACTORY_NAME VISUALIZER_2_SetterUpper    INPUT  FEATURE_TYPE INTERSECTOR_INTERSECTED_1    OUTPUT FEATURE_TYPE __viewme__ 
FACTORY_DEF * RecorderFactory    FACTORY_NAME VISUALIZER_2_Recorder    INPUT FEATURE_TYPE __viewme__ @FeatureType(VISUALIZER_2$(CATMAC))    FEATURE_FILE "$(WORKSPACE_TEMP_DIR)/$(SAFE_FFS_NAME).ffs"    MODE RECORD_PASS_THROUGH 
FACTORY_DEF * CreationFactory      FACTORY_NAME VISUALIZER_2_Trigger      CREATE_AT_END      OUTPUT FEATURE_TYPE __nukeme__          @TCL("lappend gVisualizerFilesToView $(SAFE_FFS_NAME)") 
FACTORY_DEF * TeeFactory    FACTORY_NAME VISUALIZER_2_CleanerUpper    INPUT FEATURE_TYPE __nukeme__ 

# -------------------------------------------------------------------------

# Set the directive to add all the meta-attributes to the features. 
# We do this so users see all possible information in the viewed 
# features. 

READER_META_ATTRIBUTES fme_feature_type fme_dataset fme_basename 
# First, set up the temporary directory that will be used for 
# the recordings we will be viewing (these three lines do this) 
# They assume that the WORKSPACE_NAME macro has already been set 

DEFAULT_MACRO WORKSPACE_TEMP_DIR 
INCLUDE [ if {[string length {$(WORKSPACE_TEMP_DIR)}] < 2} {               if {[info exists env(TEMP)]}                  {set gVisualizerTemp $env(TEMP)}               else                  {set gVisualizerTemp c:} ;               regsub -all { } {$(WORKSPACE_NAME)} {_} wsname;               set gVisualizerTemp $gVisualizerTemp\\${wsname}_[clock format [clock seconds] -format %H%M%S] ;               puts "MACRO WORKSPACE_TEMP_DIR $gVisualizerTemp";         } ;         if { [string length {}] > 0 } {             set catter "" ;             set comma "" ;             foreach attr "" {                 set catter "$catter$comma&$attr" ;                 set comma ",_," ;             } ;             puts "MACRO CATMAC [EMAIL PROTECTED]($catter)" ;         }         else {             puts "MACRO CATMAC " ;         };         set safeName [regsub -all {[\\/\*\?\|\>\<:\$\;]} {VISUALIZER} _];         puts "MACRO SAFE_FFS_NAME $safeName";         ] 
# Make the temporary directory that the FFS files will live in. 
FACTORY_DEF * CreationFactory      FACTORY_NAME VISUALIZER_DirCreator      OUTPUT FEATURE_TYPE __nukeme__          @Tcl2("catch {file mkdir {$(WORKSPACE_TEMP_DIR)}}") 
FACTORY_DEF * TeeFactory    FACTORY_NAME VISUALIZER_DirCreatorCleanerUpper    INPUT FEATURE_TYPE __nukeme__ 
# Now route all the features into the recorder, changing their 
# feature type to the transformer name so that they view nicely 

FACTORY_DEF * TeeFactory    FACTORY_NAME VISUALIZER_SetterUpper    INPUT  FEATURE_TYPE SCALER_SCALED_1    OUTPUT FEATURE_TYPE __viewme__ 
FACTORY_DEF * RecorderFactory    FACTORY_NAME VISUALIZER_Recorder    INPUT FEATURE_TYPE __viewme__ @FeatureType(VISUALIZER$(CATMAC))    FEATURE_FILE "$(WORKSPACE_TEMP_DIR)/$(SAFE_FFS_NAME).ffs"    MODE RECORD_PASS_THROUGH 
FACTORY_DEF * CreationFactory      FACTORY_NAME VISUALIZER_Trigger      CREATE_AT_END      OUTPUT FEATURE_TYPE __nukeme__          @TCL("lappend gVisualizerFilesToView $(SAFE_FFS_NAME)") 
FACTORY_DEF * TeeFactory    FACTORY_NAME VISUALIZER_CleanerUpper    INPUT FEATURE_TYPE __nukeme__ 

# -------------------------------------------------------------------------

FACTORY_DEF * TestFactory   FACTORY_NAME "Final Output Feature Type Router"   INPUT FEATURE_TYPE *   TEST @Value(__wb_out_feat_type__) != ""   OUTPUT PASSED FEATURE_TYPE *     @FeatureType(@Value(__wb_out_feat_type__)) 
# -------------------------------------------------------------------------

FACTORY_DEF * CreationFactory   CREATE_AT_END   OUTPUT FEATURE_TYPE __NUKEME__   @TCL("eval exec fmeview /ownffs {{$(WORKSPACE_TEMP_DIR)}} $gVisualizerFilesToView &") 
FACTORY_DEF * TeeFactory   INPUT FEATURE_TYPE __NUKEME__ 
# -------------------------------------------------------------------------

NULL_SOURCE *
NULL_DEST *


Reply via email to