#VRML V2.0 utf8 # # Petri Net Template # # PROTO PN [ field SFVec3f position 0 0 0 field MFNode places [] field MFNode transitions [] field MFNode trace_places [] field MFNode trace_transitions [] field MFNode inputs[] eventIn SFFloat set_clock ] { Transform { translation IS position children [ Group {children IS places} Group {children IS transitions} Group {children IS trace_places} Group {children IS trace_transitions} Group {children IS inputs} DEF Pn_Run Script { field MFNode places IS places field MFNode transitions IS transitions eventIn SFFloat set_clock IS set_clock url "javascript: function initialize() { } function set_clock(value,ts) { for (j=0; j0; i--) { transitions[i-1].set_clock = value; } } " } #Script ] }# Transform } PROTO PN_PLACE [ exposedField MFNode geometry [] field MFNode behavior [] field SFInt32 number_start_tokens 0 exposedField SFInt32 tokencount 0 eventIn SFFloat set_clock eventIn SFBool token_arrive eventOut SFBool token_start eventOut SFBool token_available ] { Transform{ children [ Group {children IS behavior} Group {children IS geometry} ] } DEF PlaceScript Script { directOutput TRUE eventIn SFFloat set_clock IS set_clock eventIn SFBool token_arrive IS token_arrive eventOut SFBool token_available IS token_available eventOut SFBool token_start IS token_start field MFNode behavior IS behavior field SFInt32 number_start_tokens IS number_start_tokens url "javascript: function initialize() { } function token_arrive(token,ts) { token_available = TRUE; } function set_clock(value,ts) { number_start_tokens = number_start_tokens -1; behavior[0].set_clock = value; if(number_start_tokens >= 0) { token_start = TRUE; } }" } # PlaceScript Script ROUTE PlaceScript.token_start TO PlaceScript.token_arrive } #PROTO PN_PLACE PROTO PN_TRANSITION [ exposedField MFNode geometry [] field MFNode behavior [] field MFNode placefrom [] field MFNode placeto [] field SFInt32 ready_token_count 0 field SFFloat fireSpeed .0006 field SFFloat startInterval -1 eventIn SFFloat set_clock eventIn SFBool inform_transition eventOut SFBool fire_transition ] { Transform{ children [ Group {children IS geometry} Group {children IS placefrom} Group {children IS placeto} Group {children IS behavior} ] } DEF Fire Script{ directOutput TRUE eventIn SFBool inform_transition IS inform_transition eventOut SFBool fire_transition IS fire_transition field MFNode placefrom IS placefrom field MFNode placeto IS placeto field SFInt32 ready_token_count IS ready_token_count eventIn SFFloat set_clock IS set_clock field SFFloat fireSpeed IS fireSpeed field SFFloat startInterval IS startInterval url "javascript: function initialize() { ready_token_count = 0; } function set_clock(value,ts) { if (startInterval == -1) startInterval = value; else { if ( value - startInterval >= fireSpeed) { startInterval = value; all_present = false; if (placefrom.length <= ready_token_count) { //check if one from each placefrom for (i=0;i