#! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! DEFAULT_MACRO CORNERS 24 DEFAULT_MACRO RADIUS 1000 INCLUDE [ if {{$(CORNERS)} == {}} { puts_real {Parameter CORNERS must be given a value on the commandline.}; exit 1; }; ] INCLUDE [ if {{$(RADIUS)} == {}} { puts_real {Parameter RADIUS must be given a value on the commandline.}; exit 1; }; ] #! START_HEADER FME_MINIMUM_BUILD 2651 ##################################################### # draw polygons with all connections # # Author: Michael Habarta # Date: Jan 07 # ##################################################### #! 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 LOG_FILENAME "$(FME_MF_DIR)Polygon_Connections.log" LOG_APPEND NO # ------------------------------------------------------------------------- MULTI_READER_CONTINUE_ON_READER_FAILURE No # ------------------------------------------------------------------------- MACRO WORKSPACE_NAME Polygon_Connections # ------------------------------------------------------------------------- FACTORY_DEF * CreationFactory FACTORY_NAME NULLGEOMETRYCREATOR CREATE_AT_END no NUMBER_TO_CREATE 1 OUTPUT FEATURE_TYPE NULLGEOMETRYCREATOR_CREATED @SupplyAttributes(?,creation_instance,0) @RenameAttributes(_creation_instance,creation_instance) # ------------------------------------------------------------------------- FACTORY_DEF * TeeFactory FACTORY_NAME ATTRIBUTEREMOVER INPUT FEATURE_TYPE NULLGEOMETRYCREATOR_CREATED OUTPUT FEATURE_TYPE ATTRIBUTEREMOVER_OUTPUT @RemoveAttributes(_creation_instance) # ------------------------------------------------------------------------- FACTORY_DEF * TeeFactory FACTORY_NAME "POLYGON_CONNECTION_DRAWER INPUT Input Collector" INPUT FEATURE_TYPE ATTRIBUTEREMOVER_OUTPUT OUTPUT FEATURE_TYPE POLYGON_CONNECTION_DRAWER_INPUT MACRO POLYGON_CONNECTION_DRAWER_WORKSPACE_NAME POLYGON_CONNECTION_DRAWER MACRO $(POLYGON_CONNECTION_DRAWER_WORKSPACE_NAME)_XFORMER_NAME POLYGON_CONNECTION_DRAWER MACRO $(POLYGON_CONNECTION_DRAWER_WORKSPACE_NAME)_CORNERS $(CORNERS) MACRO $(POLYGON_CONNECTION_DRAWER_WORKSPACE_NAME)_RADIUS $(RADIUS) MACRO $(POLYGON_CONNECTION_DRAWER_WORKSPACE_NAME)_SUB_DOC_NAME POLYGON_CONNECTION_DRAWER DEFAULT_MACRO POLYGON_CONNECTION_DRAWER_WORKSPACE_NAME "" FACTORY_DEF * TeeFactory FACTORY_NAME "$(POLYGON_CONNECTION_DRAWER_WORKSPACE_NAME)_INPUT Input Splitter" INPUT FEATURE_TYPE $(POLYGON_CONNECTION_DRAWER_WORKSPACE_NAME)_INPUT OUTPUT FEATURE_TYPE $(POLYGON_CONNECTION_DRAWER_WORKSPACE_NAME)_INPUT # ------------------------------------------------------------------------- # Expose all attributes. This ensures that if you expose fme_dataset, you will get it. READER_META_ATTRIBUTES fme_feature_type fme_dataset fme_basename FACTORY_DEF * TeeFactory FACTORY_NAME $(POLYGON_CONNECTION_DRAWER_WORKSPACE_NAME)_ATTRIBUTEEXPOSER INPUT FEATURE_TYPE $(POLYGON_CONNECTION_DRAWER_WORKSPACE_NAME)_INPUT OUTPUT FEATURE_TYPE $(POLYGON_CONNECTION_DRAWER_WORKSPACE_NAME)_ATTRIBUTEEXPOSER_OUTPUT # ------------------------------------------------------------------------- FACTORY_DEF * TeeFactory FACTORY_NAME $(POLYGON_CONNECTION_DRAWER_WORKSPACE_NAME)_ATTRIBUTESETTER INPUT FEATURE_TYPE $(POLYGON_CONNECTION_DRAWER_WORKSPACE_NAME)_ATTRIBUTEEXPOSER_OUTPUT OUTPUT FEATURE_TYPE $(POLYGON_CONNECTION_DRAWER_WORKSPACE_NAME)_ATTRIBUTESETTER_OUTPUT @SupplyAttributes(radius,"$($(POLYGON_CONNECTION_DRAWER_WORKSPACE_NAME)_RADIUS)") # ------------------------------------------------------------------------- FACTORY_DEF * TeeFactory FACTORY_NAME $(POLYGON_CONNECTION_DRAWER_WORKSPACE_NAME)_ATTRIBUTESETTER_2 INPUT FEATURE_TYPE $(POLYGON_CONNECTION_DRAWER_WORKSPACE_NAME)_ATTRIBUTESETTER_OUTPUT OUTPUT FEATURE_TYPE $(POLYGON_CONNECTION_DRAWER_WORKSPACE_NAME)_ATTRIBUTESETTER_2_OUTPUT @SupplyAttributes(corners,"$($(POLYGON_CONNECTION_DRAWER_WORKSPACE_NAME)_CORNERS)") # ------------------------------------------------------------------------- FACTORY_DEF * TeeFactory FACTORY_NAME $(POLYGON_CONNECTION_DRAWER_WORKSPACE_NAME)_CLONER INPUT FEATURE_TYPE $(POLYGON_CONNECTION_DRAWER_WORKSPACE_NAME)_ATTRIBUTESETTER_2_OUTPUT NUMBER_OF_COPIES @Value(corners) COPY_NUMBER_ATTRIBUTE _copynum OUTPUT FEATURE_TYPE $(POLYGON_CONNECTION_DRAWER_WORKSPACE_NAME)_CLONER_COPY # ------------------------------------------------------------------------- FACTORY_DEF * TeeFactory FACTORY_NAME $(POLYGON_CONNECTION_DRAWER_WORKSPACE_NAME)_EXPRESSIONEVALUATOR INPUT FEATURE_TYPE $(POLYGON_CONNECTION_DRAWER_WORKSPACE_NAME)_CLONER_COPY OUTPUT FEATURE_TYPE $(POLYGON_CONNECTION_DRAWER_WORKSPACE_NAME)_EXPRESSIONEVALUATOR_OUTPUT _angle @Evaluate("360.0/@Value(corners)*@Value(_copynum)/180.0*3.14159265359") # ------------------------------------------------------------------------- FACTORY_DEF * TeeFactory FACTORY_NAME $(POLYGON_CONNECTION_DRAWER_WORKSPACE_NAME)_EXPRESSIONEVALUATOR_2 INPUT FEATURE_TYPE $(POLYGON_CONNECTION_DRAWER_WORKSPACE_NAME)_EXPRESSIONEVALUATOR_OUTPUT OUTPUT FEATURE_TYPE $(POLYGON_CONNECTION_DRAWER_WORKSPACE_NAME)_EXPRESSIONEVALUATOR_2_OUTPUT _X @Evaluate("0.0+(sin(@Value(_angle))*@Value(radius))") # ------------------------------------------------------------------------- FACTORY_DEF * TeeFactory FACTORY_NAME $(POLYGON_CONNECTION_DRAWER_WORKSPACE_NAME)_EXPRESSIONEVALUATOR_3 INPUT FEATURE_TYPE $(POLYGON_CONNECTION_DRAWER_WORKSPACE_NAME)_EXPRESSIONEVALUATOR_2_OUTPUT OUTPUT FEATURE_TYPE $(POLYGON_CONNECTION_DRAWER_WORKSPACE_NAME)_EXPRESSIONEVALUATOR_3_OUTPUT _Y @Evaluate("0.0+(cos(@Value(_angle))*@Value(radius))") # ------------------------------------------------------------------------- FACTORY_DEF * TeeFactory FACTORY_NAME $(POLYGON_CONNECTION_DRAWER_WORKSPACE_NAME)_ATTRIBUTEREMOVER INPUT FEATURE_TYPE $(POLYGON_CONNECTION_DRAWER_WORKSPACE_NAME)_EXPRESSIONEVALUATOR_3_OUTPUT OUTPUT FEATURE_TYPE $(POLYGON_CONNECTION_DRAWER_WORKSPACE_NAME)_ATTRIBUTEREMOVER_OUTPUT @RemoveAttributes(_angle,corners,radius,_copynum) # ------------------------------------------------------------------------- DEFAULT_MACRO $(POLYGON_CONNECTION_DRAWER_WORKSPACE_NAME)_AGGREGATOR_BREAK_ATTR FACTORY_DEF * AggregateFactory FACTORY_NAME $(POLYGON_CONNECTION_DRAWER_WORKSPACE_NAME)_AGGREGATOR INPUT FEATURE_TYPE $(POLYGON_CONNECTION_DRAWER_WORKSPACE_NAME)_ATTRIBUTEREMOVER_OUTPUT $($(POLYGON_CONNECTION_DRAWER_WORKSPACE_NAME)_AGGREGATOR_BREAK_ATTR) LIST_NAME poly_coord{} COUNT_ATTRIBUTE corners ACCUMULATE_ATTRIBUTES Yes OUTPUT AGGREGATE FEATURE_TYPE $(POLYGON_CONNECTION_DRAWER_WORKSPACE_NAME)_AGGREGATOR_AGGREGATE # ------------------------------------------------------------------------- FACTORY_DEF * TeeFactory FACTORY_NAME $(POLYGON_CONNECTION_DRAWER_WORKSPACE_NAME)_ATTRIBUTEREMOVER_2 INPUT FEATURE_TYPE $(POLYGON_CONNECTION_DRAWER_WORKSPACE_NAME)_AGGREGATOR_AGGREGATE OUTPUT FEATURE_TYPE $(POLYGON_CONNECTION_DRAWER_WORKSPACE_NAME)_ATTRIBUTEREMOVER_2_OUTPUT @RemoveAttributes(_X,_Y) # ------------------------------------------------------------------------- FACTORY_DEF * ElementFactory FACTORY_NAME $(POLYGON_CONNECTION_DRAWER_WORKSPACE_NAME)_LISTEXPLODER INPUT FEATURE_TYPE $(POLYGON_CONNECTION_DRAWER_WORKSPACE_NAME)_ATTRIBUTEREMOVER_2_OUTPUT LIST_NAME poly_coord{} ELEMENT_NUMBER_FIELD _corner CLONE_GEOMETRY MODE CLASSIC OUTPUT ELEMENT FEATURE_TYPE $(POLYGON_CONNECTION_DRAWER_WORKSPACE_NAME)_LISTEXPLODER_OUTPUT # ------------------------------------------------------------------------- FACTORY_DEF * TeeFactory FACTORY_NAME $(POLYGON_CONNECTION_DRAWER_WORKSPACE_NAME)_ATTRIBUTERENAMER INPUT FEATURE_TYPE $(POLYGON_CONNECTION_DRAWER_WORKSPACE_NAME)_LISTEXPLODER_OUTPUT OUTPUT FEATURE_TYPE $(POLYGON_CONNECTION_DRAWER_WORKSPACE_NAME)_ATTRIBUTERENAMER_OUTPUT @RenameAttributes(_X_own,_X,_Y_own,_Y) FACTORY_DEF * TeeFactory FACTORY_NAME "$(POLYGON_CONNECTION_DRAWER_WORKSPACE_NAME)_ATTRIBUTERENAMER OUTPUT Splitter" INPUT FEATURE_TYPE $(POLYGON_CONNECTION_DRAWER_WORKSPACE_NAME)_ATTRIBUTERENAMER_OUTPUT OUTPUT FEATURE_TYPE $(POLYGON_CONNECTION_DRAWER_WORKSPACE_NAME)_ATTRIBUTERENAMER_OUTPUT_0 OUTPUT FEATURE_TYPE $(POLYGON_CONNECTION_DRAWER_WORKSPACE_NAME)_ATTRIBUTERENAMER_OUTPUT_1 # ------------------------------------------------------------------------- FACTORY_DEF * TeeFactory FACTORY_NAME "$(POLYGON_CONNECTION_DRAWER_WORKSPACE_NAME)_OUTLINE_DRAWER INPUT Input Collector" INPUT FEATURE_TYPE $(POLYGON_CONNECTION_DRAWER_WORKSPACE_NAME)_ATTRIBUTERENAMER_OUTPUT_1 OUTPUT FEATURE_TYPE $(POLYGON_CONNECTION_DRAWER_WORKSPACE_NAME)_OUTLINE_DRAWER_INPUT MACRO OUTLINE_DRAWER_WORKSPACE_NAME $(POLYGON_CONNECTION_DRAWER_WORKSPACE_NAME)_OUTLINE_DRAWER MACRO $(OUTLINE_DRAWER_WORKSPACE_NAME)_XFORMER_NAME $(POLYGON_CONNECTION_DRAWER_WORKSPACE_NAME)_OUTLINE_DRAWER MACRO $(OUTLINE_DRAWER_WORKSPACE_NAME)_SUB_DOC_NAME OUTLINE_DRAWER DEFAULT_MACRO OUTLINE_DRAWER_WORKSPACE_NAME "" FACTORY_DEF * TeeFactory FACTORY_NAME "$(OUTLINE_DRAWER_WORKSPACE_NAME)_INPUT Input Splitter" INPUT FEATURE_TYPE $(OUTLINE_DRAWER_WORKSPACE_NAME)_INPUT OUTPUT FEATURE_TYPE $(OUTLINE_DRAWER_WORKSPACE_NAME)_INPUT # ------------------------------------------------------------------------- # Expose all attributes. This ensures that if you expose fme_dataset, you will get it. READER_META_ATTRIBUTES fme_feature_type fme_dataset fme_basename FACTORY_DEF * TeeFactory FACTORY_NAME $(OUTLINE_DRAWER_WORKSPACE_NAME)_ATTRIBUTEEXPOSER INPUT FEATURE_TYPE $(OUTLINE_DRAWER_WORKSPACE_NAME)_INPUT OUTPUT FEATURE_TYPE $(OUTLINE_DRAWER_WORKSPACE_NAME)_ATTRIBUTEEXPOSER_OUTPUT # ------------------------------------------------------------------------- FACTORY_DEF * TeeFactory FACTORY_NAME $(OUTLINE_DRAWER_WORKSPACE_NAME)_EXPRESSIONEVALUATOR_4 INPUT FEATURE_TYPE $(OUTLINE_DRAWER_WORKSPACE_NAME)_ATTRIBUTEEXPOSER_OUTPUT OUTPUT FEATURE_TYPE $(OUTLINE_DRAWER_WORKSPACE_NAME)_EXPRESSIONEVALUATOR_4_OUTPUT _corner_next @Evaluate("@Value(_corner)+1") # ------------------------------------------------------------------------- FACTORY_DEF * TestFactory FACTORY_NAME $(OUTLINE_DRAWER_WORKSPACE_NAME)_TESTER INPUT FEATURE_TYPE $(OUTLINE_DRAWER_WORKSPACE_NAME)_EXPRESSIONEVALUATOR_4_OUTPUT TEST @Value(_corner_next) != @Value(corners) BOOLEAN_OPERATOR OR OUTPUT PASSED FEATURE_TYPE $(OUTLINE_DRAWER_WORKSPACE_NAME)_TESTER_PASSED OUTPUT FAILED FEATURE_TYPE $(OUTLINE_DRAWER_WORKSPACE_NAME)_TESTER_FAILED # ------------------------------------------------------------------------- TCL proc $(OUTLINE_DRAWER_WORKSPACE_NAME)_LISTINDEXER_2_indexer {index} { global FME_Attributes; regsub \"{}\" {poly_coord{}} \"{$index}\" listWithIndex; regsub \"{}\" {poly_coord{}} {} listBase; set complexListExp "$listWithIndex\."; set prefixLength [expr [string length $complexListExp]-1]; foreach attr [array names FME_Attributes] { if {$attr == $listWithIndex} { lappend attrsToCopy $listBase $attr; } elseif {[string first $complexListExp $attr] == 0} { set newAttr [string replace $attr 0 $prefixLength]; lappend attrsToCopy $newAttr $attr; }; }; if {[info exists attrsToCopy] && [llength $attrsToCopy] > 0} { eval FME_Execute CopyAttributes $attrsToCopy; }; } FACTORY_DEF * TeeFactory FACTORY_NAME $(OUTLINE_DRAWER_WORKSPACE_NAME)_LISTINDEXER_2 INPUT FEATURE_TYPE $(OUTLINE_DRAWER_WORKSPACE_NAME)_TESTER_FAILED OUTPUT FEATURE_TYPE $(OUTLINE_DRAWER_WORKSPACE_NAME)_LISTINDEXER_2_OUTPUT @TCL("$(OUTLINE_DRAWER_WORKSPACE_NAME)_LISTINDEXER_2_indexer 0") # ------------------------------------------------------------------------- TCL proc $(OUTLINE_DRAWER_WORKSPACE_NAME)_LISTINDEXER_indexer {index} { global FME_Attributes; regsub \"{}\" {poly_coord{}} \"{$index}\" listWithIndex; regsub \"{}\" {poly_coord{}} {} listBase; set complexListExp "$listWithIndex\."; set prefixLength [expr [string length $complexListExp]-1]; foreach attr [array names FME_Attributes] { if {$attr == $listWithIndex} { lappend attrsToCopy $listBase $attr; } elseif {[string first $complexListExp $attr] == 0} { set newAttr [string replace $attr 0 $prefixLength]; lappend attrsToCopy $newAttr $attr; }; }; if {[info exists attrsToCopy] && [llength $attrsToCopy] > 0} { eval FME_Execute CopyAttributes $attrsToCopy; }; } FACTORY_DEF * TeeFactory FACTORY_NAME $(OUTLINE_DRAWER_WORKSPACE_NAME)_LISTINDEXER INPUT FEATURE_TYPE $(OUTLINE_DRAWER_WORKSPACE_NAME)_TESTER_PASSED OUTPUT FEATURE_TYPE $(OUTLINE_DRAWER_WORKSPACE_NAME)_LISTINDEXER_OUTPUT @TCL("$(OUTLINE_DRAWER_WORKSPACE_NAME)_LISTINDEXER_indexer @Value(_corner_next)") # ------------------------------------------------------------------------- INCLUDE [ puts "MACRO REAL_RATE [expr 1 * 1 ]" ] FACTORY_DEF * SamplingFactory FACTORY_NAME $(OUTLINE_DRAWER_WORKSPACE_NAME)_SAMPLER_Sampler SAMPLE_RATE $(REAL_RATE) INPUT FEATURE_TYPE $(OUTLINE_DRAWER_WORKSPACE_NAME)_LISTINDEXER_OUTPUT INPUT FEATURE_TYPE $(OUTLINE_DRAWER_WORKSPACE_NAME)_LISTINDEXER_2_OUTPUT OUTPUT SAMPLED FEATURE_TYPE ___SAMPLED___ FACTORY_DEF * TeeFactory FACTORY_NAME $(OUTLINE_DRAWER_WORKSPACE_NAME)_SAMPLER_SamplerOutput INPUT FEATURE_TYPE ___SAMPLED___ OUTPUT FEATURE_TYPE $(OUTLINE_DRAWER_WORKSPACE_NAME)_SAMPLER_SAMPLED # ------------------------------------------------------------------------- FACTORY_DEF * TestFactory FACTORY_NAME $(OUTLINE_DRAWER_WORKSPACE_NAME)_2DPOINTREPLACER INPUT FEATURE_TYPE $(OUTLINE_DRAWER_WORKSPACE_NAME)_SAMPLER_SAMPLED TEST &fme_type = fme_text OUTPUT PASSED FEATURE_TYPE $(OUTLINE_DRAWER_WORKSPACE_NAME)_2DPOINTREPLACER_POINT @XValue("@Value(_X_own)",RESET) @YValue("@Value(_Y_own)") @Dimension(2) OUTPUT FAILED FEATURE_TYPE $(OUTLINE_DRAWER_WORKSPACE_NAME)_2DPOINTREPLACER_POINT @XValue("@Value(_X_own)",RESET) @YValue("@Value(_Y_own)") @Dimension(2) @GeometryType(fme_point) @SupplyAttributes(fme_type,fme_point) # ------------------------------------------------------------------------- Tcl2 proc $(OUTLINE_DRAWER_WORKSPACE_NAME)_2DPOINTADDER_2_geom_fixer {} { if {[FME_GetAttribute fme_type] == {fme_polygon}} { FME_SetAttribute fme_type fme_area } } FACTORY_DEF * TeeFactory FACTORY_NAME $(OUTLINE_DRAWER_WORKSPACE_NAME)_2DPOINTADDER_2 INPUT FEATURE_TYPE $(OUTLINE_DRAWER_WORKSPACE_NAME)_2DPOINTREPLACER_POINT OUTPUT FEATURE_TYPE $(OUTLINE_DRAWER_WORKSPACE_NAME)_2DPOINTADDER_2_OUTPUT @Dimension(2) @Tcl2("FME_Coordinates addCoord {@Value(_X)} {@Value(_Y)}") @GeometryType(fme_point) @GeometryType(fme_line) @GeometryType(fme_polygon) @SupplyAttributes(fme_type,@GeometryType()) @Tcl2($(OUTLINE_DRAWER_WORKSPACE_NAME)_2DPOINTADDER_2_geom_fixer) FACTORY_DEF * TeeFactory FACTORY_NAME "$(OUTLINE_DRAWER_WORKSPACE_NAME)_OUTPUT Output Collector" INPUT FEATURE_TYPE $(OUTLINE_DRAWER_WORKSPACE_NAME)_2DPOINTADDER_2_OUTPUT OUTPUT FEATURE_TYPE $(OUTLINE_DRAWER_WORKSPACE_NAME)_OUTPUT FACTORY_DEF * TeeFactory FACTORY_NAME "$(POLYGON_CONNECTION_DRAWER_WORKSPACE_NAME)_OUTLINE_DRAWER OUTPUT Output Renamer/Nuker" INPUT FEATURE_TYPE $(POLYGON_CONNECTION_DRAWER_WORKSPACE_NAME)_OUTLINE_DRAWER_OUTPUT OUTPUT FEATURE_TYPE $(POLYGON_CONNECTION_DRAWER_WORKSPACE_NAME)_OUTLINE_DRAWER_OUTPUT # ------------------------------------------------------------------------- FACTORY_DEF * TeeFactory FACTORY_NAME "$(POLYGON_CONNECTION_DRAWER_WORKSPACE_NAME)_CONNECTION_DRAWER INPUT Input Collector" INPUT FEATURE_TYPE $(POLYGON_CONNECTION_DRAWER_WORKSPACE_NAME)_ATTRIBUTERENAMER_OUTPUT_0 OUTPUT FEATURE_TYPE $(POLYGON_CONNECTION_DRAWER_WORKSPACE_NAME)_CONNECTION_DRAWER_INPUT MACRO CONNECTION_DRAWER_WORKSPACE_NAME $(POLYGON_CONNECTION_DRAWER_WORKSPACE_NAME)_CONNECTION_DRAWER MACRO $(CONNECTION_DRAWER_WORKSPACE_NAME)_XFORMER_NAME $(POLYGON_CONNECTION_DRAWER_WORKSPACE_NAME)_CONNECTION_DRAWER MACRO $(CONNECTION_DRAWER_WORKSPACE_NAME)_SUB_DOC_NAME CONNECTION_DRAWER DEFAULT_MACRO CONNECTION_DRAWER_WORKSPACE_NAME "" FACTORY_DEF * TeeFactory FACTORY_NAME "$(CONNECTION_DRAWER_WORKSPACE_NAME)_INPUT Input Splitter" INPUT FEATURE_TYPE $(CONNECTION_DRAWER_WORKSPACE_NAME)_INPUT OUTPUT FEATURE_TYPE $(CONNECTION_DRAWER_WORKSPACE_NAME)_INPUT # ------------------------------------------------------------------------- # Expose all attributes. This ensures that if you expose fme_dataset, you will get it. READER_META_ATTRIBUTES fme_feature_type fme_dataset fme_basename FACTORY_DEF * TeeFactory FACTORY_NAME $(CONNECTION_DRAWER_WORKSPACE_NAME)_ATTRIBUTEEXPOSER INPUT FEATURE_TYPE $(CONNECTION_DRAWER_WORKSPACE_NAME)_INPUT OUTPUT FEATURE_TYPE $(CONNECTION_DRAWER_WORKSPACE_NAME)_ATTRIBUTEEXPOSER_OUTPUT # ------------------------------------------------------------------------- FACTORY_DEF * TeeFactory FACTORY_NAME $(CONNECTION_DRAWER_WORKSPACE_NAME)_EXPRESSIONEVALUATOR INPUT FEATURE_TYPE $(CONNECTION_DRAWER_WORKSPACE_NAME)_ATTRIBUTEEXPOSER_OUTPUT OUTPUT FEATURE_TYPE $(CONNECTION_DRAWER_WORKSPACE_NAME)_EXPRESSIONEVALUATOR_OUTPUT _corners_to_draw @Evaluate("@Value(corners)-@Value(_corner)-1") # ------------------------------------------------------------------------- FACTORY_DEF * TeeFactory FACTORY_NAME $(CONNECTION_DRAWER_WORKSPACE_NAME)_CLONER INPUT FEATURE_TYPE $(CONNECTION_DRAWER_WORKSPACE_NAME)_EXPRESSIONEVALUATOR_OUTPUT NUMBER_OF_COPIES @Value(_corners_to_draw) COPY_NUMBER_ATTRIBUTE _copynum OUTPUT FEATURE_TYPE $(CONNECTION_DRAWER_WORKSPACE_NAME)_CLONER_COPY # ------------------------------------------------------------------------- FACTORY_DEF * TeeFactory FACTORY_NAME $(CONNECTION_DRAWER_WORKSPACE_NAME)_EXPRESSIONEVALUATOR_2 INPUT FEATURE_TYPE $(CONNECTION_DRAWER_WORKSPACE_NAME)_CLONER_COPY OUTPUT FEATURE_TYPE $(CONNECTION_DRAWER_WORKSPACE_NAME)_EXPRESSIONEVALUATOR_2_OUTPUT _copynum @Evaluate("@Value(_copynum)+@Value(_corner)") # ------------------------------------------------------------------------- FACTORY_DEF * TeeFactory FACTORY_NAME $(CONNECTION_DRAWER_WORKSPACE_NAME)_EXPRESSIONEVALUATOR_4 INPUT FEATURE_TYPE $(CONNECTION_DRAWER_WORKSPACE_NAME)_EXPRESSIONEVALUATOR_2_OUTPUT OUTPUT FEATURE_TYPE $(CONNECTION_DRAWER_WORKSPACE_NAME)_EXPRESSIONEVALUATOR_4_OUTPUT _corner_next @Evaluate("@Value(_copynum)+1") # ------------------------------------------------------------------------- TCL proc $(CONNECTION_DRAWER_WORKSPACE_NAME)_LISTINDEXER_indexer {index} { global FME_Attributes; regsub \"{}\" {poly_coord{}} \"{$index}\" listWithIndex; regsub \"{}\" {poly_coord{}} {} listBase; set complexListExp "$listWithIndex\."; set prefixLength [expr [string length $complexListExp]-1]; foreach attr [array names FME_Attributes] { if {$attr == $listWithIndex} { lappend attrsToCopy $listBase $attr; } elseif {[string first $complexListExp $attr] == 0} { set newAttr [string replace $attr 0 $prefixLength]; lappend attrsToCopy $newAttr $attr; }; }; if {[info exists attrsToCopy] && [llength $attrsToCopy] > 0} { eval FME_Execute CopyAttributes $attrsToCopy; }; } FACTORY_DEF * TeeFactory FACTORY_NAME $(CONNECTION_DRAWER_WORKSPACE_NAME)_LISTINDEXER INPUT FEATURE_TYPE $(CONNECTION_DRAWER_WORKSPACE_NAME)_EXPRESSIONEVALUATOR_4_OUTPUT OUTPUT FEATURE_TYPE $(CONNECTION_DRAWER_WORKSPACE_NAME)_LISTINDEXER_OUTPUT @TCL("$(CONNECTION_DRAWER_WORKSPACE_NAME)_LISTINDEXER_indexer @Value(_corner_next)") # ------------------------------------------------------------------------- FACTORY_DEF * TestFactory FACTORY_NAME $(CONNECTION_DRAWER_WORKSPACE_NAME)_2DPOINTREPLACER INPUT FEATURE_TYPE $(CONNECTION_DRAWER_WORKSPACE_NAME)_LISTINDEXER_OUTPUT TEST &fme_type = fme_text OUTPUT PASSED FEATURE_TYPE $(CONNECTION_DRAWER_WORKSPACE_NAME)_2DPOINTREPLACER_POINT @XValue("@Value(_X_own)",RESET) @YValue("@Value(_Y_own)") @Dimension(2) OUTPUT FAILED FEATURE_TYPE $(CONNECTION_DRAWER_WORKSPACE_NAME)_2DPOINTREPLACER_POINT @XValue("@Value(_X_own)",RESET) @YValue("@Value(_Y_own)") @Dimension(2) @GeometryType(fme_point) @SupplyAttributes(fme_type,fme_point) # ------------------------------------------------------------------------- Tcl2 proc $(CONNECTION_DRAWER_WORKSPACE_NAME)_2DPOINTADDER_2_geom_fixer {} { if {[FME_GetAttribute fme_type] == {fme_polygon}} { FME_SetAttribute fme_type fme_area } } FACTORY_DEF * TeeFactory FACTORY_NAME $(CONNECTION_DRAWER_WORKSPACE_NAME)_2DPOINTADDER_2 INPUT FEATURE_TYPE $(CONNECTION_DRAWER_WORKSPACE_NAME)_2DPOINTREPLACER_POINT OUTPUT FEATURE_TYPE $(CONNECTION_DRAWER_WORKSPACE_NAME)_2DPOINTADDER_2_OUTPUT @Dimension(2) @Tcl2("FME_Coordinates addCoord {@Value(_X)} {@Value(_Y)}") @GeometryType(fme_point) @GeometryType(fme_line) @GeometryType(fme_polygon) @SupplyAttributes(fme_type,@GeometryType()) @Tcl2($(CONNECTION_DRAWER_WORKSPACE_NAME)_2DPOINTADDER_2_geom_fixer) # ------------------------------------------------------------------------- INCLUDE [regsub "{}" poly_coord{} "{\[0-9\]+}" listWithIndex; append macroLine "MACRO $(CONNECTION_DRAWER_WORKSPACE_NAME)_LISTREMOVER_LIST_EXP ^" $listWithIndex; puts $macroLine; ] FACTORY_DEF * TeeFactory FACTORY_NAME $(CONNECTION_DRAWER_WORKSPACE_NAME)_LISTREMOVER INPUT FEATURE_TYPE $(CONNECTION_DRAWER_WORKSPACE_NAME)_2DPOINTADDER_2_OUTPUT OUTPUT FEATURE_TYPE $(CONNECTION_DRAWER_WORKSPACE_NAME)_LISTREMOVER_OUTPUT @RemoveAttributes(fme_regexp_match,"$($(CONNECTION_DRAWER_WORKSPACE_NAME)_LISTREMOVER_LIST_EXP)") # ------------------------------------------------------------------------- FACTORY_DEF * TeeFactory FACTORY_NAME $(CONNECTION_DRAWER_WORKSPACE_NAME)_ATTRIBUTEREMOVER INPUT FEATURE_TYPE $(CONNECTION_DRAWER_WORKSPACE_NAME)_LISTREMOVER_OUTPUT OUTPUT FEATURE_TYPE $(CONNECTION_DRAWER_WORKSPACE_NAME)_ATTRIBUTEREMOVER_OUTPUT @RemoveAttributes(_copynum,_corner,_corner_next,_corners_to_draw,_X,_X_own,_Y,_Y_own,corners,poly_coord) FACTORY_DEF * TeeFactory FACTORY_NAME "$(CONNECTION_DRAWER_WORKSPACE_NAME)_OUTPUT Output Collector" INPUT FEATURE_TYPE $(CONNECTION_DRAWER_WORKSPACE_NAME)_ATTRIBUTEREMOVER_OUTPUT OUTPUT FEATURE_TYPE $(CONNECTION_DRAWER_WORKSPACE_NAME)_OUTPUT FACTORY_DEF * TeeFactory FACTORY_NAME "$(POLYGON_CONNECTION_DRAWER_WORKSPACE_NAME)_CONNECTION_DRAWER OUTPUT Output Renamer/Nuker" INPUT FEATURE_TYPE $(POLYGON_CONNECTION_DRAWER_WORKSPACE_NAME)_CONNECTION_DRAWER_OUTPUT OUTPUT FEATURE_TYPE $(POLYGON_CONNECTION_DRAWER_WORKSPACE_NAME)_CONNECTION_DRAWER_OUTPUT FACTORY_DEF * TeeFactory FACTORY_NAME "$(POLYGON_CONNECTION_DRAWER_WORKSPACE_NAME)_ALL_CONNECTIONS Output Collector" INPUT FEATURE_TYPE $(POLYGON_CONNECTION_DRAWER_WORKSPACE_NAME)_CONNECTION_DRAWER_OUTPUT OUTPUT FEATURE_TYPE $(POLYGON_CONNECTION_DRAWER_WORKSPACE_NAME)_ALL_CONNECTIONS FACTORY_DEF * TeeFactory FACTORY_NAME "$(POLYGON_CONNECTION_DRAWER_WORKSPACE_NAME)_OUTLINE_ONLY Output Collector" INPUT FEATURE_TYPE $(POLYGON_CONNECTION_DRAWER_WORKSPACE_NAME)_OUTLINE_DRAWER_OUTPUT OUTPUT FEATURE_TYPE $(POLYGON_CONNECTION_DRAWER_WORKSPACE_NAME)_OUTLINE_ONLY FACTORY_DEF * TeeFactory FACTORY_NAME "POLYGON_CONNECTION_DRAWER ALL_CONNECTIONS Output Renamer/Nuker" INPUT FEATURE_TYPE POLYGON_CONNECTION_DRAWER_ALL_CONNECTIONS OUTPUT FEATURE_TYPE POLYGON_CONNECTION_DRAWER_ALL_CONNECTIONS FACTORY_DEF * TeeFactory FACTORY_NAME "POLYGON_CONNECTION_DRAWER OUTLINE_ONLY Output Renamer/Nuker" INPUT FEATURE_TYPE POLYGON_CONNECTION_DRAWER_OUTLINE_ONLY OUTPUT FEATURE_TYPE POLYGON_CONNECTION_DRAWER_OUTLINE_ONLY # ------------------------------------------------------------------------- # 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 _@Concatenate($catter)" ; } else { puts "MACRO CATMAC " ; }; set safeName "[regsub -all {[^a-zA-Z0-9]} {OUTLINE_ONLY} _]_[expr round(rand() * 1000000)]_[clock clicks]"; puts "MACRO SAFE_FFS_NAME $safeName"; ] # Make the temporary directory that the FFS files will live in. FACTORY_DEF * CreationFactory FACTORY_NAME OUTLINE_ONLY_DirCreator OUTPUT FEATURE_TYPE __nukeme__ @Tcl2("catch {file mkdir {$(WORKSPACE_TEMP_DIR)}}") FACTORY_DEF * TeeFactory FACTORY_NAME OUTLINE_ONLY_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 OUTLINE_ONLY_SetterUpper INPUT FEATURE_TYPE POLYGON_CONNECTION_DRAWER_OUTLINE_ONLY OUTPUT FEATURE_TYPE __viewme__ FACTORY_DEF * RecorderFactory FACTORY_NAME OUTLINE_ONLY_Recorder INPUT FEATURE_TYPE __viewme__ @FeatureType(OUTLINE_ONLY$(CATMAC)) FEATURE_FILE "$(WORKSPACE_TEMP_DIR)/$(SAFE_FFS_NAME).ffs" MODE RECORD_PASS_THROUGH FACTORY_DEF * CreationFactory FACTORY_NAME OUTLINE_ONLY_Trigger CREATE_AT_END OUTPUT FEATURE_TYPE __nukeme__ @TCL("lappend gVisualizerFilesToView $(SAFE_FFS_NAME)") FACTORY_DEF * TeeFactory FACTORY_NAME OUTLINE_ONLY_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 _@Concatenate($catter)" ; } else { puts "MACRO CATMAC " ; }; set safeName "[regsub -all {[^a-zA-Z0-9]} {ALL_CONNECTIONS} _]_[expr round(rand() * 1000000)]_[clock clicks]"; puts "MACRO SAFE_FFS_NAME $safeName"; ] # Make the temporary directory that the FFS files will live in. FACTORY_DEF * CreationFactory FACTORY_NAME ALL_CONNECTIONS_DirCreator OUTPUT FEATURE_TYPE __nukeme__ @Tcl2("catch {file mkdir {$(WORKSPACE_TEMP_DIR)}}") FACTORY_DEF * TeeFactory FACTORY_NAME ALL_CONNECTIONS_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 ALL_CONNECTIONS_SetterUpper INPUT FEATURE_TYPE POLYGON_CONNECTION_DRAWER_ALL_CONNECTIONS OUTPUT FEATURE_TYPE __viewme__ FACTORY_DEF * RecorderFactory FACTORY_NAME ALL_CONNECTIONS_Recorder INPUT FEATURE_TYPE __viewme__ @FeatureType(ALL_CONNECTIONS$(CATMAC)) FEATURE_FILE "$(WORKSPACE_TEMP_DIR)/$(SAFE_FFS_NAME).ffs" MODE RECORD_PASS_THROUGH FACTORY_DEF * CreationFactory FACTORY_NAME ALL_CONNECTIONS_Trigger CREATE_AT_END OUTPUT FEATURE_TYPE __nukeme__ @TCL("lappend gVisualizerFilesToView $(SAFE_FFS_NAME)") FACTORY_DEF * TeeFactory FACTORY_NAME ALL_CONNECTIONS_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__)) # ------------------------------------------------------------------------- DEFAULT_MACRO WORKSPACE_TEMP_DIR INCLUDE [ if {{$(WORKSPACE_TEMP_DIR)} == {}} { puts {MACRO __WB_ENABLE_VISUALIZER__ no} } else { puts {MACRO __WB_ENABLE_VISUALIZER__ *} } ] FACTORY_DEF $(__WB_ENABLE_VISUALIZER__) CreationFactory CREATE_AT_END OUTPUT FEATURE_TYPE __NUKEME__ @TCL("eval FME_Execute System \173fmeview /ownffs {$(WORKSPACE_TEMP_DIR)} $gVisualizerFilesToView & }") FACTORY_DEF * TeeFactory INPUT FEATURE_TYPE __NUKEME__