Re: How to get the outline GraphicsPath?

From: Altramagnus (altramagnus_at_hotmail.com)
Date: 08/05/04


Date: Thu, 5 Aug 2004 15:30:05 +0800

Surprisingly it is extremely easy implementing in Java.
I did the following 2 test codes:

import java.awt.*;
import java.awt.geom.*;
import javax.swing.*;

public class TestShape {
    private static class DisplayComponent extends JComponent {
        private Shape s;
        private GeneralPath p = new GeneralPath();
        private Area a;

        public DisplayComponent() {
            this.setSize( 500, 500 );
            this.setPreferredSize( new Dimension( 500, 500 ) );
            p.append( new Ellipse2D.Double( 50, 50, 50, 50 ), false );
            p.append( new Ellipse2D.Double( 75, 75, 50, 50 ), false );
            p.append( new Ellipse2D.Double( 150, 150, 50, 50 ), false );
            a = new Area( p );
        } // end DisplayComponent

        public void paintComponent( Graphics g ) {
            Graphics2D g2d= (Graphics2D)g;
            g2d.setColor( new Color( 255, 0, 0 ) );
            g2d.draw( a );
        } // end paintComponent
    } // end clas

    public static void main( String[] args ) {
        JFrame frame = new JFrame();
        DisplayComponent c = new DisplayComponent();
        frame.getContentPane().add( c );
        frame.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
        frame.pack();
        frame.show();
    } // end main
} // end class TestShape

The corresponding CSharp test program.

using System;
using System.Drawing;
using System.Drawing.Drawing2D;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;
using System.Data;

namespace TestGraphicsPath
{
 /// <summary>
 /// Summary description for Form1.
 /// </summary>
 public class Form1 : System.Windows.Forms.Form
 {
        private System.Windows.Forms.PictureBox pictureBox1;
  /// <summary>
  /// Required designer variable.
  /// </summary>
  private System.ComponentModel.Container components = null;

  public Form1()
  {
   //
   // Required for Windows Form Designer support
   //
   InitializeComponent();

   //
   // TODO: Add any constructor code after InitializeComponent call
   //
  }

  /// <summary>
  /// Clean up any resources being used.
  /// </summary>
  protected override void Dispose( bool disposing )
  {
   if( disposing )
   {
    if (components != null)
    {
     components.Dispose();
    }
   }
   base.Dispose( disposing );
  }

  #region Windows Form Designer generated code
  /// <summary>
  /// Required method for Designer support - do not modify
  /// the contents of this method with the code editor.
  /// </summary>
  private void InitializeComponent()
  {
            this.pictureBox1 = new System.Windows.Forms.PictureBox();
            this.SuspendLayout();
            //
            // pictureBox1
            //
            this.pictureBox1.Location = new System.Drawing.Point(55, 35);
            this.pictureBox1.Name = "pictureBox1";
            this.pictureBox1.Size = new System.Drawing.Size(670, 410);
            this.pictureBox1.TabIndex = 0;
            this.pictureBox1.TabStop = false;
            this.pictureBox1.Paint += new
System.Windows.Forms.PaintEventHandler(this.pictureBox1_Paint);
            //
            // Form1
            //
            this.AutoScaleBaseSize = new System.Drawing.Size(5, 13);
            this.ClientSize = new System.Drawing.Size(832, 553);
            this.Controls.Add(this.pictureBox1);
            this.Name = "Form1";
            this.Text = "Form1";
            this.ResumeLayout(false);

        }
  #endregion

  /// <summary>
  /// The main entry point for the application.
  /// </summary>
  [STAThread]
  static void Main()
  {
   Application.Run(new Form1());
  }

        private void pictureBox1_Paint(object sender,
System.Windows.Forms.PaintEventArgs e)
        {
            Graphics g = e.Graphics;
            GraphicsPath p1 = new GraphicsPath();
            GraphicsPath p2 = new GraphicsPath();
            GraphicsPath p3 = new GraphicsPath();
            p1.AddEllipse( 50, 50, 50, 50 );
            p2.AddEllipse( 75, 75, 50, 50 );
            p3.AddEllipse( 150, 150, 50, 50 );
            Region r = new Region( p1 );
            r.Union( p2 );
            r.Union( p3 );
            g.FillRegion( Brushes.White, r );
        }
 }
}

For java, Area is the Region equivalent.
Java , you call call graphics.draw( Area ) and it will draw the outline of
the area.
In CSharp, there isn't graphics.draw( Region ) there is only
graphics.Fill( Region )

I wonder how Java does it.
It does not seem to have much computing effort like the convex hull problem.

Thanks. However, I still need help to implement in CSharp.

Regards,
Altramagnus

"Tom Dacon" <tdacon@community.nospam> wrote in message
news:uDqjPFqeEHA.3988@tk2msftngp13.phx.gbl...
> This is an example of a classic graphics problem known as the "convex
hull"
> problem. Try a search on groups.google.com on that search term, limiting
it
> to the microsoft .Net groups, and see what you come up with.
>
> Regards,
> Tom Dacon
> Dacon Software Consulting
>
> "Altramagnus" <altramagnus@hotmail.com> wrote in message
> news:41119488$1@news.starhub.net.sg...
> > I have n number of circles. Some of them might overlap.
> > I need to draw the outline of all circles but not those overlap areas.
> >
> > Initially, I am try to use a Region, because a Region object has a Union
> > function
> > Creating a GraphicsPath of 1 circle is easy. So I convert each
> GraphicsPath
> > to a Region and then Union them.
> > But I could not get back a GraphicsPath of the Unioned Region.
> >
> > Does anyone know how to solve my problem?
> > Thanks.
> >
> >
> >
>
>



Relevant Pages

  • Re: How to get the outline GraphicsPath?
    ... Surprisingly it is extremely easy implementing in Java. ... private static class DisplayComponent extends JComponent { ... } // end class TestShape ... protected override void Dispose(bool disposing) ...
    (microsoft.public.dotnet.framework)
  • Re: How to get the outline GraphicsPath?
    ... Surprisingly it is extremely easy implementing in Java. ... private static class DisplayComponent extends JComponent { ... } // end class TestShape ... protected override void Dispose(bool disposing) ...
    (microsoft.public.dotnet.general)
  • Re: How to convert a Region object to a GraphicsPath object
    ... Surprisingly it is extremely easy implementing in Java. ... private static class DisplayComponent extends JComponent { ... } // end class TestShape ... > from a GraphicsPath, and not a GraphicsPath from a Region. ...
    (microsoft.public.dotnet.languages.csharp)
  • Re: How to convert a Region object to a GraphicsPath object
    ... Surprisingly it is extremely easy implementing in Java. ... private static class DisplayComponent extends JComponent { ... } // end class TestShape ... > from a GraphicsPath, and not a GraphicsPath from a Region. ...
    (microsoft.public.dotnet.framework)
  • Re: How to convert a Region object to a GraphicsPath object
    ... Surprisingly it is extremely easy implementing in Java. ... private static class DisplayComponent extends JComponent { ... } // end class TestShape ... > from a GraphicsPath, and not a GraphicsPath from a Region. ...
    (microsoft.public.dotnet.general)