Example #1
0
 /**
  * etsi objekti nimen perusteella, aseta sen index selectObj muuttujaan
  */
 public void selectObject(string name)
 {
     selectedObj = -1;
     // käy kaikki tasot läpi
     for (int l = 0; l < layers.Count; l++)
     {
         // etsi objekteista name nimistä
         for (int q = 0; q < ((Layer)layers[l]).objs.Count; q++)
         {
             baseObject tmp = (baseObject)((Layer)layers[l]).objs[q];
             if (tmp.Name == name)
             {
                 selectedObj   = q;
                 selectedLayer = l;
                 break;
             }
         }
     }
 }
Example #2
0
        /**
         * asettaa ohjelman alkutilaan, eli voi aloittaa
         * piirtämisen puhtaalta pöydältä
         */
        public void clearAll()
        {
            selectedObj   = -1;
            selectedLayer = -1;
            fill          = true;  // jos true, objektit myös täytetään, muuten vaan ääriviivat
            closed        = true;  // jos true, suljetaan polygoni
            tmpObj        = null;
            layers.Clear();

            Gl.glClearColor(1, 1, 1, 1);
            Gl.glClear(Gl.GL_COLOR_BUFFER_BIT);

            Layer.layers = 0;
            // luo yksi taso
            newLayer();
            Tools.updateList();

            updateAll();
        }
Example #3
0
        /**
         * jos suoritettu undo tai poistettu objekti, tyhjennetään
         *  ruutu ja piirretään kaikki uudelleen (paitsi poistettu)
         */
        public void updateAll()
        {
            Gl.glLoadIdentity();
            Gl.glClearColor(1, 1, 1, 1);
            Gl.glClear(Gl.GL_COLOR_BUFFER_BIT);

            // renderoi kaikilta tasoilta
            for (int l = 0; l < layers.Count; l++)
            {
                for (int i = 0; i < ((Layer)layers[l]).objs.Count; i++)
                {
                    Gl.glTranslatef(((Layer)layers[l]).sx, ((Layer)layers[l]).sy, 0);

                    baseObject o = (baseObject)((Layer)layers[l]).objs[i];
                    if (o != null)
                    {
                        o.render(true);
                    }
                    Gl.glLoadIdentity();
                }
            }
        }
Example #4
0
        /**
         * renderoi grafiikat
         */
        private void display()
        {
            if (!running)
            {
                return;
            }

            Gl.glLoadIdentity();

            // valittu objekti välkkymään
            if (selectedObj != -1)
            {
                // jos tasoa liikutettu, liikuta
                Gl.glTranslatef(((Layer)layers[selectedLayer]).sx, ((Layer)layers[selectedLayer]).sy, 0);

                baseObject o = (baseObject)((Layer)layers[selectedLayer]).objs[selectedObj];
                sin += 0.1f;
                Gl.glColor3f((float)Math.Sin((float)sin), 0, 0);
                o.render(false);
                Gl.glLoadIdentity();
            }

            if (tmpObj != null)
            {
                Gl.glTranslatef(((Layer)layers[selectedLayer]).sx, ((Layer)layers[selectedLayer]).sy, 0);

                if (!invert)
                {
                    tmpObj.render(true);
                    invert = !invert;
                }

                Gl.glLoadIdentity();
            }

            Gl.glFlush();
            Glut.glutSwapBuffers();
        }
Example #5
0
        /**
         * kutsutaan jos hiiren nappia painetaan
         */
        private void mouseButton(int button, int state, int x, int y)
        {
            if (mode == 0)
            {
                return;
            }
            if (selectedObj != -1)
            {
                selectedObj = -1;
                updateAll();
            }

            if (mode != 4)
            {
                Gl.glTranslatef(((Layer)layers[selectedLayer]).sx, ((Layer)layers[selectedLayer]).sy, 0);
                x -= (int)((Layer)layers[selectedLayer]).sx;
                y -= (int)((Layer)layers[selectedLayer]).sy;
            }

            switch (button)
            {
            // jos painetaan hiiren vasenta nappia
            case Glut.GLUT_LEFT_BUTTON:

                // kun painetaan pohjaan
                if (state == Glut.GLUT_DOWN)
                {
                    if (mode != 4)
                    {
                        invert = false;
                        Gl.glEnable(Gl.GL_COLOR_LOGIC_OP);
                        Gl.glLogicOp(Gl.GL_INVERT);
                    }

                    switch (mode)
                    {
                    case 1:
                        tmpObj = new Line();
                        break;

                    case 2:
                        tmpObj = new Rect();
                        break;

                    case 3:
                        tmpObj = new Circle();
                        break;

                    case 4:
                        mx = x; my = y;             // layerin liikutus
                        return;
                    }
                    tmpObj.setColor(color, fillColor, true);
                    tmpObj.add((float)x, (float)y);
                }
                else     // irrotetaan napista
                {
                    if (tmpObj == null)
                    {
                        return;
                    }
                    tmpObj.add((float)x, (float)y);

                    if (mode == 1)                          // jos kynä
                    {
                        if (fill || closed)                 // jos täyttö tai suljettu
                        {
                            // vika vertex ekaks vertexiks, sulkee polyn
                            ((Line)tmpObj).close();
                        }

                        if (fill)                                // alue pitää täyttää
                        {
                            ((Line)tmpObj).tesselate(closed);
                        }
                    }
                    if (layers.Count == 0)
                    {
                        selectedLayer = -1;
                        newLayer();
                    }

                    Gl.glDisable(Gl.GL_COLOR_LOGIC_OP);
                    tmpObj.render(true);
                    ((Layer)layers[selectedLayer]).objs.Add(tmpObj);
                    tmpObj = null;

                    Tools.updateList();
                }
                break;

            case Glut.GLUT_MIDDLE_BUTTON:
            case Glut.GLUT_RIGHT_BUTTON:
                break;

            default:
                break;
            }
        }