![]() |
GLscene Kreise
Liste der Anhänge anzeigen (Anzahl: 1)
Guten morgen,
gibt es eine andere Nöglichkeit mit GLScene halb Kreise zu Zeichnen ? im mom mache ich es per Pixel.
Delphi-Quellcode:
if Quadrant = 1 then
begin if (G2_StepX = true) then Begin GLLines3 := TGLLines(GLXYZGrid1.AddNewChild(TGLLines)); GLLines3.NodesAspect := lnaInvisible; GLLines3.LineWidth := 2; //X GLLines3.LineColor.AsWinColor := clBlack; GLLines3.AddNode(X_Steppen,0, Y_Steppen); y_Steppen:= y_Steppen + 0.1; GLLines3.AddNode(X_Steppen, 0, Y_Steppen); G2_StepX:= false; end; if G2_StepY = true then Begin GLLines3 := TGLLines(GLXYZGrid1.AddNewChild(TGLLines)); GLLines3.NodesAspect := lnaInvisible; GLLines3.LineWidth := 2; //Y GLLines3.LineColor.AsWinColor := clBlack; GLLines3.AddNode(X_Steppen,0, Y_Steppen); x_Steppen:= x_Steppen + 0.1; GLLines3.AddNode(x_Steppen, 0, Y_Steppen); G2_StepY:= false; end; end; mfg schuby |
AW: GLscene Kreise
hallo,
eine Möglichkeit wäre DirecopenGL
Delphi-Quellcode:
dazu muss man von hier
procedure TForm34.GLDirectOpenGL1Render(Sender: TObject; var rci: TGLRenderContextInfo);
var start_winkel, end_winkel, laenge_x, laenge_y, radius, xm, ym:Real; begin start_winkel:=0; end_winkel:=360; radius:=0.20; xm:=0; ym:=0; gllinewidth(1); // glcolor3f(farbe.rot,farbe.gruen,farbe.blau); glBegin(GL_LINE_STRIP); while start_winkel <= end_winkel do begin laenge_x := radius * cos(start_winkel * pi / 180); laenge_y := radius * sin(start_winkel * pi / 180); glvertex3f(xm + laenge_x, ym + laenge_y,0); //<--------hier ggf. anpassen start_winkel:=start_winkel+1; end; GLEnd; end; ![]() die dglopengl.pas runterladen. |
AW: GLscene Kreise
@mmv
upsss das ist openGL und ich habe GLScene Aber Danke für Antwort. :-) mfg Schuby |
AW: GLscene Kreise
Delphi-Quellcode:
GLLines3.Nodes.AddXYArc
|
AW: GLscene Kreise
Zitat:
GRuß |
AW: GLscene Kreise
Hallo Uwe,
könntest du mir bitte helfen was ich genau schreiben müsste ? Ich bekomme nur error
Delphi-Quellcode:
public
MyVec3f : TVector3f; ... GLLines3.Nodes.AddXYArc(,,,,,MyVec3f); mfg Schuby |
AW: GLscene Kreise
hallo,
nur zur Info die dglopengl.pas wie in #2 angegeben funktiomiert nicht (jedenfalls nicht bei mir). Dafür funktinoiert die mitegelieferte. Gruß |
AW: GLscene Kreise
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo,
ich habe es doch noch geschafft, es haben paar units gefehlt. Aber es wird immer nur hochkannt angezeigt, drehen kann man den Kreis nicht ?
Delphi-Quellcode:
uses
GLS.Nodes, GLS.VectorGeometry, GLS.VectorTypes; .... GLLines3 := TGLLines(GLXYZGrid1.AddNewChild(TGLLines)); GLLines3.NodesAspect := lnaInvisible; GLLines3.LineWidth := 2; GLLines3.LineColor.AsWinColor := clblack; MyVec3f.X:= 0; MyVec3f.Y:= 0; MyVec3f.Z:= 0; GLLines3.Nodes.AddXYArc(30,15,90,0, 500, MyVec3f); mfg schuby |
AW: GLscene Kreise
|
AW: GLscene Kreise
Zitat:
|
AW: GLscene Kreise
Danke euch beiden, jetzt habe ich es verstanden.
Es geht super.
Delphi-Quellcode:
Man kann nun ein Objekt um jede Achse drehen. Jedes Objekt hat folgende Eigenschaften:
PitchAngle - Rotation um die X-Achse TurnAngle - Rotation um die Y-Achse RollAngle - Rotation um die Z-Achse MyVec3f.X:= 0; MyVec3f.Y:= 0; MyVec3f.Z:= 0; GLLines3.PitchAngle:= -90; GLLines3.Nodes.AddXYArc(30,30,0,90, 500, MyVec3f); mfg schuby |
AW: GLscene Kreise
Die letzte Frage die ich dazu habe.
Wie lösche ich mein Gridxyz wieder. GLLines3.Nodes.Clear; => Das ist klar, aber ich suche danach sowas wie Repaint ? mfg schuby |
AW: GLscene Kreise
Normalerweise sollte das automatisch erfolgen, solange du nicht in einer offenen BeginUpdate/EndUpdate Klammer steckst.
|
AW: GLscene Kreise
Hallo Uwe, ne es wird nichts gelöscht. Ich habe extra sleep(500) drin
und Form1.update damit ich sehe ob der halbkreis gelöscht ist, ist er aber nicht.
Delphi-Quellcode:
procedure TForm1.Button12Click(Sender: TObject);
begin GLLines3.Nodes.Clear; Form1.Update; sleep(500); Kreis_Zeichnen; mfg schuby |
AW: GLscene Kreise
hallo,
nach nodes.clear ist bei mir der Kreis gelöscht. vielleicht mal GLSceneViewer1.repaint; versuchen. Gruß |
AW: GLscene Kreise
Kannst du das an einem simplen Beispiel demonstrieren?
|
AW: GLscene Kreise
Liste der Anhänge anzeigen (Anzahl: 2)
Hallo, ich versuche es zu beschreiben.
Kreis berechnen, da habe ich mir eine eigene Routine geschrieben. GLLine1 bis 3 sind die Achsenanzeige rot gelb grün GLLines4 ist meine schwarzer Kreis Button12 drücken => schwarzer Kreis wird gezeichnet. Button12 drücken => vor Sleep(500) gelb / grün / rot Linien werden gelöscht aber schwarzer Kreis bleibt In Procedure TForm1.G2_Fahrt; ist nichts mit Grafik GLLine oder so da werden nur die Punkte berechnet
Delphi-Quellcode:
Procedure TForm1.G2_Quadrant_1; Begin //Quadrant = 1 X+ Y+ if Quadrant = 1 then begin if (G2_StepX = true) then Begin //X GLLines4 := TGLLines(GLXYZGrid1.AddNewChild(TGLLines)); GLLines4.LineWidth := 2; GLLines4.LineColor.AsWinColor := clBlack; GLLines4.AddNode(X_Steppen,0, Y_Steppen); y_Steppen:= y_Steppen + 0.1; GLLines4.AddNode(X_Steppen, 0, Y_Steppen); G2_StepX:= false; end; if G2_StepY = true then Begin //Y GLLines4 := TGLLines(GLXYZGrid1.AddNewChild(TGLLines)); GLLines4.LineWidth := 2; GLLines4.LineColor.AsWinColor := clBlack; GLLines4.AddNode(X_Steppen,0, Y_Steppen); x_Steppen:= x_Steppen + 0.1; GLLines4.AddNode(x_Steppen, 0, Y_Steppen); G2_StepY:= false; end; end; end; Procedure TForm1.G2_Fahrt; begin for i:= 1 to usw // immer einen neuen Punkt berechnen und in G2_Quadrant_1 anzeigen G2_Quadrant_1; bla.. bla.. end; //=> Button12 start procedure TForm1.Button12Click(Sender: TObject); begin GLLines1.Nodes.Clear; GLLines2.Nodes.Clear; GLLines3.Nodes.Clear; GLLines4.Nodes.Clear; GLSceneViewer1.repaint; Form1.Update; sleep(500); GLLines1 := TGLLines(GLXYZGrid1.AddNewChild(TGLLines)); GLLines1.NodesAspect := lnaInvisible; GLLines1.LineWidth := 4; //X Achse Gelb GLLines1.LineColor.AsWinColor := clYellow; GLLines1.AddNode(0,0,0); GLLines1.AddNode(20,0,0); GLLines2 := TGLLines(GLXYZGrid1.AddNewChild(TGLLines)); GLLines2.NodesAspect := lnaInvisible; GLLines2.LineWidth := 4; //Y Achse Rot GLLines2.LineColor.AsWinColor := clRed; GLLines2.AddNode(0,0,0); GLLines2.AddNode(0,0,20); GLLines3 := TGLLines(GLXYZGrid1.AddNewChild(TGLLines)); GLLines3.NodesAspect := lnaInvisible; GLLines3.LineWidth := 4; //Z Achse Grün GLLines3.LineColor.AsWinColor := clGreen; GLLines3.AddNode(0,0,0); GLLines3.AddNode(0,20,0); G2_Fahrt; mfg schuby |
AW: GLscene Kreise
hallo,
oder mal so versuchen .
Delphi-Quellcode:
Die GLLines sind dann gelöscht, und müssen dann wie in #17 wieder hinzugfügt werden.
procedure Remove_GLXYZGrid_Childs;
var buffer,buffer1: TGLBaseSceneObject; x,y: Integer; child_count:integer; begin if GLScene1.Objects.Count > 0 then begin for x := GLScene1.Objects.Count - 1 downto 0 do if GLScene1.Objects.Children[x] is TGLXYZGrid then begin buffer := GLScene1.Objects.Children[x] as TGLXYZGrid; child_count:=buffer.count; for y:=child_count-1 downto 0 do begin buffer1:=buffer.Children[y]; buffer.Remove(buffer1,false); end; end; end; end; Bei mir traten beim ausführen keine Fehler auf, da ich das jetzt das auf die schnelle gemacht habe, schließe ich Fehler mal nicht aus. Beim späteren Gebrauch sollte man aber es aber sauberer machen. Gruß |
AW: GLscene Kreise
Zitat:
|
AW: GLscene Kreise
Sorry das ich jetzt erst Antworte, aber ich weiß was es war.
Das musste raus und nur einmal vorher rein >GLLines4 := TGLLines(GLXYZGrid1.AddNewChild(TGLLines)); >GLLines4.LineWidth := 2; >GLLines4.LineColor.AsWinColor := clBlack; //Alt
Delphi-Quellcode:
Procedure TForm1.G2_Quadrant_1;
Begin //Quadrant = 1 X+ Y+ if Quadrant = 1 then begin if (G2_StepX = true) then Begin //X GLLines4 := TGLLines(GLXYZGrid1.AddNewChild(TGLLines)); GLLines4.LineWidth := 2; GLLines4.LineColor.AsWinColor := clBlack; GLLines4.AddNode(X_Steppen,0, Y_Steppen); y_Steppen:= y_Steppen + 0.1; GLLines4.AddNode(X_Steppen, 0, Y_Steppen); G2_StepX:= false; end; if G2_StepY = true then Begin //Y GLLines4 := TGLLines(GLXYZGrid1.AddNewChild(TGLLines)); GLLines4.LineWidth := 2; GLLines4.LineColor.AsWinColor := clBlack; GLLines4.AddNode(X_Steppen,0, Y_Steppen); x_Steppen:= x_Steppen + 0.1; GLLines4.AddNode(x_Steppen, 0, Y_Steppen); G2_StepY:= false; end; end; end; //neu
Delphi-Quellcode:
Procedure TForm1.G2_Quadrant_1;
Begin //Quadrant = 1 X+ Y+ if Quadrant = 1 then begin if (G2_StepX = true) then Begin //X GLLines4.AddNode(X_Steppen,0, Y_Steppen); y_Steppen:= y_Steppen + 0.1; GLLines4.AddNode(X_Steppen, 0, Y_Steppen); G2_StepX:= false; end; if G2_StepY = true then Begin //Y GLLines4.AddNode(X_Steppen,0, Y_Steppen); x_Steppen:= x_Steppen + 0.1; GLLines4.AddNode(x_Steppen, 0, Y_Steppen); G2_StepY:= false; end; end; end; mfg schuby |
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:28 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz