Einzelnen Beitrag anzeigen

mr-unbekannt

Registriert seit: 29. Okt 2005
Ort: tirol
104 Beiträge
 
Delphi 7 Personal
 
#1

Logischer Schaltungsgenerator

  Alt 2. Aug 2006, 12:47
hallo...

also, ich arbeite an einem projekt, das wahrheitstabellen generiert und auswertet ( siehe BoolGen)

nun, alles schön und gut, jetzt würde ich gerne ein tool dazu machen, das mir die KNF und DNF in eine grafische version übersetzt--> das heißt in eine logische schaltung.
da dies mithilfe grafiken passieren muss, und ich keine ahnung von grafikprogrammierung habe, wollte ich mal fragen, wie man sowas machen könnte.

ich kenne ein programm(applett), das in JAVA geschrieben wurde und das diese aufgabe hervorragend löst. ( KVD )
falls jemand die java datein braucht, ich schick sie weiter.

wie könnte man denn das machen?


hier der code der drawPLA.jad:
Code:
import java.awt.Color;
import java.awt.Graphics;

class DrawPLA extends PLA
{

    DrawPLA(int i, int j, String as[], String as1[])
    {
        super(i, j, as, as1);
    }

    DrawPLA(int i, int j, String as[], String as1[], boolean flag)
    {
        super(i, j, as, as1);
        klein = flag;
    }

    public void drawpla(Graphics g, int i, int j)
    {
        x0 = i;
        y0 = j;
        drawInputs(g);
        drawInputLabels(g);
        drawOutputLabels(g);
    }

    public void drawSolderDot(Graphics g, int i, int j)
    {
        g.fillRect(i - 1, j - 1, 3, 3);
    }

    public void drawInputLabels(Graphics g)
    {
        boolean flag = false;
        byte byte0 = 15;
        for(int j = 0; j < super.ni; j++)
        {
            int i = x0 + (j + 1) * 40 + 5;
            g.setColor(Color.black);
            g.drawString(super.innames[super.ni - j - 1], i, y0 + byte0);
        }

    }

    public void drawOneInput(Graphics g, int i, int j)
    {
        if(!klein)
        {
            g.setColor(Color.black);
            drawSolderDot(g, i + 10, j + 1);
            g.drawLine(i + 10, j, i + 10, j + 40);
            g.drawLine(i + 10, j + 10, i + 25, j + 10);
            drawSolderDot(g, i + 10, j + 10);
            g.drawLine(i + 25, j + 10, i + 25, j + 20);
            g.setColor(Color.blue);
            g.drawLine(i + 16, j + 20, i + 34, j + 20);
            g.drawLine(i + 16, j + 20, i + 25, j + 32);
            g.drawLine(i + 34, j + 20, i + 25, j + 32);
            g.fillRect(i + 23, j + 34, 5, 3);
            g.fillRect(i + 24, j + 33, 3, 5);
            g.drawLine(i + 25, j + 33, i + 25, j + 39);
            g.setColor(Color.black);
            return;
        } else
        {
            g.setColor(Color.black);
            drawSolderDot(g, i + 10, j + 1);
            g.drawLine(i + 10, j, i + 10, j + 40);
            g.drawLine(i + 10, j + 10, i + 20, j + 10);
            drawSolderDot(g, i + 10, j + 10);
            g.drawLine(i + 20, j + 10, i + 20, j + 20);
            g.setColor(Color.blue);
            g.drawLine(i + 13, j + 20, i + 28, j + 20);
            g.drawLine(i + 13, j + 20, i + 20, j + 32);
            g.drawLine(i + 28, j + 20, i + 20, j + 32);
            g.fillOval(i + 18, j + 30, 5, 5);
            g.drawLine(i + 20, j + 33, i + 20, j + 39);
            g.setColor(Color.black);
            return;
        }
    }

    public void drawconns(Graphics g)
    {
        int i1 = (x0 + (super.ni + 1) * 40 + 20) - 2;
        g.setColor(Color.black);
        int l1;
        if(!klein)
            l1 = y0 + 60 + super.np * 30;
        else
            l1 = y0 + 60 + super.np * 10;
        for(int i2 = 0; i2 < super.ni; i2++)
        {
            int j = x0 + 10 + (super.ni - i2) * 40;
            g.drawLine(j, y0 + 60, j, l1);
            if(!klein)
                j += 15;
            else
                j += 10;
            g.drawLine(j, y0 + 60, j, l1);
        }

        int i = 0;
        for(Cube cube = super.root.next; cube != super.root; cube = cube.next)
        {
            for(int j2 = 0; j2 < super.ni; j2++)
                if(cube.getInput(j2) == 0)
                {
                    int k = x0 + 25 + (super.ni - j2) * 40;
                    int j1;
                    if(!klein)
                        j1 = y0 + 60 + i * 30 + 7 + j2 * 3;
                    else
                        j1 = y0 + 65 + i * 10;
                    if(klein)
                    {
                        g.setColor(Color.red);
                        drawSolderDot(g, k - 5, j1);
                    } else
                    {
                        drawSolderDot(g, k, j1);
                    }
                    if(klein)
                    {
                        g.setColor(Color.black);
                        g.drawLine(k - 3, j1, i1, j1);
                    } else
                    {
                        g.drawLine(k, j1, i1, j1);
                    }
                } else
                if(cube.getInput(j2) == 1)
                {
                    int l = x0 + 10 + (super.ni - j2) * 40;
                    int k1;
                    if(!klein)
                        k1 = y0 + 60 + i * 30 + 7 + j2 * 3;
                    else
                        k1 = y0 + 65 + i * 10;
                    drawSolderDot(g, l, k1);
                    g.drawLine(l, k1, i1, k1);
                }

            i++;
        }

    }

    public void drawInputs(Graphics g)
    {
        int j = y0 + 20;
        for(int k = 0; k < super.ni; k++)
        {
            int i = x0 + (super.ni - k) * 40;
            drawOneInput(g, i, j);
        }

    }

    public void drawOutputLabels(Graphics g)
    {
        g.setColor(Color.black);
        for(int k = 0; k < super.no; k++)
        {
            int j = y0 + 15;
            int i = xpos_OutputGate[k] + 5;
            g.drawString(super.outnames[k], i, j);
        }

    }

    protected int x0;
    protected int y0;
    protected int xpos_OutputGate[];
    protected int xsize_OutputGate[];
    protected int conns_OutputGate[];
    public boolean klein;
}
bitte um hilfe

danke
  Mit Zitat antworten Zitat