예제 #1
0
        private void render_Click(object sender, EventArgs e)
        {
            stop.Enabled = true;
            render.Enabled = !stop.Enabled;

            drawnFirstSegment = false;
            showSplash();

            // model path
            modelPath = paths[modelCombo.SelectedIndex];
            // get width and height from combo box
            imageWidth = Int32.Parse(widthCombo.SelectedItem.ToString());
            imageHeight = Int32.Parse(heightCombo.SelectedItem.ToString());

            // get cols and rows from up downs
            columns = Decimal.ToInt32(columnsUpDown.Value);
            rows = Decimal.ToInt32(rowsUpDown.Value);

            segmentWidth = imageWidth/columns;
            segmentHeight = imageHeight/rows;

            int x = 0;
            int y = 0;

            logger.Debug("WIDTH:"+imageWidth);
            logger.Debug("HEIGHT:"+imageHeight);
            logger.Debug("COLUMNS:"+columns);
            logger.Debug("ROWS:"+rows);
            logger.Debug(""+modelPath);

            // reset the display
            clearImage();

            if (!initted)
            {
                GConnectionDialog gcd = new GConnectionDialog();
                gcd.ShowDialog();

                ga = new GApplication(true);
                ga.ApplicationName = "Alchemi POV-Ray Renderer - Alchemi sample";
                ga.Connection = gcd.Connection;
                ga.ThreadFinish += new GThreadFinish(ga_ThreadFinish);
                ga.ThreadFailed += new GThreadFailed(ga_ThreadFailed);
                ga.ApplicationFinish += new GApplicationFinish(ga_ApplicationFinish);

                ga.Manifest.Add(new ModuleDependency(typeof(RenderThread).Module));

                initted = true;
            }

            if (ga!=null && ga.Running)
            {
                ga.Stop();
            }

            pbar.Maximum = columns*rows;
            pbar.Minimum = 0;
            pbar.Value = 0;
            lbProgress.Text = "Starting to render image ... ";

            for (int col=0; col<columns; col++)
            {
                for (int row=0; row<rows; row++)
                {
                    x = col*segmentWidth;
                    y = row*segmentHeight;

                    int startRowPixel = y + 1;
                    int endRowPixel = y + segmentHeight;
                    int startColPixel = x + 1;
                    int endColPixel = x + segmentWidth;

                    RenderThread rth = new RenderThread(modelPath,
                        imageWidth, imageHeight,
                        segmentWidth, segmentHeight,
                        startRowPixel, endRowPixel,
                        startColPixel, endColPixel,
                        "");

                    rth.BasePath = this.basepath;
                    rth.Col = col+1;
                    rth.Row = row+1;

                    ga.Threads.Add(rth);

                }
            }

            try
            {
                ga.Start();
            }
            catch (Exception ex)
            {
                Console.WriteLine(""+ex.StackTrace);
                MessageBox.Show("Alchemi Rendering Failed!"+ex.ToString());
            }

            lbProgress.Text = "Rendering image ... ";
            ShowBusyGif();
        }
예제 #2
0
        private void Connect()
        {
            try
            {
                GConnectionDialog gcd = new GConnectionDialog();
                if (gcd.ShowDialog() == DialogResult.OK)
                {
                    console = new ConsoleNode(gcd.Connection);
                    connected = true;
                    InitTreeView();
                }

                ShowMenuItems();
            }
            catch (Exception ex)
            {
                logger.Error("Error trying to connect...", ex);
                MessageBox.Show("Error trying to connect..." + ex.Message);
            }
        }
예제 #3
0
        private void Generate()
        {
            try
            {
                totalHorzMaps = int.Parse(txHorz.Text);
                totalVertMaps = int.Parse(txVert.Text);
            }
            catch
            {
                MessageBox.Show("Invalid value(s) for 'No. Cells'.");
                return;
            }

            if (!initted)
            {
                GConnectionDialog gcd = new GConnectionDialog();
                if (gcd.ShowDialog() == DialogResult.OK)
                {
                    // initialise application
                    ga = new GApplication(true);
                    ga.ApplicationName = "Alchemi Fractal Generator - Alchemi sample";

                    ga.Connection = gcd.Connection;
                }
                else
                {
                    return;
                }

                // set dependencies
                ga.Manifest.Add(new ModuleDependency(typeof(KarlsTools.Complex).Module));
                ga.Manifest.Add(new ModuleDependency(typeof(MandelThread).Module));

                // subscribe to events
                ga.ThreadFinish += new GThreadFinish(UpdateBitmap);
                ga.ApplicationFinish += new GApplicationFinish(AppDone);

                try
                {

                    ga.Start();
                }
                catch (Exception e)
                {
                    MessageBox.Show(e.ToString());
                }

                initted = true;
            }

            startTime = DateTime.Now;

            for (int mapNumX=0; mapNumX<totalHorzMaps; mapNumX++)
            {
                for (int mapNumY=0; mapNumY<totalVertMaps; mapNumY++)
                {
                    MandelThread mandel = new MandelThread(
                        mapNumX,
                        mapNumY,
                        width/totalHorzMaps,
                        height/totalVertMaps,
                        xOffset + mapNumX * width/totalHorzMaps,
                        yOffset + mapNumY * height/totalVertMaps,
                        zoom,
                        pbColorOne.BackColor,
                        pbColorTwo.BackColor
                        );
                    //ga.Threads.Add(mandel);
                    ga.StartThread(mandel);
                }
            }

            pb.Minimum = 0;
            pb.Value = 0;
            pb.Maximum = totalHorzMaps * totalVertMaps;
        }