16. november 2003 - 15:01Der er
18 kommentarer og 1 løsning
Tegning af Cirkel diagram i c#
Hejsa...
Jeg skal have afbildet noget statestik fra mit prog. grafisk...til det har jeg tænkt mig at lave et cirkel-diagram...
Mit spg. er nu, hvordan gør jeg dette lettest? Jeg har fundet et link på MSDN men kan ikke helt gennemskue om det er til c# og hvordan jeg skal bruge det?
2d er fint nok(3d ville selfølgelig være optimalt!), hvert cirkel-udsnit skal have sin egen farve + en tilknyttede beskrivende tekst...det skal (HELST)fungere dynamisk, da det er forskelligt, hvor mange elementer som indgår i statistikken fra gang til gang. Med andre ord : nogle gange skal "lagkagen" opdeles i 3 stykker og andre gang i måske 20 stykker...det afhænger af brugerens valg, hvad han ønsker at lave statistik på...
I dette særtema om aspekter af AI ser vi på skiftet fra sprogmodeller til AI-agenter, og hvordan virksomheder kan navigere i spændet mellem teknologisk hastighed og behovet for menneskelig kontrol.
eller brug evt det der ligger i .NET/C# Erstat koden i en ny form med dette: --------------------- using System; using System.Drawing; using System.Collections; using System.ComponentModel; using System.Windows.Forms; using System.Data;
Hvis du hellere vil have fyldte "kagestykker" så brug dette: g.FillPie(Brushes.Black, 3,3,150,150,0,60); g.FillPie(Brushes.Blue, 3,3, 150,150,60,60); g.FillPie(Brushes.Green, 3,3, 150,150,120,60); g.FillPie(Brushes.Gold, 3,3, 150,150,180,60); g.FillPie(Brushes.Red, 3,3, 150,150,240,60); g.FillPie(Brushes.Yellow, 3,3, 150,150,300,60);
Du omtegner bare hele diagrammet fra bunden hver gang brugeren skal lave en ændring. Jeg tror ikke det vil være at foretrække at ændre på selve den tegning der allerede er tegnet. Tegn forfra hver gang, er mit tip.
skal lige være sikker på jeg har forstået det rigtigt...fx :
g.FillPie(Brushes.Black, 3,3,150,150,0,60);// "3,3"=hvor i forhold til startpunktet det pågældende udsnit skal have centrum , "150,150"=startpunkt/centrum der navigeres udfra, "0,60" = graderne fra/til?-)
For at tegne 3D mener jeg du skal have fat i noget andet end det der ligger standard i c#/.Net, men har aldrig selv prøvet. Her er definitionen på metode kaldet: ------ public void FillPie(Brush brush, int x,int y, int width, int height, int startAngle,int sweepAngle);
brush = Brush object that determines the characteristics of the fill.
x= x-coordinate of the upper-left corner of the bounding rectangle that defines the ellipse from which the pie section comes.
y= y-coordinate of the upper-left corner of the bounding rectangle that defines the ellipse from which the pie section comes.
width = Width of the bounding rectangle that defines the ellipse from which the pie section comes.
height = Height of the bounding rectangle that defines the ellipse from which the pie section comes.
startAngle = Angle in degrees measured clockwise from the x-axis to the first side of the pie section.
sweepAngle =Angle in degrees measured clockwise from the startAngle parameter to the second side of the pie section. -------
Og her er en dynamisk form: ------------------ using System; using System.Drawing; using System.Collections; using System.ComponentModel; using System.Windows.Forms; using System.Data;
Finger : Du nærmer du kraftigt points...;) Et sidste spg. har du et godt trick til hvordan jeg tilnytter en beskrivende tekst-streng til hver stykke, når jeg benytter den dynamiske form?
odegaard : 2½D tegning ?-) hvordan skal det forstås? synes det er lidt mærkeligt, at det ikke er lavet således, at man via en elkelt parameter mere kunne angive højden på hver stykke...?
Jeg har lagt mærke til, at hvis "lagkagen" opdeles i 7,11,13,14,16,17,19,21,22,23,25,26,27,28 eller 29 stykker så er det ikke alle 360 grader af den som er farvet...Dette skyldes højest sandsyneligt, at grade-antallet udregnes i Int og der dermed går noget tabt for hvert skykke...jeg kan se at metoden : g.FillPie() tager Int som type...men det er da ikke for smart? da der ved nogle af intervallene er meget store udsnit af "lagkagen" som ikke bliver farvet med andet end baggrunds-farven!! ;(
Håber i har en løsning på dette ?-) Så vil jeg blive MEGET glad!
Eftersom din monitor viser et flat billede, og ikke et egentligt 3D billede med dybde i, så kaldes et billede der ligner et 3D billede for 2½D.
Du kan jo bare lave cirklen om til en ellipse, tegne halvdelen af den igen et stykke under, og forbinde dem med to lodrette linjer langs deres lodrette tangenser (giver det mening?) Herefter LIGNER det en 3D tegning, selvom det jo egentlig er to ellipser og to linjer (og derved 2½D).
Jeg anbefaler du bare tjekker til sidst hvor mange pts. du har delt ud. Hvis det ikke er alle 100, så deler du bare lidt ekstra ud indtil det giver 100.
nielsbrinch...HVORDAN skal jeg dele noget "ekstra" ud, når jeg KUN kan bruge Int værider i følge g.FillPie()? det er præsic den samme problemstilling som før jo...? det kan heller ikke være rigtigt, at man selv skal ligge og fedte med det...der må da være en "rigtig" måde at gøre det på? Jeg tror ikke på, at det kun er mulig at benytte hele grader - så har .net/c# folkene i hvert fald ikke tænkt sig særligt meget om??
Når jeg nu har fået det hele til at virke...hvordan for jeg så den form ind i min oprindelige form unden at selvfølgelig kan se form viduet...men kun cirkeldiagrammet...?
Finger du får dine points...det ser ud til der ikke rigtigt er nogle som svarer længere...så jeg bliver vel nød til at udlove endnu flere points i en ny tråd...
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.