首页>代码>java算法大全源码包(转网上的)>/codefans.net/java算法大全源码包/BD/BlockDiagram.java
// BlockDiagram.java
//		Block diagram animation
//
import java.awt.*;
import java.lang.*;
import java.io.*;
import java.util.*;
import java.net.*;

public class BlockDiagram implements DrawingObj {
	
	
	String label;
	// int transform_case;
	IOPoint input, output;
	Arc arc;
	Vector sum_pts;
	Vector f_blks;
	Vector arcs;
	int x, y;


	public BlockDiagram( String label ) {
		this.label = new String( label );
		input = output = null;
		sum_pts = new Vector( 10 );
		f_blks = new Vector( 10 );
		arcs = new Vector( 10 );
		x = y = 0;
		}

	
	public void move( int dx, int dy ) {
		// Implement this as offset the whole drawing
								 int n,k;
		
		input.x = input.x + dx;
		input.y = input.y + dy;
		output.x = output.x + dx;
		output.y = output.y + dy;
		n = f_blks.size();
		for(k=0;k<n;k++) {
			x = ((FunctionBlock)f_blks.elementAt(k)).getX();
			y = ((FunctionBlock)f_blks.elementAt(k)).getY();
			((FunctionBlock)f_blks.elementAt(k)).move (x + dx, y + dy);
			}
		n = sum_pts.size();
		for(k=0;k<n;k++) {
			x = ((SummingPoint)sum_pts.elementAt(k)).getX();
			y = ((SummingPoint)sum_pts.elementAt(k)).getY();
									((SummingPoint)sum_pts.elementAt(k)).move (x + dx, y + dy);
			}
		 n = arcs.size();
		for(k=0;k<n;k++) {
			x = ((Arc)arcs.elementAt(k)).getX();
			y = ((Arc)arcs.elementAt(k)).getY();
								 ((Arc)arcs.elementAt(k)).move (x + dx, y + dy);
			}
						
		}

	//public int getFBw() {
	//	int k,n ;
	//	n = f_blks.size();
	//	for(k=0;k<n;k++) {
	//		x = ((FunctionBlock)f_blks.elementAt(k)).getX();
	//		y = ((FunctionBlock)f_blks.elementAt(k)).getY();
			//((FunctionBlock)f_blks.elementAt(k)).move (x + dx, y + dy);
	//		return
	//		}
		//k =	f_blks.lastIndexOf(fb);
		//return ((FunctionBlock)f_blks.elementAt(k)).getW();
	//	}

	public void addSummingPoint( SummingPoint s ) {
		sum_pts.addElement( s );
		}

	public void addFunctionBlock( FunctionBlock fb ) {
		f_blks.addElement( fb );
		}

	public void addArc( Arc a ) {
		arcs.addElement( a );
		}
	
	public void setInput ( IOPoint io ) {
		input = io;
		}

	public void setOutput ( IOPoint io ) {
		output = io;
		}

	public int getX() { return x; }
	public int getY() { return y; }
	

	public void draw( Graphics g ) {
		int k, n;
		// g.drawString( label, lx, ly );

		n = arcs.size();
		for(k=0;k<n;k++) {
			((Arc)arcs.elementAt(k)).draw( g );
			}
			
		input.draw( g );
		output.draw( g );

		n = f_blks.size();
		for(k=0;k<n;k++) {
			((FunctionBlock)f_blks.elementAt(k)).draw( g );
			}
		n = sum_pts.size();
		for(k=0;k<n;k++) {
			((SummingPoint)sum_pts.elementAt(k)).draw( g );
			}
		
		}
	
	public Dimension getLimit( int dirn ) {
		return new Dimension( 0, 0 );
		}
			


	public void ConsTestCase() {

		Arc a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11;
		FunctionBlock g1, g2, g3, h1, h2;
		SummingPoint sp1, sp2;
		Node in_node, out_node, g1_node, g2_node, g3_node, h1_node, h2_node, sp1_node, sp2_node;
		int Sx, Sy, gap;
		Sx = 100;
		Sy = 150;
				gap = 100;

		setInput( new IOPoint("R", "s", Sx, Sy, 50, 30, true ) );
								in_node = new Node(input, Node.IOtype);
		setOutput( new IOPoint("Y", "s", Sx + 6*gap, Sy, 50, 30, false ) );
								out_node = new Node(output, Node.IOtype);

		// Summing Points
		addSummingPoint( sp1 = new SummingPoint( Sx + gap, Sy ) );
		sp1_node = new Node (sp1, Node.SPtype);
		addSummingPoint( sp2 = new SummingPoint( Sx + 3*gap, Sy ) );
								sp2_node = new Node (sp2, Node.SPtype);

		// Function Blocks
		g1 = new FunctionBlock("G", "1", Sx + 2*gap, Sy, 40, 30 );
		addFunctionBlock( g1 );
		g1_node = new Node( g1, Node.FBtype );
		g2 = new FunctionBlock("G", "2", Sx + 4*gap, Sy, 40, 30 );
		g2_node = new Node( g2, Node.FBtype );
		addFunctionBlock( g2 );
		g3 = new FunctionBlock("G", "3", Sx + 5*gap, Sy, 40, 30 );
		g3_node = new Node( g3, Node.FBtype );
		addFunctionBlock( g3 );
		h1 = new FunctionBlock("H", "1", Sx + 3*gap, Sy + gap, 40, 30 );
								addFunctionBlock( h1 );
		h1_node = new Node( h1, Node.FBtype );
								h2 = new FunctionBlock("H", "2", Sx + 4*gap, Sy - gap, 40, 30 );
								addFunctionBlock( h2 );
		h2_node = new Node( h2, Node.FBtype );


		// Arcs
		a1 = new Arc( 3, true, true, in_node,sp1_node);
		a1.addPoint( Sx ,Sy );
		a1.addPoint( Sx + gap, Sy );
		addArc( a1 );

		a2 = new Arc( 3, true, false, sp1_node, g1_node);
		a2.addPoint( Sx + gap, Sy );
		a2.addPoint( Sx + 2*gap, Sy );
		addArc( a2 );

		a3 = new Arc( 3, true, true, g1_node, sp2_node);
		a3.addPoint( Sx + 2*gap,Sy );
		a3.addPoint( Sx + 3*gap, Sy );
		addArc( a3 );

		a4 = new Arc( 3, true, false, sp2_node, g2_node);
		a4.addPoint( Sx + 3*gap,Sy );
		a4.addPoint( Sx + 4*gap, Sy );
		addArc( a4 );

								a5 = new Arc( 3, true, false, g2_node, g3_node );
		a5.addPoint( Sx + 4*gap, Sy );
		a5.addPoint( Sx + 5*gap, Sy);
		addArc( a5 );
		
								a6 = new Arc( 3, true, false, g3_node, out_node );
		a6.addPoint( Sx + 5*gap, Sy );
		a6.addPoint( Sx + 6*gap, Sy);
		addArc( a6 );

								a7 = new Arc( 3, false, false, g3_node, h1_node );
		a7.addPoint( Sx + (6*gap - gap/2), Sy );
		a7.addPoint(Sx + (6*gap - gap/2), Sy + gap);
		a7.addPoint( Sx + 3*gap, Sy + gap );
		addArc( a7 );

								a8 = new Arc( 3, false, true, h1_node, sp1_node );
		a8.addPoint( Sx + 3*gap,Sy + gap);
		a8.addPoint(Sx + gap, Sy + gap);
		a8.addPoint( Sx + gap, Sy );
		addArc( a8 );

		a9 = new Arc( 3, false, false, g2_node, h2_node );
		a9.addPoint( Sx + (5*gap - gap/2) ,Sy);
		a9.addPoint(Sx + (5*gap - gap/2), Sy - gap);
		a9.addPoint( Sx + 4*gap, Sy - gap);
		addArc( a9 );

		a10 = new Arc( 3, true, true, h2_node, sp2_node );
		a10.addPoint( Sx + 4*gap,Sy - gap);
		a10.addPoint(Sx + 3*gap, Sy - gap);
		a10.addPoint( Sx + 3*gap, Sy);
		addArc( a10 );
		}

	private int tx, ty, tw, th;

	private boolean getXYWH( String p ) {
		System.out.println("getXYWH [" + p + "]" );
		int ix = p.indexOf( "{" );
		String p1 = p.substring( ix+1 );
		StringTokenizer t = new StringTokenizer( p1, ",}" );
		tx = Integer.valueOf(t.nextToken()).intValue();
		ty = Integer.valueOf(t.nextToken()).intValue();
		tw = Integer.valueOf(t.nextToken()).intValue();
		th = Integer.valueOf(t.nextToken()).intValue();
		System.out.println( "tx " + tx + " ty " + ty + " tw " + tw + " th " + th + "]");
		return true;
		}

	private String s_label; 
	private String subs;

	private String getQuoted( String x ) {
		System.out.println("getQuoted [" + x + "]" );
		String p1 = x.substring(1);
		int index = p1.indexOf( "\"" );
		System.out.println("getQuoted p1 [" + p1 + "] index " + index );
		return p1.substring(0,index);
		}

	private boolean getSL( String p ) {
		System.out.println("getSL [" + p + "]" );
		String token;
		StringTokenizer t = new StringTokenizer( p, "," );
		String x = t.nextToken();
		s_label = getQuoted( x );
		x = t.nextToken();
		subs = getQuoted( x );
		return true;
		}
		
	private Node parseInput( String p ) {
		Node in_node;
		System.out.println("parseInput [" + p + "]" );
		// Strip the leading brace
		String p1 = p.substring( 1 );
		StringTokenizer t = new StringTokenizer( p1, "}" );
		String sl = t.nextToken();
		if ( getSL( sl ) ) {
			String x = t.nextToken();
			System.out.println("x [" + x + "]" );
			int comma = x.indexOf( "," );
			String x1 = x.substring( comma+1 );
			System.out.println("x1 [" + x1 + "]" );
			if ( getXYWH( x1 ) ) {
				setInput( new IOPoint( s_label, subs, tx, ty, tw, th, true ) );
				System.out.println("Input [" + s_label + "," + subs + "]" );
				in_node = new Node(input, Node.IOtype);
				return in_node;
				}
			}
		return null;
		}

	private void parseOutput( String p ) {
		}

	private void parseSP( String p ) {
		}

	private void parseFB( String p ) {
		}

	private void parseARC( String p ) {
		}

	public BlockDiagram( URL sourceURL ) {
		InputStream source = null;
		StringBuffer sb;
		String file_name;
		Node in_node, out_node;
		int k;
		String kw[] = { "Input", "Output", "SP", "FB", "ARC", "END" };

		file_name = sourceURL.toString();
		System.out.println("Read BD from " + file_name );
		try {
			source = sourceURL.openStream();
		} catch( IOException e ) {
			System.out.println("Read BD IOException on " + file_name );
	 	}
		if ( source != null ) {

			/* Read the file */
			DataInputStream ds = new DataInputStream( source );
			k = 0;
			try {
				while( k != 5 ) {
					String s;
					if ( ( s = ds.readLine()) != null ) {
						System.out.println("Line [" + s + "]" );
						StringTokenizer t = new StringTokenizer( s, "=\n\r" );
						String keyword = t.nextToken();
						String params = t.nextToken();
						System.out.println("key [" + keyword + "][" + params + "]" );
						for(k=0;k<kw.length;k++) {
							if ( keyword.equals( kw[k] ) ) break;
							}
						// Strip the leading and trailing { }
						String p1 = params.substring( 1 );
						// Strip the trailing one also!!
   
						System.out.println( "BD(URL): k = " + k );
						switch( k ) {
							case 0: // Input
									in_node = parseInput( p1 ); break;
							case 1: // Output
									parseOutput( params ); break;
							case 2: // SP
									parseSP( params ); break;
							case 3: // FB
									parseFB( params ); break;
							case 4: // ARC
									parseARC( params ); break;
							case 5: // END
									System.out.println("BD(URL): END found"); break;
							default:	
									System.out.println("BD(URL): unknown keyword");
									break;
							}
						}
					else break;
					}
				} catch( IOException e ) {
					System.out.println("Read BD IOEx reading");
			
				}
				System.out.println("BD(URL): file read");
			}
		else {
			System.out.println("Null source");
			}
		}

	public BlockDiagram( int transform_case ) {
					
		Arc a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11;
		FunctionBlock g1, g2, g3, h1, h2;
		SummingPoint sp1, sp2;
		Node in_node, out_node, g1_node, g2_node, g3_node, h1_node, h2_node, sp1_node, sp2_node;
		int Sx, Sy, gap, Bw , Bh;
		Sx = 100;
		Sy = 250;
								gap = 100;
		Bw = 40;
		Bh = 30;
	
		if (transform_case == 1) {
					setInput( new IOPoint("R", "s", Sx, Sy, Bw, Bh, true ) );
								in_node = new Node(input, Node.IOtype);
		setOutput( new IOPoint("Y", "s", Sx + 3*gap, Sy, Bw, Bh, false ) );
								out_node = new Node(output, Node.IOtype);

		g1 = new FunctionBlock("G", "1", Sx + gap, Sy, Bw, Bh );
		addFunctionBlock( g1 );
		g1_node = new Node( g1, Node.FBtype );
		g2 = new FunctionBlock("G", "2", Sx + 2*gap, Sy, Bw, Bh );
		g2_node = new Node( g2, Node.FBtype );
		addFunctionBlock( g2 );

		a1 = new Arc( 3, true, false, in_node,g1_node);
		a1.addPoint( Sx ,Sy );
		a1.addPoint( Sx + gap, Sy );
		addArc( a1 );

		a2 = new Arc( 3, true, false, g1_node, g2_node);
		a2.addPoint( Sx + gap, Sy );
		a2.addPoint( Sx + 2*gap, Sy );
		addArc( a2 );

		a3 = new Arc( 3, true, true, g2_node, out_node);
		a3.addPoint( Sx + 2*gap,Sy );
		a3.addPoint( Sx + 3*gap, Sy );
		addArc( a3 );	}
		}

	public BlockDiagram( int tf_no, boolean before ) {
		// Code to build the "standard" transforms
		
					Arc a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11;
				FunctionBlock g1, g2, g3, h1, h2, y2, r2;
	 		SummingPoint sp1, sp2;
				Node in_node, out_node, y2_node, r2_node, g1_node, g2_node, g3_node, h1_node, h2_node, sp1_node, sp2_node;
				int Sx, Sy, gap, Bw , Bh;

		System.out.println("BlockDiagram cons(" + tf_no + "," + before + ")" );
				Sx = 30;
				Sy = 30;
		gap = 70;
				Bw = 30;
				Bh = 20;

				this.label = new String( "TF" + tf_no );
				input = output = null;
				sum_pts = new Vector( 10 );
				f_blks = new Vector( 10 );
				arcs = new Vector( 10 );
				x = y = 0;

		if ( before ) {
		 	switch( ++tf_no ) {
							case 1:
					setInput( new IOPoint("R", "s", Sx, Sy, Bw, Bh, true ) );
							in_node = new Node(input, Node.IOtype);
							setOutput( new IOPoint("Y", "s", Sx + 3*gap, Sy, Bw, Bh, false ) );
							out_node = new Node(output, Node.IOtype);

							g1 = new FunctionBlock("G", "1", Sx + gap, Sy, Bw, Bh );
						if ( g1 == null ) {
							System.out.println( "BD cons(" + tf_no + "," + before + ") cant create FB");
							}
							addFunctionBlock( g1 );
					g1_node = new Node( g1, Node.FBtype );
							g2 = new FunctionBlock("G", "2", Sx + 2*gap, Sy, Bw, Bh );
							g2_node = new Node( g2, Node.FBtype );
							addFunctionBlock( g2 );

							a1 = new Arc( 3, true, false, in_node,g1_node);
							a1.addPoint( Sx ,Sy );
							a1.addPoint( Sx + gap, Sy );
							addArc( a1 );

							a2 = new Arc( 3, true, false, g1_node, g2_node);
							a2.addPoint( Sx + gap, Sy );
							a2.addPoint( Sx + 2*gap, Sy );
							addArc( a2 );

							a3 = new Arc( 3, true, false, g2_node, out_node);
							a3.addPoint( Sx + 2*gap,Sy );
							a3.addPoint( Sx + 3*gap, Sy );
							addArc( a3 );
							break;

				case 2:
		
					setInput( new IOPoint("R", "s", Sx, Sy, Bw, Bh, true ) );
							in_node = new Node(input, Node.IOtype);
							setOutput( new IOPoint("Y1", "s", Sx + 3*gap, Sy, Bw, Bh, false ) );
							out_node = new Node(output, Node.IOtype);

					addSummingPoint( sp1 = new SummingPoint( Sx + gap, Sy ) );
					sp1_node = new Node (sp1, Node.SPtype);
			
			 			g1= new FunctionBlock("G", "1", Sx + 2*gap, Sy, Bw, Bh );
					g1_node = new Node( g1, Node.FBtype );
					addFunctionBlock( g1 );	
																				y2 = new FunctionBlock("Y2", "s", Sx + 2*gap, Sy+gap/2, Bw, Bh );
																				y2_node = new Node( y2, Node.FBtype );
																				addFunctionBlock( y2 );
		
					a1 = new Arc( 3, true, true, in_node,sp1_node);
							a1.addPoint( Sx ,Sy );
	 					a1.addPoint( Sx + gap, Sy );
							addArc( a1 );

							a2 = new Arc( 3, true, false, sp1_node, g1_node);
							a2.addPoint( Sx + gap, Sy );
							a2.addPoint( Sx + 2*gap, Sy );
							addArc( a2 );
			
					a3 = new Arc( 3, true, false, g1_node, out_node);
							a3.addPoint( Sx + 2*gap, Sy );
							a3.addPoint( Sx + 3*gap, Sy );
							addArc( a3 );

																				a4 = new Arc( 3, true, false, y2_node, sp1_node);
							a4.addPoint( Sx + 2*gap, Sy+gap/2 );
							a4.addPoint( Sx + gap, Sy+gap/2 );
					a4.addPoint( Sx + gap, Sy );
							addArc( a4 );
																				break;
				
				case 3:
					setInput( new IOPoint("R", "s", Sx, Sy, Bw, Bh, true ) );
							in_node = new Node(input, Node.IOtype);
							setOutput( new IOPoint("Y", "s", Sx + 3*gap, Sy, Bw, Bh, false ) );
							out_node = new Node(output, Node.IOtype);
																										
			 			g1 = new FunctionBlock("G", "1", Sx + gap, Sy, Bw, Bh );
					g1_node = new Node( g1, Node.FBtype );
					addFunctionBlock( g1 );
																				y2 = new FunctionBlock("Y", "s", Sx + gap, Sy+gap/2, Bw, Bh );
																				y2_node = new Node( y2, Node.FBtype );
																				addFunctionBlock( y2 );

					a1 = new Arc( 3, true, false, in_node,g1_node);
							a1.addPoint( Sx ,Sy );
	 					a1.addPoint( Sx + gap, Sy );
							addArc( a1 );

							a2 = new Arc( 3, true, false, g1_node, out_node);
							a2.addPoint( Sx + gap, Sy );
							a2.addPoint( Sx + 3*gap, Sy );
							addArc( a2 );
			
					a3 = new Arc( 3, true, false, g1_node, y2_node);
							a3.addPoint( Sx + 2*gap, Sy );
					a3.addPoint( Sx + 2*gap, Sy+gap/2 );
							a3.addPoint( Sx + gap, Sy+gap/2 );
							addArc( a3 );
																				break;	
				
				case 4:
																				setInput( new IOPoint("R", "s", Sx, Sy, Bw, Bh, true ) );
							in_node = new Node(input, Node.IOtype);
							setOutput( new IOPoint("Y", "s", Sx + 3*gap, Sy, Bw, Bh, false ) );
							out_node = new Node(output, Node.IOtype);
																										
			 			g1 = new FunctionBlock("G", "1", Sx + 2*gap, Sy, Bw, Bh );
					g1_node = new Node( g1, Node.FBtype );
					addFunctionBlock( g1 );
																				r2 = new FunctionBlock("R", "s", Sx , Sy+gap/2, Bw, Bh );
																				r2_node = new Node( r2, Node.FBtype );
																				addFunctionBlock( r2 );
	
					a1 = new Arc( 3, true, false, in_node,g1_node);
							a1.addPoint( Sx ,Sy );
	 					a1.addPoint( Sx + 2*gap, Sy );
							addArc( a1 );

							a2 = new Arc( 3, true, false, g1_node, out_node);
							a2.addPoint( Sx + 2*gap, Sy );
							a2.addPoint( Sx + 3*gap, Sy );
							addArc( a2 );
			
					a3 = new Arc( 3, true, false, in_node, r2_node);
							a3.addPoint( Sx + gap, Sy );
					a3.addPoint( Sx + gap, Sy+gap/2 );
							a3.addPoint( Sx, Sy+gap/2 );
							addArc( a3 );
																				break;	
				
				case 5:
					setInput( new IOPoint("R1", "s", Sx, Sy, Bw, Bh, true ) );
							in_node = new Node(input, Node.IOtype);
							setOutput( new IOPoint("Y", "s", Sx + 3*gap, Sy, Bw, Bh, false ) );
							out_node = new Node(output, Node.IOtype);

					addSummingPoint( sp1 = new SummingPoint( Sx + 2*gap, Sy ) );
					sp1_node = new Node (sp1, Node.SPtype);
									
			 			g1 = new FunctionBlock("G", "1", Sx + gap, Sy, Bw, Bh );
					g1_node = new Node( g1, Node.FBtype );
					addFunctionBlock( g1 );
																				r2 = new FunctionBlock("R2", "s", Sx + gap , Sy+gap/2, Bw, Bh );
																				r2_node = new Node( r2, Node.FBtype );
																				addFunctionBlock( r2 );
	
					a1 = new Arc( 3, true, false, in_node,g1_node);
							a1.addPoint( Sx ,Sy );
	 					a1.addPoint( Sx + gap, Sy );
							addArc( a1 );

							a2 = new Arc( 3, true, true, g1_node, sp1_node);
							a2.addPoint( Sx + gap, Sy );
							a2.addPoint( Sx + 2*gap, Sy );
							addArc( a2 );
			
					a3 = new Arc( 3, true, false, sp1_node, out_node);
							a3.addPoint( Sx + 2*gap, Sy );
					a3.addPoint( Sx + 3*gap, Sy );
							addArc( a3 );
			
														a4 = new Arc( 3, true, true, r2_node, sp1_node);
							a4.addPoint( Sx + gap, Sy + gap/2 );
					a4.addPoint( Sx + 2*gap, Sy + gap/2 );
					a4.addPoint( Sx + 2*gap, Sy);
							addArc( a4 );
																				break;	
								case 6:
					setInput( new IOPoint("R", "s", Sx, Sy, Bw, Bh, true ) );
							in_node = new Node(input, Node.IOtype);
							setOutput( new IOPoint("Y", "s", Sx + 3*gap, Sy, Bw, Bh, false ) );
							out_node = new Node(output, Node.IOtype);

					addSummingPoint( sp1 = new SummingPoint( Sx + gap, Sy ) );
					sp1_node = new Node (sp1, Node.SPtype);
									
			 			g1 = new FunctionBlock("G", "1", Sx + 2*gap, Sy, Bw, Bh );
					g1_node = new Node( g1, Node.FBtype );
					addFunctionBlock( g1 );
																				h1 = new FunctionBlock("H", "1", Sx + 2*gap , Sy+gap/2, Bw, Bh );
																				h1_node = new Node( h1, Node.FBtype );
																				addFunctionBlock( h1 );
	
					a1 = new Arc( 3, true, true, in_node,sp1_node);
							a1.addPoint( Sx ,Sy );
	 					a1.addPoint( Sx + gap, Sy );
							addArc( a1 );

							a2 = new Arc( 3, true, false, sp1_node, g1_node);
							a2.addPoint( Sx + gap, Sy );
							a2.addPoint( Sx + 2*gap, Sy );
							addArc( a2 );
			
					a3 = new Arc( 3, true, false, g1_node, out_node);
							a3.addPoint( Sx + 2*gap, Sy );
					a3.addPoint( Sx + 3*gap, Sy );
							addArc( a3 );
			
														a4 = new Arc( 3, true, false, g1_node, h1_node);
							a4.addPoint( Sx + (2*gap)+(gap/2), Sy );
					a4.addPoint( Sx + (2*gap)+(gap/2), Sy + gap/2 );
					a4.addPoint( Sx + 2*gap, Sy + gap/2);
							addArc( a4 );
					
					a5 = new Arc( 3, true, true, h1_node, sp1_node);
							a5.addPoint( Sx + 2*gap, Sy + gap/2 );
					a5.addPoint( Sx + gap, Sy + gap/2);
					a5.addPoint( Sx + gap, Sy);
							addArc( a5 );
																				break;	
				case 7:
					
								setInput( new IOPoint("", "", Sx+gap, Sy, 0, 0, true ) );
					in_node = new Node(input, Node.IOtype);
					setOutput( new IOPoint("", "", Sx + 2*gap, Sy, 0, 0, false ) );
							out_node = new Node(output, Node.IOtype);
					a1 = new Arc( 100, true, false, in_node,out_node);
					a1.setColour(Color.black);
							a1.addPoint( Sx +gap,Sy );
							a1.addPoint( Sx + 2*gap, Sy );
					
							addArc( a1 ); }
		}

		 else{
			switch(++ tf_no ) {
											 case 1:
					setInput( new IOPoint("R", "s", Sx, Sy, Bw, Bh, true ) );
							in_node = new Node(input, Node.IOtype);
							setOutput( new IOPoint("Y", "s", Sx + 3*gap, Sy, Bw, Bh, false ) );
							out_node = new Node(output, Node.IOtype);

							g1 = new FunctionBlock("G1G2", "", Sx + gap + gap/2, Sy, Bw*2, Bh );
						if ( g1 == null ) {
							System.out.println( "BD cons(" + tf_no + "," + before + ") cant create FB");
							}
							addFunctionBlock( g1 );
					g1_node = new Node( g1, Node.FBtype );
							

							a1 = new Arc( 3, true, false, in_node,g1_node);
							a1.addPoint( Sx ,Sy );
							a1.addPoint( Sx + gap + gap/2, Sy );
							addArc( a1 );

							a2 = new Arc( 3, true, false, g1_node, out_node);
							a2.addPoint( Sx + gap + gap/2, Sy );
							a2.addPoint( Sx + 3*gap, Sy );
							addArc( a2 );																					 					
							break;

				case 2:
		
					setInput( new IOPoint("R", "s", Sx, Sy, Bw, Bh, true ) );
							in_node = new Node(input, Node.IOtype);
							setOutput( new IOPoint("Y1", "s", Sx + 3*gap, Sy, Bw, Bh, false ) );
							out_node = new Node(output, Node.IOtype);

					addSummingPoint( sp1 = new SummingPoint( Sx + 2*gap, Sy ) );
					sp1_node = new Node (sp1, Node.SPtype);
			
			 			g1= new FunctionBlock("G", "1", Sx + gap, Sy, Bw, Bh );
					g1_node = new Node( g1, Node.FBtype );
					addFunctionBlock( g1 );	
					g2= new FunctionBlock("G", "2", Sx + 2*gap, Sy+2*gap/3, Bw, Bh );
					g2_node = new Node( g2, Node.FBtype );
					addFunctionBlock( g2 );	
																				y2 = new FunctionBlock("Y2", "s", Sx + 3*gap, Sy+2*gap/3, Bw, Bh );
																				y2_node = new Node( y2, Node.FBtype );
																				addFunctionBlock( y2 );
		
					a1 = new Arc( 3, true, false, in_node,g1_node);
							a1.addPoint( Sx ,Sy );
	 					a1.addPoint( Sx + gap, Sy );
							addArc( a1 );

							a2 = new Arc( 3, true, true, g1_node, sp1_node);
							a2.addPoint( Sx + gap, Sy );
							a2.addPoint( Sx + 2*gap, Sy );
							addArc( a2 );
			
					a3 = new Arc( 3, true, false, sp1_node, out_node);
							a3.addPoint( Sx + 2*gap, Sy );
							a3.addPoint( Sx + 3*gap, Sy );
							addArc( a3 );

																				a4 = new Arc( 3, true, false, y2_node, g2_node);
							a4.addPoint( Sx + 3*gap, Sy+2*gap/3 );
							a4.addPoint( Sx + 2*gap, Sy+2*gap/3 );
					addArc( a4 );
	
					a5 = new Arc( 3, true, true, g2_node, sp1_node);
							a5.addPoint( Sx + 2*gap, Sy+2*gap/3 );
							a5.addPoint( Sx + 2*gap, Sy );
					addArc( a5 );
																				break;
				
				case 3:
					setInput( new IOPoint("R", "s", Sx, Sy, Bw, Bh, true ) );
							in_node = new Node(input, Node.IOtype);
							setOutput( new IOPoint("Y", "s", Sx + 3*gap, Sy, Bw, Bh, false ) );
							out_node = new Node(output, Node.IOtype);
																										
			 			g1 = new FunctionBlock("G", "1", Sx + 2*gap, Sy, Bw, Bh );
					g1_node = new Node( g1, Node.FBtype );
					addFunctionBlock( g1 );
					g2 = new FunctionBlock("G", "1", Sx + gap, Sy + 2*gap/3, Bw, Bh );
					g2_node = new Node( g2, Node.FBtype );
					addFunctionBlock( g2 );
																				y2 = new FunctionBlock("Y", "s", Sx, Sy+2*gap/3, Bw, Bh );
																				y2_node = new Node( y2, Node.FBtype );
																				addFunctionBlock( y2 );

					a1 = new Arc( 3, true, false, in_node,g1_node);
							a1.addPoint( Sx ,Sy );
	 					a1.addPoint( Sx + 2*gap, Sy );
							addArc( a1 );

							a2 = new Arc( 3, true, false, g1_node, out_node);
							a2.addPoint( Sx + 2*gap, Sy );
							a2.addPoint( Sx + 3*gap, Sy );
							addArc( a2 );
			
					a3 = new Arc( 3, true, false, in_node, g2_node);
							a3.addPoint( Sx + gap, Sy );
					a3.addPoint( Sx + gap, Sy+2*gap/3 );
							addArc( a3 );

					a4 = new Arc( 3, true, false, g2_node, y2_node);
							a4.addPoint( Sx + gap, Sy+2*gap/3);
					a4.addPoint( Sx , Sy+2*gap/3 );
							addArc( a4 );
																				break;	
				
				case 4:
																				setInput( new IOPoint("R", "s", Sx, Sy, Bw, Bh, true ) );
							in_node = new Node(input, Node.IOtype);
							setOutput( new IOPoint("Y", "s", Sx + 3*gap, Sy, Bw, Bh, false ) );
							out_node = new Node(output, Node.IOtype);
																										
			 			g1 = new FunctionBlock("G", "1", Sx + 2*gap, Sy, Bw, Bh );
					g1_node = new Node( g1, Node.FBtype );
					addFunctionBlock( g1 );
					g2 = new FunctionBlock("1/G", "", Sx + 2*gap, Sy+gap/2, Bw, Bh );
					g2_node = new Node( g2, Node.FBtype );
					addFunctionBlock( g2 );
																				r2 = new FunctionBlock("R", "s", Sx + gap , Sy+gap/2, Bw, Bh );
																				r2_node = new Node( r2, Node.FBtype );
																				addFunctionBlock( r2 );
	
					a1 = new Arc( 3, true, false, in_node,g1_node);
							a1.addPoint( Sx ,Sy );
	 					a1.addPoint( Sx + 2*gap, Sy );
							addArc( a1 );

							a2 = new Arc( 3, true, false, g1_node, out_node);
							a2.addPoint( Sx + 2*gap, Sy );
							a2.addPoint( Sx + 3*gap, Sy );
							addArc( a2 );
			
					a3 = new Arc( 3, true, false, g1_node, g2_node);
							a3.addPoint( Sx + 5*gap/2, Sy );
					a3.addPoint( Sx + 5*gap/2, Sy+gap/2 );
							a3.addPoint( Sx + 2*gap, Sy+gap/2 );
							addArc( a3 );

					a4 = new Arc( 3, true, false, g2_node, r2_node);
							a4.addPoint( Sx + 2*gap, Sy+gap/2 );
							a4.addPoint( Sx + gap, Sy+gap/2 );
							addArc( a4 );
																				break;	
				
				case 5:
					setInput( new IOPoint("R1", "s", Sx, Sy, Bw, Bh, true ) );
							in_node = new Node(input, Node.IOtype);
							setOutput( new IOPoint("Y", "s", Sx + 3*gap, Sy, Bw, Bh, false ) );
							out_node = new Node(output, Node.IOtype);

					addSummingPoint( sp1 = new SummingPoint( Sx + gap, Sy ) );
					sp1_node = new Node (sp1, Node.SPtype);
									
			 			g1 = new FunctionBlock("G", "1", Sx + 2*gap, Sy, Bw, Bh );
					g1_node = new Node( g1, Node.FBtype );
					addFunctionBlock( g1 );
					g2 = new FunctionBlock("1/G", "", Sx + 2*gap, Sy+gap/2, Bw, Bh );
					g2_node = new Node( g2, Node.FBtype );
					addFunctionBlock( g2 );
																				r2 = new FunctionBlock("R2", "s", Sx + 3*gap , Sy+gap/2, Bw, Bh );
																				r2_node = new Node( r2, Node.FBtype );
																				addFunctionBlock( r2 );
	
					a1 = new Arc( 3, true, true, in_node,sp1_node);
							a1.addPoint( Sx ,Sy );
	 					a1.addPoint( Sx + gap, Sy );
							addArc( a1 );

							a2 = new Arc( 3, true, false, sp1_node, g1_node);
							a2.addPoint( Sx + gap, Sy );
							a2.addPoint( Sx + 2*gap, Sy );
							addArc( a2 );
			
					a3 = new Arc( 3, true, false, g1_node, out_node);
							a3.addPoint( Sx + 2*gap, Sy );
					a3.addPoint( Sx + 3*gap, Sy );
							addArc( a3 );
			
														a4 = new Arc( 3, true, false, r2_node, g2_node);
							a4.addPoint( Sx + 3*gap, Sy + gap/2 );
					a4.addPoint( Sx + 2*gap, Sy + gap/2 );
					addArc( a4 );

					a5 = new Arc( 3, true, true, g2_node, sp1_node);
							a5.addPoint( Sx + 2*gap, Sy + gap/2 );
					a5.addPoint( Sx + gap, Sy + gap/2 );
					a5.addPoint( Sx + gap, Sy );
					addArc( a5 );
																				break;	
								case 6:
					setInput( new IOPoint("R", "s", Sx, Sy, Bw, Bh, true ) );
							in_node = new Node(input, Node.IOtype);
							setOutput( new IOPoint("Y", "s", Sx + 3*gap, Sy, Bw, Bh, false ) );
							out_node = new Node(output, Node.IOtype);

							g1 = new FunctionBlock("G1/1+(G1H1)", "", Sx + 3*gap/2, Sy, Bw*3, Bh );
						if ( g1 == null ) {
							System.out.println( "BD cons(" + tf_no + "," + before + ") cant create FB");
							}
							addFunctionBlock( g1 );
					g1_node = new Node( g1, Node.FBtype );
							

							a1 = new Arc( 3, true, false, in_node,g1_node);
							a1.addPoint( Sx ,Sy );
							a1.addPoint( Sx + 3*gap/2, Sy );
							addArc( a1 );

							a2 = new Arc( 3, true, false, g1_node, out_node);
							a2.addPoint( Sx + 3*gap/2, Sy );
							a2.addPoint( Sx + 3*gap, Sy );
							addArc( a2 );																					 					
							break;
					}	
							}
		 }


}
	
最近下载更多
姜广坤  LV14 2022年5月20日
wwykerwin  LV1 2022年3月22日
2196316269  LV10 2021年2月25日
safeqd2186  LV3 2020年12月12日
zzhsq2008  LV1 2020年9月10日
来水代码  LV1 2020年7月3日
才阿虎  LV1 2020年4月6日
wsk588  LV26 2020年1月15日
走你個魯  LV21 2020年1月13日
睡谷的传说  LV6 2019年12月30日
最近浏览更多
张言昊  LV9 2022年11月17日
姜广坤  LV14 2022年5月20日
wwykerwin  LV1 2022年3月22日
你脚上银铃响了  LV1 2021年10月27日
sfyzjc  LV2 2021年10月22日
xiaoluoaaa  LV8 2021年10月13日
 LV10 2021年6月12日
2196316269  LV10 2021年2月24日
少年迟暮 2021年1月25日
暂无贡献等级
safeqd2186  LV3 2020年12月12日
顶部 客服 微信二维码 底部
>扫描二维码关注最代码为好友扫描二维码关注最代码为好友