#! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! DEFAULT_MACRO VAL 100 DEFAULT_MACRO VAL_2 0.75 DEFAULT_MACRO VAL_3 2 INCLUDE [ if {{$(VAL_3)} == {}} { puts_real {Parameter VAL_3 must be given a value on the commandline.}; exit 1; }; ] #! START_HEADER FME_MINIMUM_BUILD 2651 ################################### # Tree of Pythagoras # Author: Habarta # Date: Aug 2006 ################################### #! 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)tree_of_pythagoras.log" LOG_APPEND NO # ------------------------------------------------------------------------- MULTI_READER_CONTINUE_ON_READER_FAILURE No # ------------------------------------------------------------------------- MACRO WORKSPACE_NAME tree_of_pythagoras # ------------------------------------------------------------------------- FACTORY_DEF * CreationFactory FACTORY_NAME 2DCREATOR 2D_GEOMETRY 100 100 CREATE_AT_END no NUMBER_TO_CREATE 1 OUTPUT FEATURE_TYPE 2DCREATOR_CREATED @SupplyAttributes(?,creation_instance,0) @RenameAttributes(_creation_instance,creation_instance) # ------------------------------------------------------------------------- FACTORY_DEF * TestFactory FACTORY_NAME COORDINATEFETCHER INPUT FEATURE_TYPE 2DCREATOR_CREATED TEST @Dimension() == 2 OUTPUT PASSED FEATURE_TYPE COORDINATEFETCHER_OUTPUT _x @Coordinate(x,0,FLATTEN_AGGREGATE) _y @Coordinate(y,0,FLATTEN_AGGREGATE) @SupplyAttributes(_z,-9999) OUTPUT FAILED FEATURE_TYPE COORDINATEFETCHER_OUTPUT _x @Coordinate(x,0,FLATTEN_AGGREGATE) _y @Coordinate(y,0,FLATTEN_AGGREGATE) _z @Coordinate(z,0,FLATTEN_AGGREGATE) # ------------------------------------------------------------------------- # 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 ATTRIBUTEEXPOSER INPUT FEATURE_TYPE COORDINATEFETCHER_OUTPUT OUTPUT FEATURE_TYPE ATTRIBUTEEXPOSER_OUTPUT # ------------------------------------------------------------------------- FACTORY_DEF * TeeFactory FACTORY_NAME ATTRIBUTESETTER_SIZE INPUT FEATURE_TYPE ATTRIBUTEEXPOSER_OUTPUT OUTPUT FEATURE_TYPE ATTRIBUTESETTER_SIZE_OUTPUT @SupplyAttributes(size,"$(VAL)") # ------------------------------------------------------------------------- FACTORY_DEF * TeeFactory FACTORY_NAME EXPRESSIONEVALUATOR INPUT FEATURE_TYPE ATTRIBUTESETTER_SIZE_OUTPUT OUTPUT FEATURE_TYPE EXPRESSIONEVALUATOR_OUTPUT llx @Evaluate("@Value(_x)-(@Value(size)/2.)") # ------------------------------------------------------------------------- FACTORY_DEF * TeeFactory FACTORY_NAME EXPRESSIONEVALUATOR_2 INPUT FEATURE_TYPE EXPRESSIONEVALUATOR_OUTPUT OUTPUT FEATURE_TYPE EXPRESSIONEVALUATOR_2_OUTPUT lly @Evaluate("@Value(_y)-(@Value(size)/2.)") # ------------------------------------------------------------------------- FACTORY_DEF * TeeFactory FACTORY_NAME EXPRESSIONEVALUATOR_3 INPUT FEATURE_TYPE EXPRESSIONEVALUATOR_2_OUTPUT OUTPUT FEATURE_TYPE EXPRESSIONEVALUATOR_3_OUTPUT urx @Evaluate("@Value(_x)+(@Value(size)/2.)") # ------------------------------------------------------------------------- FACTORY_DEF * TeeFactory FACTORY_NAME EXPRESSIONEVALUATOR_4 INPUT FEATURE_TYPE EXPRESSIONEVALUATOR_3_OUTPUT OUTPUT FEATURE_TYPE EXPRESSIONEVALUATOR_4_OUTPUT ury @Evaluate("@Value(_y)+(@Value(size)/2.)") # ------------------------------------------------------------------------- FACTORY_DEF * TeeFactory FACTORY_NAME 2DBOXREPLACER INPUT FEATURE_TYPE EXPRESSIONEVALUATOR_4_OUTPUT OUTPUT FEATURE_TYPE 2DBOXREPLACER_BOX @Dimension(2) @XValue(@Value(llx),RESET) @YValue(@Value(lly)) @XValue(@Value(llx)) @YValue(@Value(ury)) @XValue(@Value(urx)) @YValue(@Value(ury)) @XValue(@Value(urx)) @YValue(@Value(lly)) @XValue(@Value(llx)) @YValue(@Value(lly)) @GeometryType(fme_polygon) @SupplyAttributes(fme_type,fme_area) # ------------------------------------------------------------------------- # 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 ATTRIBUTEEXPOSER_2 INPUT FEATURE_TYPE 2DBOXREPLACER_BOX OUTPUT FEATURE_TYPE ATTRIBUTEEXPOSER_2_OUTPUT # ------------------------------------------------------------------------- FACTORY_DEF * TeeFactory FACTORY_NAME ATTRIBUTESETTER_RATIO INPUT FEATURE_TYPE ATTRIBUTEEXPOSER_2_OUTPUT OUTPUT FEATURE_TYPE ATTRIBUTESETTER_RATIO_OUTPUT @SupplyAttributes(ratio,"$(VAL_2)") # ------------------------------------------------------------------------- FACTORY_DEF * TeeFactory FACTORY_NAME EXPRESSIONEVALUATOR_9 INPUT FEATURE_TYPE ATTRIBUTESETTER_RATIO_OUTPUT OUTPUT FEATURE_TYPE EXPRESSIONEVALUATOR_9_OUTPUT size_a @Evaluate("sqrt(pow(@Value(size),2)/(1+1/pow(@Value(ratio),2)))") # ------------------------------------------------------------------------- FACTORY_DEF * TeeFactory FACTORY_NAME EXPRESSIONEVALUATOR_10 INPUT FEATURE_TYPE EXPRESSIONEVALUATOR_9_OUTPUT OUTPUT FEATURE_TYPE EXPRESSIONEVALUATOR_10_OUTPUT size_b @Evaluate("@Value(size_a)/@Value(ratio)") # ------------------------------------------------------------------------- FACTORY_DEF * TeeFactory FACTORY_NAME ATTRIBUTECREATOR INPUT FEATURE_TYPE EXPRESSIONEVALUATOR_10_OUTPUT OUTPUT FEATURE_TYPE ATTRIBUTECREATOR_OUTPUT @SupplyAttributes(angle,0,scale_factor,1) # ------------------------------------------------------------------------- FACTORY_DEF * TeeFactory FACTORY_NAME EXPRESSIONEVALUATOR_5 INPUT FEATURE_TYPE ATTRIBUTECREATOR_OUTPUT OUTPUT FEATURE_TYPE EXPRESSIONEVALUATOR_5_OUTPUT rotation_incr_1 @Evaluate("atan(@Value(size_a)*1.0/@Value(size_b))*180/3.14159265359") # ------------------------------------------------------------------------- FACTORY_DEF * TeeFactory FACTORY_NAME EXPRESSIONEVALUATOR_8 INPUT FEATURE_TYPE EXPRESSIONEVALUATOR_5_OUTPUT OUTPUT FEATURE_TYPE EXPRESSIONEVALUATOR_8_OUTPUT rotation_incr_2 @Evaluate("360.0-(90.0-@Value(rotation_incr_1))") # ------------------------------------------------------------------------- FACTORY_DEF * TeeFactory FACTORY_NAME EXPRESSIONEVALUATOR_6 INPUT FEATURE_TYPE EXPRESSIONEVALUATOR_8_OUTPUT OUTPUT FEATURE_TYPE EXPRESSIONEVALUATOR_6_OUTPUT scale_1 @Evaluate("sqrt(pow(@Value(size),2)-pow(@Value(size_a),2))/@Value(size)*@Value(scale_factor)") # ------------------------------------------------------------------------- FACTORY_DEF * TeeFactory FACTORY_NAME EXPRESSIONEVALUATOR_7 INPUT FEATURE_TYPE EXPRESSIONEVALUATOR_6_OUTPUT OUTPUT FEATURE_TYPE EXPRESSIONEVALUATOR_7_OUTPUT scale_2 @Evaluate("sqrt(pow(@Value(size),2)-pow(@Value(size_b),2))/@Value(size)*@Value(scale_factor)") # ------------------------------------------------------------------------- FACTORY_DEF * TeeFactory FACTORY_NAME "PYTHAGORAS_TREE_LOOP INPUT Input Collector" INPUT FEATURE_TYPE EXPRESSIONEVALUATOR_7_OUTPUT OUTPUT FEATURE_TYPE PYTHAGORAS_TREE_LOOP_INPUT MACRO PYTHAGORAS_TREE_LOOP_WORKSPACE_NAME PYTHAGORAS_TREE_LOOP MACRO $(PYTHAGORAS_TREE_LOOP_WORKSPACE_NAME)_XFORMER_NAME PYTHAGORAS_TREE_LOOP MACRO $(PYTHAGORAS_TREE_LOOP_WORKSPACE_NAME)_VAL $(VAL_3) MACRO $(PYTHAGORAS_TREE_LOOP_WORKSPACE_NAME)_SUB_DOC_NAME PYTHAGORAS_TREE_LOOP DEFAULT_MACRO PYTHAGORAS_TREE_LOOP_WORKSPACE_NAME "" FACTORY_DEF * TeeFactory FACTORY_NAME "$(PYTHAGORAS_TREE_LOOP_WORKSPACE_NAME)_INPUT Input Splitter" INPUT FEATURE_TYPE $(PYTHAGORAS_TREE_LOOP_WORKSPACE_NAME)_INPUT OUTPUT FEATURE_TYPE $(PYTHAGORAS_TREE_LOOP_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 $(PYTHAGORAS_TREE_LOOP_WORKSPACE_NAME)_ATTRIBUTEEXPOSER INPUT FEATURE_TYPE $(PYTHAGORAS_TREE_LOOP_WORKSPACE_NAME)_INPUT OUTPUT FEATURE_TYPE $(PYTHAGORAS_TREE_LOOP_WORKSPACE_NAME)_ATTRIBUTEEXPOSER_OUTPUT # ------------------------------------------------------------------------- FACTORY_DEF * TeeFactory FACTORY_NAME $(PYTHAGORAS_TREE_LOOP_WORKSPACE_NAME)_ATTRIBUTESETTER INPUT FEATURE_TYPE $(PYTHAGORAS_TREE_LOOP_WORKSPACE_NAME)_ATTRIBUTEEXPOSER_OUTPUT OUTPUT FEATURE_TYPE $(PYTHAGORAS_TREE_LOOP_WORKSPACE_NAME)_ATTRIBUTESETTER_OUTPUT @SupplyAttributes(size_threshhold,"$($(PYTHAGORAS_TREE_LOOP_WORKSPACE_NAME)_VAL)") # ------------------------------------------------------------------------- FACTORY_DEF * TestFactory FACTORY_NAME $(PYTHAGORAS_TREE_LOOP_WORKSPACE_NAME)_TESTER INPUT FEATURE_TYPE $(PYTHAGORAS_TREE_LOOP_WORKSPACE_NAME)_ATTRIBUTESETTER_OUTPUT TEST @Value(size) > @Value(size_threshhold) BOOLEAN_OPERATOR OR OUTPUT PASSED FEATURE_TYPE $(PYTHAGORAS_TREE_LOOP_WORKSPACE_NAME)_TESTER_PASSED OUTPUT FAILED FEATURE_TYPE $(PYTHAGORAS_TREE_LOOP_WORKSPACE_NAME)_TESTER_FAILED FACTORY_DEF * TeeFactory FACTORY_NAME "$(PYTHAGORAS_TREE_LOOP_WORKSPACE_NAME)_TESTER PASSED Splitter" INPUT FEATURE_TYPE $(PYTHAGORAS_TREE_LOOP_WORKSPACE_NAME)_TESTER_PASSED OUTPUT FEATURE_TYPE $(PYTHAGORAS_TREE_LOOP_WORKSPACE_NAME)_TESTER_PASSED_0 OUTPUT FEATURE_TYPE $(PYTHAGORAS_TREE_LOOP_WORKSPACE_NAME)_TESTER_PASSED_1 # ------------------------------------------------------------------------- INCLUDE [ puts "MACRO REAL_RATE [expr 1 * 1 ]" ] FACTORY_DEF * SamplingFactory FACTORY_NAME $(PYTHAGORAS_TREE_LOOP_WORKSPACE_NAME)_SAMPLER_Sampler SAMPLE_RATE $(REAL_RATE) INPUT FEATURE_TYPE $(PYTHAGORAS_TREE_LOOP_WORKSPACE_NAME)_TESTER_FAILED OUTPUT SAMPLED FEATURE_TYPE ___SAMPLED___ FACTORY_DEF * TeeFactory FACTORY_NAME $(PYTHAGORAS_TREE_LOOP_WORKSPACE_NAME)_SAMPLER_SamplerOutput INPUT FEATURE_TYPE ___SAMPLED___ OUTPUT FEATURE_TYPE $(PYTHAGORAS_TREE_LOOP_WORKSPACE_NAME)_SAMPLER_SAMPLED # ------------------------------------------------------------------------- FACTORY_DEF * TeeFactory FACTORY_NAME $(PYTHAGORAS_TREE_LOOP_WORKSPACE_NAME)_ATTRIBUTEREMOVER INPUT FEATURE_TYPE $(PYTHAGORAS_TREE_LOOP_WORKSPACE_NAME)_TESTER_PASSED_1 OUTPUT FEATURE_TYPE $(PYTHAGORAS_TREE_LOOP_WORKSPACE_NAME)_ATTRIBUTEREMOVER_OUTPUT @RemoveAttributes(_creation_instance,_x,_y,_z,llx,lly,ratio_a,ratio_b,rotation_incr_1,rotation_incr_2,scale_1,scale_2,scale_factor,urx,ury) # ------------------------------------------------------------------------- FACTORY_DEF * TeeFactory FACTORY_NAME $(PYTHAGORAS_TREE_LOOP_WORKSPACE_NAME)_CLONER INPUT FEATURE_TYPE $(PYTHAGORAS_TREE_LOOP_WORKSPACE_NAME)_TESTER_PASSED_0 NUMBER_OF_COPIES 2 COPY_NUMBER_ATTRIBUTE _copynum OUTPUT FEATURE_TYPE $(PYTHAGORAS_TREE_LOOP_WORKSPACE_NAME)_CLONER_COPY # ------------------------------------------------------------------------- Lookup $(PYTHAGORAS_TREE_LOOP_WORKSPACE_NAME)_ATTRIBUTEFILTER_AttributeFilterLut 0 ok 1 ok "" notok FACTORY_DEF * TestFactory FACTORY_NAME $(PYTHAGORAS_TREE_LOOP_WORKSPACE_NAME)_ATTRIBUTEFILTER_Filter INPUT FEATURE_TYPE $(PYTHAGORAS_TREE_LOOP_WORKSPACE_NAME)_CLONER_COPY TEST @Lookup($(PYTHAGORAS_TREE_LOOP_WORKSPACE_NAME)_ATTRIBUTEFILTER_AttributeFilterLut,&_copynum) == "ok" OUTPUT PASSED FEATURE_TYPE * @FeatureType($(PYTHAGORAS_TREE_LOOP_WORKSPACE_NAME)_ATTRIBUTEFILTER_&_copynum) OUTPUT FAILED FEATURE_TYPE $(PYTHAGORAS_TREE_LOOP_WORKSPACE_NAME)_ATTRIBUTEFILTER_ FACTORY_DEF * TestFactory FACTORY_NAME $(PYTHAGORAS_TREE_LOOP_WORKSPACE_NAME)_ATTRIBUTEFILTER_BlankFilter INPUT FEATURE_TYPE $(PYTHAGORAS_TREE_LOOP_WORKSPACE_NAME)_ATTRIBUTEFILTER_ TEST @Value(_copynum) == "" OUTPUT PASSED FEATURE_TYPE $(PYTHAGORAS_TREE_LOOP_WORKSPACE_NAME)_ATTRIBUTEFILTER_ OUTPUT FAILED FEATURE_TYPE $(PYTHAGORAS_TREE_LOOP_WORKSPACE_NAME)_ATTRIBUTEFILTER_ FACTORY_DEF * TeeFactory FACTORY_NAME "$(PYTHAGORAS_TREE_LOOP_WORKSPACE_NAME)_ATTRIBUTEFILTER Output Nuker" INPUT FEATURE_TYPE $(PYTHAGORAS_TREE_LOOP_WORKSPACE_NAME)_ATTRIBUTEFILTER_ FACTORY_DEF * TeeFactory FACTORY_NAME "$(PYTHAGORAS_TREE_LOOP_WORKSPACE_NAME)_ATTRIBUTEFILTER Output Nuker" INPUT FEATURE_TYPE $(PYTHAGORAS_TREE_LOOP_WORKSPACE_NAME)_ATTRIBUTEFILTER_ # ------------------------------------------------------------------------- FACTORY_DEF * TeeFactory FACTORY_NAME "$(PYTHAGORAS_TREE_LOOP_WORKSPACE_NAME)_SHIFTER_2 INPUT Input Collector" INPUT FEATURE_TYPE $(PYTHAGORAS_TREE_LOOP_WORKSPACE_NAME)_ATTRIBUTEFILTER_1 OUTPUT FEATURE_TYPE $(PYTHAGORAS_TREE_LOOP_WORKSPACE_NAME)_SHIFTER_2_INPUT MACRO SHIFTER_WORKSPACE_NAME $(PYTHAGORAS_TREE_LOOP_WORKSPACE_NAME)_SHIFTER_2 MACRO $(SHIFTER_WORKSPACE_NAME)_XFORMER_NAME $(PYTHAGORAS_TREE_LOOP_WORKSPACE_NAME)_SHIFTER_2 MACRO $(SHIFTER_WORKSPACE_NAME)_SUB_DOC_NAME SHIFTER DEFAULT_MACRO SHIFTER_WORKSPACE_NAME "" FACTORY_DEF * TeeFactory FACTORY_NAME "$(SHIFTER_WORKSPACE_NAME)_INPUT Input Splitter" INPUT FEATURE_TYPE $(SHIFTER_WORKSPACE_NAME)_INPUT OUTPUT FEATURE_TYPE $(SHIFTER_WORKSPACE_NAME)_INPUT # ------------------------------------------------------------------------- FACTORY_DEF * TeeFactory FACTORY_NAME $(SHIFTER_WORKSPACE_NAME)_EXPRESSIONEVALUATOR_X_SHIFT INPUT FEATURE_TYPE $(SHIFTER_WORKSPACE_NAME)_INPUT OUTPUT FEATURE_TYPE $(SHIFTER_WORKSPACE_NAME)_EXPRESSIONEVALUATOR_X_SHIFT_OUTPUT _x_shift @Evaluate("-1.0*@Value(size)*sin(@Value(angle)*3.14159265359/180)") # ------------------------------------------------------------------------- FACTORY_DEF * TeeFactory FACTORY_NAME $(SHIFTER_WORKSPACE_NAME)_EXPRESSIONEVALUATOR_Y_SHIFT INPUT FEATURE_TYPE $(SHIFTER_WORKSPACE_NAME)_EXPRESSIONEVALUATOR_X_SHIFT_OUTPUT OUTPUT FEATURE_TYPE $(SHIFTER_WORKSPACE_NAME)_EXPRESSIONEVALUATOR_Y_SHIFT_OUTPUT _y_shift @Evaluate("1.0*@Value(size)*cos(@Value(angle)*3.14159265359/180)") # ------------------------------------------------------------------------- FACTORY_DEF * TeeFactory FACTORY_NAME $(SHIFTER_WORKSPACE_NAME)_OFFSETTER INPUT FEATURE_TYPE $(SHIFTER_WORKSPACE_NAME)_EXPRESSIONEVALUATOR_Y_SHIFT_OUTPUT OUTPUT FEATURE_TYPE $(SHIFTER_WORKSPACE_NAME)_OFFSETTER_OFFSET @Offset(@Value(_x_shift),@Value(_y_shift),0) FACTORY_DEF * TeeFactory FACTORY_NAME "$(SHIFTER_WORKSPACE_NAME)_OUTPUT Output Collector" INPUT FEATURE_TYPE $(SHIFTER_WORKSPACE_NAME)_OFFSETTER_OFFSET OUTPUT FEATURE_TYPE $(SHIFTER_WORKSPACE_NAME)_OUTPUT FACTORY_DEF * TeeFactory FACTORY_NAME "$(PYTHAGORAS_TREE_LOOP_WORKSPACE_NAME)_SHIFTER_2 OUTPUT Output Renamer/Nuker" INPUT FEATURE_TYPE $(PYTHAGORAS_TREE_LOOP_WORKSPACE_NAME)_SHIFTER_2_OUTPUT OUTPUT FEATURE_TYPE $(PYTHAGORAS_TREE_LOOP_WORKSPACE_NAME)_SHIFTER_2_OUTPUT # ------------------------------------------------------------------------- FACTORY_DEF * TestFactory FACTORY_NAME $(PYTHAGORAS_TREE_LOOP_WORKSPACE_NAME)_COORDINATEFETCHER_2 INPUT FEATURE_TYPE $(PYTHAGORAS_TREE_LOOP_WORKSPACE_NAME)_SHIFTER_2_OUTPUT TEST @Dimension() == 2 OUTPUT PASSED FEATURE_TYPE $(PYTHAGORAS_TREE_LOOP_WORKSPACE_NAME)_COORDINATEFETCHER_2_OUTPUT _x_new @Coordinate(x,3,FLATTEN_AGGREGATE) _y_new @Coordinate(y,3,FLATTEN_AGGREGATE) @SupplyAttributes(_z,-9999) OUTPUT FAILED FEATURE_TYPE $(PYTHAGORAS_TREE_LOOP_WORKSPACE_NAME)_COORDINATEFETCHER_2_OUTPUT _x_new @Coordinate(x,3,FLATTEN_AGGREGATE) _y_new @Coordinate(y,3,FLATTEN_AGGREGATE) _z @Coordinate(z,3,FLATTEN_AGGREGATE) # ------------------------------------------------------------------------- FACTORY_DEF * TeeFactory FACTORY_NAME $(PYTHAGORAS_TREE_LOOP_WORKSPACE_NAME)_ROTATOR_2 INPUT FEATURE_TYPE $(PYTHAGORAS_TREE_LOOP_WORKSPACE_NAME)_COORDINATEFETCHER_2_OUTPUT OUTPUT FEATURE_TYPE $(PYTHAGORAS_TREE_LOOP_WORKSPACE_NAME)_ROTATOR_2_ROTATED @Rotate2D(@Value(rotation_incr_2),@Value(_x_new),@Value(_y_new)) # ------------------------------------------------------------------------- FACTORY_DEF * TeeFactory FACTORY_NAME $(PYTHAGORAS_TREE_LOOP_WORKSPACE_NAME)_EXPRESSIONEVALUATOR_10 INPUT FEATURE_TYPE $(PYTHAGORAS_TREE_LOOP_WORKSPACE_NAME)_ROTATOR_2_ROTATED OUTPUT FEATURE_TYPE $(PYTHAGORAS_TREE_LOOP_WORKSPACE_NAME)_EXPRESSIONEVALUATOR_10_OUTPUT angle @Evaluate("@Value(angle)+@Value(rotation_incr_2)") # ------------------------------------------------------------------------- FACTORY_DEF * TeeFactory FACTORY_NAME $(PYTHAGORAS_TREE_LOOP_WORKSPACE_NAME)_EXPRESSIONEVALUATOR_2 INPUT FEATURE_TYPE $(PYTHAGORAS_TREE_LOOP_WORKSPACE_NAME)_EXPRESSIONEVALUATOR_10_OUTPUT OUTPUT FEATURE_TYPE $(PYTHAGORAS_TREE_LOOP_WORKSPACE_NAME)_EXPRESSIONEVALUATOR_2_OUTPUT angle @Evaluate("@Value(angle)-(int(@Value(angle)/360)*360)") # ------------------------------------------------------------------------- FACTORY_DEF * TeeFactory FACTORY_NAME "$(PYTHAGORAS_TREE_LOOP_WORKSPACE_NAME)_ZOOM_SCALER_2 INPUT Input Collector" INPUT FEATURE_TYPE $(PYTHAGORAS_TREE_LOOP_WORKSPACE_NAME)_EXPRESSIONEVALUATOR_2_OUTPUT OUTPUT FEATURE_TYPE $(PYTHAGORAS_TREE_LOOP_WORKSPACE_NAME)_ZOOM_SCALER_2_INPUT MACRO ZOOM_SCALER_WORKSPACE_NAME $(PYTHAGORAS_TREE_LOOP_WORKSPACE_NAME)_ZOOM_SCALER_2 MACRO $(ZOOM_SCALER_WORKSPACE_NAME)_XFORMER_NAME $(PYTHAGORAS_TREE_LOOP_WORKSPACE_NAME)_ZOOM_SCALER_2 MACRO $(ZOOM_SCALER_WORKSPACE_NAME)_XSCALE @Value(scale_2) MACRO $(ZOOM_SCALER_WORKSPACE_NAME)_SUB_DOC_NAME ZOOM_SCALER DEFAULT_MACRO ZOOM_SCALER_WORKSPACE_NAME "" FACTORY_DEF * TeeFactory FACTORY_NAME "$(ZOOM_SCALER_WORKSPACE_NAME)_INPUT Input Splitter" INPUT FEATURE_TYPE $(ZOOM_SCALER_WORKSPACE_NAME)_INPUT OUTPUT FEATURE_TYPE $(ZOOM_SCALER_WORKSPACE_NAME)_INPUT # ------------------------------------------------------------------------- FACTORY_DEF * TeeFactory FACTORY_NAME $(ZOOM_SCALER_WORKSPACE_NAME)_EXPRESSIONEVALUATOR_8 INPUT FEATURE_TYPE $(ZOOM_SCALER_WORKSPACE_NAME)_INPUT OUTPUT FEATURE_TYPE $(ZOOM_SCALER_WORKSPACE_NAME)_EXPRESSIONEVALUATOR_8_OUTPUT _x_new_shift @Evaluate("@Value(_x_new)*-1.0") # ------------------------------------------------------------------------- FACTORY_DEF * TeeFactory FACTORY_NAME $(ZOOM_SCALER_WORKSPACE_NAME)_EXPRESSIONEVALUATOR_9 INPUT FEATURE_TYPE $(ZOOM_SCALER_WORKSPACE_NAME)_EXPRESSIONEVALUATOR_8_OUTPUT OUTPUT FEATURE_TYPE $(ZOOM_SCALER_WORKSPACE_NAME)_EXPRESSIONEVALUATOR_9_OUTPUT _y_new_shift @Evaluate("@Value(_y_new)*-1.0") # ------------------------------------------------------------------------- FACTORY_DEF * TeeFactory FACTORY_NAME $(ZOOM_SCALER_WORKSPACE_NAME)_OFFSETTER_2 INPUT FEATURE_TYPE $(ZOOM_SCALER_WORKSPACE_NAME)_EXPRESSIONEVALUATOR_9_OUTPUT OUTPUT FEATURE_TYPE $(ZOOM_SCALER_WORKSPACE_NAME)_OFFSETTER_2_OFFSET @Offset(@Value(_x_new_shift),@Value(_y_new_shift),0) # ------------------------------------------------------------------------- FACTORY_DEF * TeeFactory FACTORY_NAME $(ZOOM_SCALER_WORKSPACE_NAME)_SCALER INPUT FEATURE_TYPE $(ZOOM_SCALER_WORKSPACE_NAME)_OFFSETTER_2_OFFSET OUTPUT FEATURE_TYPE $(ZOOM_SCALER_WORKSPACE_NAME)_SCALER_SCALED @Scale($($(ZOOM_SCALER_WORKSPACE_NAME)_XSCALE),$($(ZOOM_SCALER_WORKSPACE_NAME)_XSCALE),1) # ------------------------------------------------------------------------- FACTORY_DEF * TeeFactory FACTORY_NAME $(ZOOM_SCALER_WORKSPACE_NAME)_OFFSETTER_3 INPUT FEATURE_TYPE $(ZOOM_SCALER_WORKSPACE_NAME)_SCALER_SCALED OUTPUT FEATURE_TYPE $(ZOOM_SCALER_WORKSPACE_NAME)_OFFSETTER_3_OFFSET @Offset(@Value(_x_new),@Value(_y_new),0) FACTORY_DEF * TeeFactory FACTORY_NAME "$(ZOOM_SCALER_WORKSPACE_NAME)_OUTPUT Output Collector" INPUT FEATURE_TYPE $(ZOOM_SCALER_WORKSPACE_NAME)_OFFSETTER_3_OFFSET OUTPUT FEATURE_TYPE $(ZOOM_SCALER_WORKSPACE_NAME)_OUTPUT FACTORY_DEF * TeeFactory FACTORY_NAME "$(PYTHAGORAS_TREE_LOOP_WORKSPACE_NAME)_ZOOM_SCALER_2 OUTPUT Output Renamer/Nuker" INPUT FEATURE_TYPE $(PYTHAGORAS_TREE_LOOP_WORKSPACE_NAME)_ZOOM_SCALER_2_OUTPUT OUTPUT FEATURE_TYPE $(PYTHAGORAS_TREE_LOOP_WORKSPACE_NAME)_ZOOM_SCALER_2_OUTPUT # ------------------------------------------------------------------------- FACTORY_DEF * TeeFactory FACTORY_NAME $(PYTHAGORAS_TREE_LOOP_WORKSPACE_NAME)_EXPRESSIONEVALUATOR_12 INPUT FEATURE_TYPE $(PYTHAGORAS_TREE_LOOP_WORKSPACE_NAME)_ZOOM_SCALER_2_OUTPUT OUTPUT FEATURE_TYPE $(PYTHAGORAS_TREE_LOOP_WORKSPACE_NAME)_EXPRESSIONEVALUATOR_12_OUTPUT scale_factor @Evaluate("@Value(scale_factor)*@Value(scale_2)") # ------------------------------------------------------------------------- FACTORY_DEF * TeeFactory FACTORY_NAME $(PYTHAGORAS_TREE_LOOP_WORKSPACE_NAME)_EXPRESSIONEVALUATOR_14 INPUT FEATURE_TYPE $(PYTHAGORAS_TREE_LOOP_WORKSPACE_NAME)_EXPRESSIONEVALUATOR_12_OUTPUT OUTPUT FEATURE_TYPE $(PYTHAGORAS_TREE_LOOP_WORKSPACE_NAME)_EXPRESSIONEVALUATOR_14_OUTPUT size @Evaluate("@Value(size)*@Value(scale_2)") # ------------------------------------------------------------------------- FACTORY_DEF * TeeFactory FACTORY_NAME $(PYTHAGORAS_TREE_LOOP_WORKSPACE_NAME)_ATTRIBUTEREMOVER_2 INPUT FEATURE_TYPE $(PYTHAGORAS_TREE_LOOP_WORKSPACE_NAME)_EXPRESSIONEVALUATOR_14_OUTPUT OUTPUT FEATURE_TYPE $(PYTHAGORAS_TREE_LOOP_WORKSPACE_NAME)_ATTRIBUTEREMOVER_2_OUTPUT @RemoveAttributes(_copynum,_creation_instance,_x,_x_new,_x_new_shift,_x_shift,_y,_y_new,_y_new_shift,_y_shift,_z,llx,lly,urx,ury) # ------------------------------------------------------------------------- FACTORY_DEF * TeeFactory FACTORY_NAME "$(PYTHAGORAS_TREE_LOOP_WORKSPACE_NAME)_SHIFTER_1 INPUT Input Collector" INPUT FEATURE_TYPE $(PYTHAGORAS_TREE_LOOP_WORKSPACE_NAME)_ATTRIBUTEFILTER_0 OUTPUT FEATURE_TYPE $(PYTHAGORAS_TREE_LOOP_WORKSPACE_NAME)_SHIFTER_1_INPUT MACRO SHIFTER_WORKSPACE_NAME $(PYTHAGORAS_TREE_LOOP_WORKSPACE_NAME)_SHIFTER_1 MACRO $(SHIFTER_WORKSPACE_NAME)_XFORMER_NAME $(PYTHAGORAS_TREE_LOOP_WORKSPACE_NAME)_SHIFTER_1 MACRO $(SHIFTER_WORKSPACE_NAME)_SUB_DOC_NAME SHIFTER DEFAULT_MACRO SHIFTER_WORKSPACE_NAME "" FACTORY_DEF * TeeFactory FACTORY_NAME "$(SHIFTER_WORKSPACE_NAME)_INPUT Input Splitter" INPUT FEATURE_TYPE $(SHIFTER_WORKSPACE_NAME)_INPUT OUTPUT FEATURE_TYPE $(SHIFTER_WORKSPACE_NAME)_INPUT # ------------------------------------------------------------------------- FACTORY_DEF * TeeFactory FACTORY_NAME $(SHIFTER_WORKSPACE_NAME)_EXPRESSIONEVALUATOR_X_SHIFT INPUT FEATURE_TYPE $(SHIFTER_WORKSPACE_NAME)_INPUT OUTPUT FEATURE_TYPE $(SHIFTER_WORKSPACE_NAME)_EXPRESSIONEVALUATOR_X_SHIFT_OUTPUT _x_shift @Evaluate("-1.0*@Value(size)*sin(@Value(angle)*3.14159265359/180)") # ------------------------------------------------------------------------- FACTORY_DEF * TeeFactory FACTORY_NAME $(SHIFTER_WORKSPACE_NAME)_EXPRESSIONEVALUATOR_Y_SHIFT INPUT FEATURE_TYPE $(SHIFTER_WORKSPACE_NAME)_EXPRESSIONEVALUATOR_X_SHIFT_OUTPUT OUTPUT FEATURE_TYPE $(SHIFTER_WORKSPACE_NAME)_EXPRESSIONEVALUATOR_Y_SHIFT_OUTPUT _y_shift @Evaluate("1.0*@Value(size)*cos(@Value(angle)*3.14159265359/180)") # ------------------------------------------------------------------------- FACTORY_DEF * TeeFactory FACTORY_NAME $(SHIFTER_WORKSPACE_NAME)_OFFSETTER INPUT FEATURE_TYPE $(SHIFTER_WORKSPACE_NAME)_EXPRESSIONEVALUATOR_Y_SHIFT_OUTPUT OUTPUT FEATURE_TYPE $(SHIFTER_WORKSPACE_NAME)_OFFSETTER_OFFSET @Offset(@Value(_x_shift),@Value(_y_shift),0) FACTORY_DEF * TeeFactory FACTORY_NAME "$(SHIFTER_WORKSPACE_NAME)_OUTPUT Output Collector" INPUT FEATURE_TYPE $(SHIFTER_WORKSPACE_NAME)_OFFSETTER_OFFSET OUTPUT FEATURE_TYPE $(SHIFTER_WORKSPACE_NAME)_OUTPUT FACTORY_DEF * TeeFactory FACTORY_NAME "$(PYTHAGORAS_TREE_LOOP_WORKSPACE_NAME)_SHIFTER_1 OUTPUT Output Renamer/Nuker" INPUT FEATURE_TYPE $(PYTHAGORAS_TREE_LOOP_WORKSPACE_NAME)_SHIFTER_1_OUTPUT OUTPUT FEATURE_TYPE $(PYTHAGORAS_TREE_LOOP_WORKSPACE_NAME)_SHIFTER_1_OUTPUT # ------------------------------------------------------------------------- FACTORY_DEF * TestFactory FACTORY_NAME $(PYTHAGORAS_TREE_LOOP_WORKSPACE_NAME)_COORDINATEFETCHER_3 INPUT FEATURE_TYPE $(PYTHAGORAS_TREE_LOOP_WORKSPACE_NAME)_SHIFTER_1_OUTPUT TEST @Dimension() == 2 OUTPUT PASSED FEATURE_TYPE $(PYTHAGORAS_TREE_LOOP_WORKSPACE_NAME)_COORDINATEFETCHER_3_OUTPUT _x_new @Coordinate(x,0,FLATTEN_AGGREGATE) _y_new @Coordinate(y,0,FLATTEN_AGGREGATE) @SupplyAttributes(_z,-9999) OUTPUT FAILED FEATURE_TYPE $(PYTHAGORAS_TREE_LOOP_WORKSPACE_NAME)_COORDINATEFETCHER_3_OUTPUT _x_new @Coordinate(x,0,FLATTEN_AGGREGATE) _y_new @Coordinate(y,0,FLATTEN_AGGREGATE) _z @Coordinate(z,0,FLATTEN_AGGREGATE) # ------------------------------------------------------------------------- FACTORY_DEF * TeeFactory FACTORY_NAME $(PYTHAGORAS_TREE_LOOP_WORKSPACE_NAME)_ROTATOR_3 INPUT FEATURE_TYPE $(PYTHAGORAS_TREE_LOOP_WORKSPACE_NAME)_COORDINATEFETCHER_3_OUTPUT OUTPUT FEATURE_TYPE $(PYTHAGORAS_TREE_LOOP_WORKSPACE_NAME)_ROTATOR_3_ROTATED @Rotate2D(@Value(rotation_incr_1),@Value(_x_new),@Value(_y_new)) # ------------------------------------------------------------------------- FACTORY_DEF * TeeFactory FACTORY_NAME $(PYTHAGORAS_TREE_LOOP_WORKSPACE_NAME)_EXPRESSIONEVALUATOR_9 INPUT FEATURE_TYPE $(PYTHAGORAS_TREE_LOOP_WORKSPACE_NAME)_ROTATOR_3_ROTATED OUTPUT FEATURE_TYPE $(PYTHAGORAS_TREE_LOOP_WORKSPACE_NAME)_EXPRESSIONEVALUATOR_9_OUTPUT angle @Evaluate("@Value(angle)+@Value(rotation_incr_1)") # ------------------------------------------------------------------------- FACTORY_DEF * TeeFactory FACTORY_NAME $(PYTHAGORAS_TREE_LOOP_WORKSPACE_NAME)_EXPRESSIONEVALUATOR INPUT FEATURE_TYPE $(PYTHAGORAS_TREE_LOOP_WORKSPACE_NAME)_EXPRESSIONEVALUATOR_9_OUTPUT OUTPUT FEATURE_TYPE $(PYTHAGORAS_TREE_LOOP_WORKSPACE_NAME)_EXPRESSIONEVALUATOR_OUTPUT angle @Evaluate("@Value(angle)-(int(@Value(angle)/360)*360)") # ------------------------------------------------------------------------- FACTORY_DEF * TeeFactory FACTORY_NAME "$(PYTHAGORAS_TREE_LOOP_WORKSPACE_NAME)_ZOOM_SCALER_1 INPUT Input Collector" INPUT FEATURE_TYPE $(PYTHAGORAS_TREE_LOOP_WORKSPACE_NAME)_EXPRESSIONEVALUATOR_OUTPUT OUTPUT FEATURE_TYPE $(PYTHAGORAS_TREE_LOOP_WORKSPACE_NAME)_ZOOM_SCALER_1_INPUT MACRO ZOOM_SCALER_WORKSPACE_NAME $(PYTHAGORAS_TREE_LOOP_WORKSPACE_NAME)_ZOOM_SCALER_1 MACRO $(ZOOM_SCALER_WORKSPACE_NAME)_XFORMER_NAME $(PYTHAGORAS_TREE_LOOP_WORKSPACE_NAME)_ZOOM_SCALER_1 MACRO $(ZOOM_SCALER_WORKSPACE_NAME)_XSCALE @Value(scale_1) MACRO $(ZOOM_SCALER_WORKSPACE_NAME)_SUB_DOC_NAME ZOOM_SCALER DEFAULT_MACRO ZOOM_SCALER_WORKSPACE_NAME "" FACTORY_DEF * TeeFactory FACTORY_NAME "$(ZOOM_SCALER_WORKSPACE_NAME)_INPUT Input Splitter" INPUT FEATURE_TYPE $(ZOOM_SCALER_WORKSPACE_NAME)_INPUT OUTPUT FEATURE_TYPE $(ZOOM_SCALER_WORKSPACE_NAME)_INPUT # ------------------------------------------------------------------------- FACTORY_DEF * TeeFactory FACTORY_NAME $(ZOOM_SCALER_WORKSPACE_NAME)_EXPRESSIONEVALUATOR_8 INPUT FEATURE_TYPE $(ZOOM_SCALER_WORKSPACE_NAME)_INPUT OUTPUT FEATURE_TYPE $(ZOOM_SCALER_WORKSPACE_NAME)_EXPRESSIONEVALUATOR_8_OUTPUT _x_new_shift @Evaluate("@Value(_x_new)*-1.0") # ------------------------------------------------------------------------- FACTORY_DEF * TeeFactory FACTORY_NAME $(ZOOM_SCALER_WORKSPACE_NAME)_EXPRESSIONEVALUATOR_9 INPUT FEATURE_TYPE $(ZOOM_SCALER_WORKSPACE_NAME)_EXPRESSIONEVALUATOR_8_OUTPUT OUTPUT FEATURE_TYPE $(ZOOM_SCALER_WORKSPACE_NAME)_EXPRESSIONEVALUATOR_9_OUTPUT _y_new_shift @Evaluate("@Value(_y_new)*-1.0") # ------------------------------------------------------------------------- FACTORY_DEF * TeeFactory FACTORY_NAME $(ZOOM_SCALER_WORKSPACE_NAME)_OFFSETTER_2 INPUT FEATURE_TYPE $(ZOOM_SCALER_WORKSPACE_NAME)_EXPRESSIONEVALUATOR_9_OUTPUT OUTPUT FEATURE_TYPE $(ZOOM_SCALER_WORKSPACE_NAME)_OFFSETTER_2_OFFSET @Offset(@Value(_x_new_shift),@Value(_y_new_shift),0) # ------------------------------------------------------------------------- FACTORY_DEF * TeeFactory FACTORY_NAME $(ZOOM_SCALER_WORKSPACE_NAME)_SCALER INPUT FEATURE_TYPE $(ZOOM_SCALER_WORKSPACE_NAME)_OFFSETTER_2_OFFSET OUTPUT FEATURE_TYPE $(ZOOM_SCALER_WORKSPACE_NAME)_SCALER_SCALED @Scale($($(ZOOM_SCALER_WORKSPACE_NAME)_XSCALE),$($(ZOOM_SCALER_WORKSPACE_NAME)_XSCALE),1) # ------------------------------------------------------------------------- FACTORY_DEF * TeeFactory FACTORY_NAME $(ZOOM_SCALER_WORKSPACE_NAME)_OFFSETTER_3 INPUT FEATURE_TYPE $(ZOOM_SCALER_WORKSPACE_NAME)_SCALER_SCALED OUTPUT FEATURE_TYPE $(ZOOM_SCALER_WORKSPACE_NAME)_OFFSETTER_3_OFFSET @Offset(@Value(_x_new),@Value(_y_new),0) FACTORY_DEF * TeeFactory FACTORY_NAME "$(ZOOM_SCALER_WORKSPACE_NAME)_OUTPUT Output Collector" INPUT FEATURE_TYPE $(ZOOM_SCALER_WORKSPACE_NAME)_OFFSETTER_3_OFFSET OUTPUT FEATURE_TYPE $(ZOOM_SCALER_WORKSPACE_NAME)_OUTPUT FACTORY_DEF * TeeFactory FACTORY_NAME "$(PYTHAGORAS_TREE_LOOP_WORKSPACE_NAME)_ZOOM_SCALER_1 OUTPUT Output Renamer/Nuker" INPUT FEATURE_TYPE $(PYTHAGORAS_TREE_LOOP_WORKSPACE_NAME)_ZOOM_SCALER_1_OUTPUT OUTPUT FEATURE_TYPE $(PYTHAGORAS_TREE_LOOP_WORKSPACE_NAME)_ZOOM_SCALER_1_OUTPUT # ------------------------------------------------------------------------- FACTORY_DEF * TeeFactory FACTORY_NAME $(PYTHAGORAS_TREE_LOOP_WORKSPACE_NAME)_EXPRESSIONEVALUATOR_11 INPUT FEATURE_TYPE $(PYTHAGORAS_TREE_LOOP_WORKSPACE_NAME)_ZOOM_SCALER_1_OUTPUT OUTPUT FEATURE_TYPE $(PYTHAGORAS_TREE_LOOP_WORKSPACE_NAME)_EXPRESSIONEVALUATOR_11_OUTPUT scale_factor @Evaluate("@Value(scale_factor)*@Value(scale_1)") # ------------------------------------------------------------------------- FACTORY_DEF * TeeFactory FACTORY_NAME $(PYTHAGORAS_TREE_LOOP_WORKSPACE_NAME)_EXPRESSIONEVALUATOR_13 INPUT FEATURE_TYPE $(PYTHAGORAS_TREE_LOOP_WORKSPACE_NAME)_EXPRESSIONEVALUATOR_11_OUTPUT OUTPUT FEATURE_TYPE $(PYTHAGORAS_TREE_LOOP_WORKSPACE_NAME)_EXPRESSIONEVALUATOR_13_OUTPUT size @Evaluate("@Value(size)*@Value(scale_1)") # ------------------------------------------------------------------------- FACTORY_DEF * TeeFactory FACTORY_NAME $(PYTHAGORAS_TREE_LOOP_WORKSPACE_NAME)_ATTRIBUTEREMOVER_1 INPUT FEATURE_TYPE $(PYTHAGORAS_TREE_LOOP_WORKSPACE_NAME)_EXPRESSIONEVALUATOR_13_OUTPUT OUTPUT FEATURE_TYPE $(PYTHAGORAS_TREE_LOOP_WORKSPACE_NAME)_ATTRIBUTEREMOVER_1_OUTPUT @RemoveAttributes(_copynum,_creation_instance,_x,_x_new,_x_new_shift,_x_shift,_y,_y_new,_y_new_shift,_y_shift,_z,llx,lly,urx,ury) FACTORY_DEF * BranchingFactory TARGET_FACTORY "$(PYTHAGORAS_TREE_LOOP_WORKSPACE_NAME)_INPUT Input Splitter" FACTORY_NAME "Loop to $(PYTHAGORAS_TREE_LOOP_WORKSPACE_NAME)_INPUT Input Splitter" MAXIMUM_COUNT -1 INPUT FEATURE_TYPE $(PYTHAGORAS_TREE_LOOP_WORKSPACE_NAME)_ATTRIBUTEREMOVER_1_OUTPUT OUTPUT PASSED FEATURE_TYPE $(PYTHAGORAS_TREE_LOOP_WORKSPACE_NAME)_INPUT FACTORY_DEF * BranchingFactory TARGET_FACTORY "$(PYTHAGORAS_TREE_LOOP_WORKSPACE_NAME)_INPUT Input Splitter" FACTORY_NAME "Loop to $(PYTHAGORAS_TREE_LOOP_WORKSPACE_NAME)_INPUT Input Splitter_2" MAXIMUM_COUNT -1 INPUT FEATURE_TYPE $(PYTHAGORAS_TREE_LOOP_WORKSPACE_NAME)_ATTRIBUTEREMOVER_2_OUTPUT OUTPUT PASSED FEATURE_TYPE $(PYTHAGORAS_TREE_LOOP_WORKSPACE_NAME)_INPUT FACTORY_DEF * TeeFactory FACTORY_NAME "$(PYTHAGORAS_TREE_LOOP_WORKSPACE_NAME)_OUTPUT Output Collector" INPUT FEATURE_TYPE $(PYTHAGORAS_TREE_LOOP_WORKSPACE_NAME)_SAMPLER_SAMPLED OUTPUT FEATURE_TYPE $(PYTHAGORAS_TREE_LOOP_WORKSPACE_NAME)_OUTPUT FACTORY_DEF * TeeFactory FACTORY_NAME "$(PYTHAGORAS_TREE_LOOP_WORKSPACE_NAME)_INTERMEDIATE Output Collector" INPUT FEATURE_TYPE $(PYTHAGORAS_TREE_LOOP_WORKSPACE_NAME)_ATTRIBUTEREMOVER_OUTPUT OUTPUT FEATURE_TYPE $(PYTHAGORAS_TREE_LOOP_WORKSPACE_NAME)_INTERMEDIATE FACTORY_DEF * TeeFactory FACTORY_NAME "PYTHAGORAS_TREE_LOOP INTERMEDIATE Output Renamer/Nuker" INPUT FEATURE_TYPE PYTHAGORAS_TREE_LOOP_INTERMEDIATE OUTPUT FEATURE_TYPE PYTHAGORAS_TREE_LOOP_INTERMEDIATE FACTORY_DEF * TeeFactory FACTORY_NAME "PYTHAGORAS_TREE_LOOP OUTPUT Output Renamer/Nuker" INPUT FEATURE_TYPE PYTHAGORAS_TREE_LOOP_OUTPUT OUTPUT FEATURE_TYPE PYTHAGORAS_TREE_LOOP_OUTPUT # ------------------------------------------------------------------------- # 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]} {VISUALIZER_01_LIMITER} _]_[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 VISUALIZER_01_LIMITER_DirCreator OUTPUT FEATURE_TYPE __nukeme__ @Tcl2("catch {file mkdir {$(WORKSPACE_TEMP_DIR)}}") FACTORY_DEF * TeeFactory FACTORY_NAME VISUALIZER_01_LIMITER_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_01_LIMITER_SetterUpper INPUT FEATURE_TYPE PYTHAGORAS_TREE_LOOP_OUTPUT OUTPUT FEATURE_TYPE __viewme__ fme_color "1,0.443137254901961,0.443137254901961" fme_fill_color "1,0,0" FACTORY_DEF * RecorderFactory FACTORY_NAME VISUALIZER_01_LIMITER_Recorder INPUT FEATURE_TYPE __viewme__ @FeatureType(VISUALIZER_01_LIMITER$(CATMAC)) FEATURE_FILE "$(WORKSPACE_TEMP_DIR)/$(SAFE_FFS_NAME).ffs" MODE RECORD_PASS_THROUGH FACTORY_DEF * CreationFactory FACTORY_NAME VISUALIZER_01_LIMITER_Trigger CREATE_AT_END OUTPUT FEATURE_TYPE __nukeme__ @TCL("lappend gVisualizerFilesToView $(SAFE_FFS_NAME)") FACTORY_DEF * TeeFactory FACTORY_NAME VISUALIZER_01_LIMITER_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]} {VISUALIZER_02_INTERMEDIATE} _]_[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 VISUALIZER_02_INTERMEDIATE_DirCreator OUTPUT FEATURE_TYPE __nukeme__ @Tcl2("catch {file mkdir {$(WORKSPACE_TEMP_DIR)}}") FACTORY_DEF * TeeFactory FACTORY_NAME VISUALIZER_02_INTERMEDIATE_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_02_INTERMEDIATE_SetterUpper INPUT FEATURE_TYPE PYTHAGORAS_TREE_LOOP_INTERMEDIATE OUTPUT FEATURE_TYPE __viewme__ fme_color "0,0.501960784313726,0.176470588235294" fme_fill_color "0.501960784313726,1,0.501960784313726" FACTORY_DEF * RecorderFactory FACTORY_NAME VISUALIZER_02_INTERMEDIATE_Recorder INPUT FEATURE_TYPE __viewme__ @FeatureType(VISUALIZER_02_INTERMEDIATE$(CATMAC)) FEATURE_FILE "$(WORKSPACE_TEMP_DIR)/$(SAFE_FFS_NAME).ffs" MODE RECORD_PASS_THROUGH FACTORY_DEF * CreationFactory FACTORY_NAME VISUALIZER_02_INTERMEDIATE_Trigger CREATE_AT_END OUTPUT FEATURE_TYPE __nukeme__ @TCL("lappend gVisualizerFilesToView $(SAFE_FFS_NAME)") FACTORY_DEF * TeeFactory FACTORY_NAME VISUALIZER_02_INTERMEDIATE_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__