From: Brandon M. <the...@us...> - 2000-11-14 10:46:47
|
Update of /cvsroot/pythianproject/PythianProject/Source/SectorEditor In directory slayer.i.sourceforge.net:/tmp/cvs-serv19458 Modified Files: NewSectors.pas Main.pas Main.dfm EditorSectors.pas Log Message: no message Index: NewSectors.pas =================================================================== RCS file: /cvsroot/pythianproject/PythianProject/Source/SectorEditor/NewSectors.pas,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -r1.1 -r1.2 *** NewSectors.pas 2000/08/24 00:35:23 1.1 --- NewSectors.pas 2000/11/14 10:46:43 1.2 *************** *** 3,7 **** interface ! uses BaseObjects, Quads, Heightmaps, Textures, Points; type --- 3,7 ---- interface ! uses Classes, BaseObjects, Quads, Heightmaps, Textures, Points, TaggedStreams; type *************** *** 74,77 **** --- 74,93 ---- end; + TSectorList = class(TList) + private + function GetItems(Index: Integer): TSector; + procedure SetItems(Index: Integer; const Value: TSector); + public + procedure Traverse(ClippingQuad: TQuad); virtual; + procedure FreeSectors; + + procedure SaveToFile(const FileName: String); + procedure SaveToStream(Stream: TTaggedStream); virtual; + procedure LoadFromFile(const FileName: String); + procedure LoadFromStream(Stream: TTaggedStream); virtual; + + property Items[Index: Integer]: TSector read GetItems write SetItems; default; + end; + implementation *************** *** 253,256 **** --- 269,334 ---- FSectorPanels[i].TraverseAll(Self, FOnSectorTraversed); end; + end; + + { TSectorList } + + procedure TSectorList.FreeSectors; + var + i: Integer; + begin + for i := 0 to Count-1 do + Items[i].Free; + end; + + function TSectorList.GetItems(Index: Integer): TSector; + begin + Result := TSector(inherited Items[Index]); + end; + + procedure TSectorList.LoadFromFile(const FileName: String); + var + Stream: TTaggedFileStream; + begin + Stream := TTaggedFileStream.Create(FileName,fmOpenRead); + try + LoadFromStream(Stream); + finally + Stream.Free; + end; + end; + + procedure TSectorList.LoadFromStream(Stream: TTaggedStream); + begin + + end; + + procedure TSectorList.SaveToFile(const FileName: String); + var + Stream: TTaggedFileStream; + begin + Stream := TTaggedFileStream.Create(FileName, fmCreate); + try + SaveToStream(Stream); + finally + Stream.Free; + end; + end; + + procedure TSectorList.SaveToStream(Stream: TTaggedStream); + begin + + end; + + procedure TSectorList.SetItems(Index: Integer; const Value: TSector); + begin + Items[Index] := Value; + end; + + procedure TSectorList.Traverse(ClippingQuad: TQuad); + var + i: Integer; + begin + for i := 0 to Count-1 do + Items[i].Traverse(ClippingQuad); end; Index: Main.pas =================================================================== RCS file: /cvsroot/pythianproject/PythianProject/Source/SectorEditor/Main.pas,v retrieving revision 1.3 retrieving revision 1.4 diff -C2 -r1.3 -r1.4 *** Main.pas 2000/08/29 01:21:00 1.3 --- Main.pas 2000/11/14 10:46:43 1.4 *************** *** 9,21 **** ViewerForm, SECommon, Quads; - const - NumPanelColors = 8; - PanelColors : array [0..NumPanelColors-1] of TGLColor = ( - (1.0,0.0,0.0,1.0), (0.0,1.0,0.0,1.0), - (0.0,0.0,1.0,1.0), (0.0,0.5,0.5,1.0), - (0.5,0.0,0.5,1.0), (0.5,0.5,0.0,1.0), - (0.3,0.3,0.4,1.0), (0.2,0.6,0.2,1.0) - ); - type TfrmMain = class(TForm) --- 9,12 ---- *************** *** 61,68 **** Scale1: TMenuItem; Edit1: TMenuItem; procedure FormCreate(Sender: TObject); procedure FormShow(Sender: TObject); procedure FormDestroy(Sender: TObject); ! procedure New1Click(Sender: TObject); procedure SaveAs1Click(Sender: TObject); procedure Open1Click(Sender: TObject); --- 52,63 ---- Scale1: TMenuItem; Edit1: TMenuItem; + tbLinkVert: TToolButton; + tbUnlinkVert: TToolButton; + Sector1: TMenuItem; + AddSector1: TMenuItem; procedure FormCreate(Sender: TObject); procedure FormShow(Sender: TObject); procedure FormDestroy(Sender: TObject); ! procedure AddSector1Click(Sender: TObject); procedure SaveAs1Click(Sender: TObject); procedure Open1Click(Sender: TObject); *************** *** 80,88 **** procedure tbSplitVertClick(Sender: TObject); procedure ModeClick(Sender: TObject); private { Private declarations } FSaved8087CW: Word; FCurrentMode: TMouseMode; ! FSector: TEditorSector; FMouseOverPanel: TEditorPanel; FMouseOverEdge: TEditorEdge; --- 75,87 ---- procedure tbSplitVertClick(Sender: TObject); procedure ModeClick(Sender: TObject); + procedure tbLinkVertClick(Sender: TObject); + procedure tbUnlinkVertClick(Sender: TObject); + procedure New1Click(Sender: TObject); private { Private declarations } FSaved8087CW: Word; FCurrentMode: TMouseMode; ! FSectorList: TEditorSectorList; ! FMouseOverSector: TEditorSector; FMouseOverPanel: TEditorPanel; FMouseOverEdge: TEditorEdge; *************** *** 101,104 **** --- 100,105 ---- function GetPanelState(Panel: TEditorPanel; State: TSEState) : Boolean; procedure SelectedListChanged(Ptr: Pointer; Action: TListNotification); + procedure ClearSectors; + function CreateSectorFromVerts(Vertices: TEditorVertexArray): TEditorSector; public { Public declarations } *************** *** 108,116 **** procedure CollapseSelectedVertices; procedure ExpandSelectedVertices; procedure UpdateStatusBar; - procedure SetPanelColors; property CurrentMode: TMouseMode read FCurrentMode write SetCurrentMode; ! property Sector: TEditorSector read FSector write FSector; property MouseOverPanel: TEditorPanel read FMouseOverPanel write FMouseOverPanel; property MouseOverEdge: TEditorEdge read FMouseOverEdge write FMouseOverEdge; --- 109,120 ---- procedure CollapseSelectedVertices; procedure ExpandSelectedVertices; + procedure LinkSelectedVertices; + procedure UnlinkSelectedVertices; + procedure ExtrudeSector(Panel: TEditorPanel; const Depth: Real); procedure UpdateStatusBar; property CurrentMode: TMouseMode read FCurrentMode write SetCurrentMode; ! property SectorList: TEditorSectorList read FSectorList write FSectorList; ! property MouseOverSector: TEditorSector read FMouseOverSector write FMouseOverSector; property MouseOverPanel: TEditorPanel read FMouseOverPanel write FMouseOverPanel; property MouseOverEdge: TEditorEdge read FMouseOverEdge write FMouseOverEdge; *************** *** 148,152 **** Set8087CW($133f); { Disable all fpu exceptions } ! FSector := nil; FIDCnt := 0; --- 152,159 ---- Set8087CW($133f); { Disable all fpu exceptions } ! FSectorList := TEditorSectorList.Create; ! FSectorList.VertexState := GetVertexState; ! FSectorList.EdgeState := GetEdgeState; ! FSectorList.PanelState := GetPanelState; FIDCnt := 0; *************** *** 166,170 **** Set8087CW(FSaved8087CW); ! FSector.Free; end; --- 173,178 ---- Set8087CW(FSaved8087CW); ! ClearSectors; ! FSectorList.Free; end; *************** *** 198,201 **** --- 206,212 ---- FSelectedVertices.Clear; + if (Value = mmEdit) then + WireFrame1.Checked := true; + //Update Appearance Toolbar1.Buttons[ Ord(Value)-1 ].Down := true; *************** *** 204,215 **** end; ! procedure TfrmMain.New1Click(Sender: TObject); begin FFileName := ''; FIDCnt := 0; - if Assigned(FSector) then - FSector.Free; ! FSector := BuildBasicSector; end; --- 215,227 ---- end; ! procedure TfrmMain.AddSector1Click(Sender: TObject); ! var ! Sector: TEditorSector; begin FFileName := ''; FIDCnt := 0; ! Sector := BuildBasicSector; ! FSectorList.Add(Sector); end; *************** *** 219,228 **** var i: Integer; ! Panel: TSectorPanel; ! Vertices: array of TEditorVertex; ! Edges: array of TEditorEdge; begin - Result := TEditorSector.Create; - SetLength(Vertices, 8); for i := 0 to High(Vertices) do --- 231,236 ---- var i: Integer; ! Vertices: TEditorVertexArray; begin SetLength(Vertices, 8); for i := 0 to High(Vertices) do *************** *** 241,326 **** Vertices[6].Position := MakePoint3D(+HL, +HL, +HL); Vertices[7].Position := MakePoint3D(-HL, +HL, +HL); - - SetLength(Edges, 12); - for i := 0 to High(Edges) do - begin - Edges[i] := TEditorEdge.Create; - Edges[i].OnGetState := GetEdgeState; - end; - - Edges[0].Vertices[0] := Vertices[3]; - Edges[0].Vertices[1] := Vertices[7]; - Edges[1].Vertices[0] := Vertices[7]; - Edges[1].Vertices[1] := Vertices[6]; - Edges[2].Vertices[0] := Vertices[6]; - Edges[2].Vertices[1] := Vertices[2]; - Edges[3].Vertices[0] := Vertices[2]; - Edges[3].Vertices[1] := Vertices[3]; - - Edges[4].Vertices[0] := Vertices[0]; - Edges[4].Vertices[1] := Vertices[4]; - Edges[5].Vertices[0] := Vertices[4]; - Edges[5].Vertices[1] := Vertices[5]; - Edges[6].Vertices[0] := Vertices[5]; - Edges[6].Vertices[1] := Vertices[1]; - Edges[7].Vertices[0] := Vertices[1]; - Edges[7].Vertices[1] := Vertices[0]; - - Edges[8].Vertices[0] := Vertices[4]; - Edges[8].Vertices[1] := Vertices[7]; - Edges[9].Vertices[0] := Vertices[3]; - Edges[9].Vertices[1] := Vertices[0]; - Edges[10].Vertices[0] := Vertices[6]; - Edges[10].Vertices[1] := Vertices[5]; - Edges[11].Vertices[0] := Vertices[1]; - Edges[11].Vertices[1] := Vertices[2]; - - // Front face - Panel := Result.AddPanel; - TEditorPanel(Panel).OnGetState := GetPanelState; - TEditorPanel(Panel).Edges[0] := Edges[0]; - TEditorPanel(Panel).Edges[1] := Edges[1]; - TEditorPanel(Panel).Edges[2] := Edges[2]; - TEditorPanel(Panel).Edges[3] := Edges[3]; - - // Back face - Panel := Result.AddPanel; - TEditorPanel(Panel).OnGetState := GetPanelState; - TEditorPanel(Panel).Edges[0] := Edges[4]; - TEditorPanel(Panel).Edges[1] := Edges[5]; - TEditorPanel(Panel).Edges[2] := Edges[6]; - TEditorPanel(Panel).Edges[3] := Edges[7]; - - // Left face - Panel := Result.AddPanel; - TEditorPanel(Panel).OnGetState := GetPanelState; - TEditorPanel(Panel).Edges[0] := Edges[4]; - TEditorPanel(Panel).Edges[1] := Edges[8]; - TEditorPanel(Panel).Edges[2] := Edges[0]; - TEditorPanel(Panel).Edges[3] := Edges[9]; ! // Right face ! Panel := Result.AddPanel; ! TEditorPanel(Panel).OnGetState := GetPanelState; ! TEditorPanel(Panel).Edges[0] := Edges[2]; ! TEditorPanel(Panel).Edges[1] := Edges[10]; ! TEditorPanel(Panel).Edges[2] := Edges[6]; ! TEditorPanel(Panel).Edges[3] := Edges[11]; ! ! // Top face ! Panel := Result.AddPanel; ! TEditorPanel(Panel).OnGetState := GetPanelState; ! TEditorPanel(Panel).Edges[0] := Edges[8]; ! TEditorPanel(Panel).Edges[1] := Edges[5]; ! TEditorPanel(Panel).Edges[2] := Edges[10]; ! TEditorPanel(Panel).Edges[3] := Edges[1]; ! ! // Bottom face ! Panel := Result.AddPanel; ! TEditorPanel(Panel).OnGetState := GetPanelState; ! TEditorPanel(Panel).Edges[0] := Edges[9]; ! TEditorPanel(Panel).Edges[1] := Edges[7]; ! TEditorPanel(Panel).Edges[2] := Edges[11]; ! TEditorPanel(Panel).Edges[3] := Edges[3]; end; --- 249,254 ---- Vertices[6].Position := MakePoint3D(+HL, +HL, +HL); Vertices[7].Position := MakePoint3D(-HL, +HL, +HL); ! Result := CreateSectorFromVerts(Vertices); end; *************** *** 333,336 **** --- 261,265 ---- procedure TfrmMain.SelectVertex(Vertex: TEditorVertex; const ClearFirst: Boolean); begin + Vertex := Vertex.GetSelectable; if (ClearFirst) then begin *************** *** 340,344 **** else if (FSelectedVertices.IndexOf(Vertex) = -1) then ! FSelectedVertices.Add(Vertex); end; --- 269,273 ---- else if (FSelectedVertices.IndexOf(Vertex) = -1) then ! FSelectedVertices.Add( Vertex); end; *************** *** 353,358 **** FFileName := FileName; ! if (FSector <> nil) then ! FSector.SaveToEditorFile(FFileName); sbMain.Panels[0].Text := 'Ready'; --- 282,287 ---- FFileName := FileName; ! if (FSectorList.Count > 0) then ! FSectorList.SaveToFile(FFileName); sbMain.Panels[0].Text := 'Ready'; *************** *** 379,391 **** begin sbMain.Panels[0].Text := 'Loading...'; - - FSector.Free; - FSector := TEditorSector.Create; - FSector.VertexState := GetVertexState; - FSector.EdgeState := GetEdgeState; - FSector.PanelState := GetPanelState; - FFileName := FileName; ! FSector.LoadFromEditorFile(FFileName); sbMain.Panels[0].Text := 'Ready'; --- 308,315 ---- begin sbMain.Panels[0].Text := 'Loading...'; FFileName := FileName; ! ! FSectorList.FreeSectors; ! FSectorList.LoadFromFile(FFileName); sbMain.Panels[0].Text := 'Ready'; *************** *** 407,411 **** sbMain.Panels[0].Text := 'Saving...'; ! FSector.SaveToEditorFile(FFileName); sbMain.Panels[0].Text := 'Ready'; --- 331,335 ---- sbMain.Panels[0].Text := 'Saving...'; ! FSectorList.SaveToFile(FFileName); sbMain.Panels[0].Text := 'Ready'; *************** *** 445,449 **** if (SolidModel1.Checked) then ! SetPanelColors; end; --- 369,373 ---- if (SolidModel1.Checked) then ! FSectorList.SetSectorColors; end; *************** *** 482,485 **** --- 406,410 ---- seSelected: Result := False; seInSelection: Result := FInSelection; + seSolidModel: Result := SolidModel1.Checked; else Result := False; end; *************** *** 550,628 **** procedure TfrmMain.SelectedListChanged(Ptr: Pointer; Action: TListNotification); begin ! tbJoinVert.Enabled := (FSelectedVertices.Count>1); tbSplitVert.Enabled := (FSelectedVertices.Count > 0) and (FSelectedVertices[0].NumCollapsedVertices > 0); UpdateStatusBar; end; ! procedure TfrmMain.SetPanelColors; var i: Integer; begin ! if (FSector = nil) then exit; ! for i := 0 to FSector.NumPanels-1 do ! TEditorPanel(FSector.Panels[i]).SolidColor := PanelColors[ i mod NumPanelColors ]; end; - (* - procedure TfrmMain.SetPanelColors; - const - BlackColor : TGLColor = (0.0,0.0,0.0,1.0); ! function ColorEqual(c1,c2: TGLColor): Boolean; ! var ! i: Integer; ! begin ! Result := true; ! for i := 0 to 3 do ! Result := Result and (c1[i] = c2[i]); ! end; ! procedure RemoveColor(Colors: TList; Color: TGLColor); ! var ! i: Integer; ! begin ! for i := 0 to Colors.Count-1 do ! if (ColorEqual(Color, PanelColors[ Integer(Colors[i]) ])) then ! begin ! Colors.Delete(i); ! exit; ! end; ! end; var ! i,j: Integer; ! Neighbors, AvailColors: TList; begin ! Neighbors := TList.Create; ! AvailColors := TList.Create; ! try ! for i := 0 to FSector.NumPanels-1 do ! TEditorPanel(FSector.Panels[i]).SolidColor := BlackColor; ! for i := 0 to FSector.NumPanels-1 do ! begin ! //TEditorPanel(FSector.Panels[i]).SolidColor := PanelColors[ i mod NumPanelColors ]; ! Neighbors.Clear; ! AvailColors.Clear; ! for j := 0 to NumPanelColors-1 do ! AvailColors.Add(Pointer(j)); ! ! FSector.GetNeighborPanels(FSector.Panels[i],Neighbors); ! for j := 0 to Neighbors.Count-1 do ! with TEditorPanel(Neighbors[j]) do ! if not(ColorEqual(SolidColor,BlackColor)) then ! RemoveColor(AvailColors, SolidColor); ! j := Random(AvailColors.Count); ! TEditorPanel(FSector.Panels[i]).SolidColor := PanelColors[ Integer(AvailColors[j]) ]; ! end; ! finally ! Neighbors.Free; ! AvailColors.Free; end; end; *) end. --- 475,686 ---- procedure TfrmMain.SelectedListChanged(Ptr: Pointer; Action: TListNotification); begin ! tbJoinVert.Enabled := (FSelectedVertices.Count > 1) and (MouseOverSector.AreCollapsable(SelectedVertices)); tbSplitVert.Enabled := (FSelectedVertices.Count > 0) and (FSelectedVertices[0].NumCollapsedVertices > 0); + tbLinkVert.Enabled := (FSelectedVertices.Count > 1) and (AreLinkable(FSectorList,SelectedVertices)); + tbUnlinkVert.Enabled := (FSelectedVertices.Count> 0) and (FSelectedVertices[0].NumLinkedVertices > 0); UpdateStatusBar; end; ! procedure TfrmMain.LinkSelectedVertices; var i: Integer; begin ! if (FSelectedVertices.Count < 2) then exit; ! for i := 1 to FSelectedVertices.Count-1 do ! FSelectedVertices[0].AddLinkedVertex(FSelectedVertices[i]); end; ! procedure TfrmMain.UnlinkSelectedVertices; ! var ! i: Integer; ! begin ! for i := 0 to FSelectedVertices.Count-1 do ! FSelectedVertices[i].Unlink; ! end; ! procedure TfrmMain.tbLinkVertClick(Sender: TObject); ! begin ! LinkSelectedVertices; ! end; ! ! procedure TfrmMain.tbUnlinkVertClick(Sender: TObject); ! begin ! UnlinkSelectedVertices; ! end; + procedure TfrmMain.New1Click(Sender: TObject); + begin + ClearSectors; + end; + + procedure TfrmMain.ClearSectors; var ! i: Integer; begin ! for i := 0 to FSectorList.Count-1 do ! FSectorList[i].Free; ! FSectorList.Clear; ! end; ! function TfrmMain.CreateSectorFromVerts(Vertices: TEditorVertexArray): TEditorSector; ! var ! i: Integer; ! Panel: TEditorPanel; ! Edges: array of TEditorEdge; ! begin ! Result := TEditorSector.Create; ! SetLength(Edges, 12); ! for i := 0 to High(Edges) do ! begin ! Edges[i] := TEditorEdge.Create; ! Edges[i].OnGetState := GetEdgeState; end; + + Edges[0].VerticesNil[0] := Vertices[3]; + Edges[0].VerticesNil[1] := Vertices[7]; + Edges[1].VerticesNil[0] := Vertices[7]; + Edges[1].VerticesNil[1] := Vertices[6]; + Edges[2].VerticesNil[0] := Vertices[6]; + Edges[2].VerticesNil[1] := Vertices[2]; + Edges[3].VerticesNil[0] := Vertices[2]; + Edges[3].VerticesNil[1] := Vertices[3]; + + Edges[4].VerticesNil[0] := Vertices[0]; + Edges[4].VerticesNil[1] := Vertices[4]; + Edges[5].VerticesNil[0] := Vertices[4]; + Edges[5].VerticesNil[1] := Vertices[5]; + Edges[6].VerticesNil[0] := Vertices[5]; + Edges[6].VerticesNil[1] := Vertices[1]; + Edges[7].VerticesNil[0] := Vertices[1]; + Edges[7].VerticesNil[1] := Vertices[0]; + + Edges[8].VerticesNil[0] := Vertices[4]; + Edges[8].VerticesNil[1] := Vertices[7]; + Edges[9].VerticesNil[0] := Vertices[3]; + Edges[9].VerticesNil[1] := Vertices[0]; + Edges[10].VerticesNil[0] := Vertices[6]; + Edges[10].VerticesNil[1] := Vertices[5]; + Edges[11].VerticesNil[0] := Vertices[1]; + Edges[11].VerticesNil[1] := Vertices[2]; + + // Front face + Panel := TEditorPanel(Result.AddPanel); + Panel.OnGetState := GetPanelState; + Panel.Edges[0] := Edges[0]; + Panel.Edges[1] := Edges[1]; + Panel.Edges[2] := Edges[2]; + Panel.Edges[3] := Edges[3]; + Panel.EdgeOrients[0] := true; + Panel.EdgeOrients[1] := true; + Panel.EdgeOrients[2] := true; + Panel.EdgeOrients[3] := true; + + // Back face + Panel := TEditorPanel(Result.AddPanel); + Panel.OnGetState := GetPanelState; + Panel.Edges[0] := Edges[4]; + Panel.Edges[1] := Edges[5]; + Panel.Edges[2] := Edges[6]; + Panel.Edges[3] := Edges[7]; + Panel.EdgeOrients[0] := true; + Panel.EdgeOrients[1] := true; + Panel.EdgeOrients[2] := true; + Panel.EdgeOrients[3] := true; + + // Left face + Panel := TEditorPanel(Result.AddPanel); + Panel.OnGetState := GetPanelState; + Panel.Edges[0] := Edges[4]; + Panel.Edges[1] := Edges[8]; + Panel.Edges[2] := Edges[0]; + Panel.Edges[3] := Edges[9]; + Panel.EdgeOrients[0] := true; + Panel.EdgeOrients[1] := true; + Panel.EdgeOrients[2] := false; + Panel.EdgeOrients[3] := true; + + // Right face + Panel := TEditorPanel(Result.AddPanel); + Panel.OnGetState := GetPanelState; + Panel.Edges[0] := Edges[2]; + Panel.Edges[1] := Edges[10]; + Panel.Edges[2] := Edges[6]; + Panel.Edges[3] := Edges[11]; + Panel.EdgeOrients[0] := false; + Panel.EdgeOrients[1] := true; + Panel.EdgeOrients[2] := true; + Panel.EdgeOrients[3] := true; + + // Top face + Panel := TEditorPanel(Result.AddPanel); + Panel.OnGetState := GetPanelState; + Panel.Edges[0] := Edges[8]; + Panel.Edges[1] := Edges[5]; + Panel.Edges[2] := Edges[10]; + Panel.Edges[3] := Edges[1]; + Panel.EdgeOrients[0] := false; + Panel.EdgeOrients[1] := true; + Panel.EdgeOrients[2] := false; + Panel.EdgeOrients[3] := false; + + // Bottom face + Panel := TEditorPanel(Result.AddPanel); + Panel.OnGetState := GetPanelState; + Panel.Edges[0] := Edges[9]; + Panel.Edges[1] := Edges[7]; + Panel.Edges[2] := Edges[11]; + Panel.Edges[3] := Edges[3]; + Panel.EdgeOrients[0] := true; + Panel.EdgeOrients[1] := false; + Panel.EdgeOrients[2] := true; + Panel.EdgeOrients[3] := true; end; + + //Bottom and back panels extrude inversely...should be an elegant solution (since winding is established now) + procedure TfrmMain.ExtrudeSector(Panel: TEditorPanel; const Depth: Real); + var + i: Integer; + Vertices, PanelVerts: TEditorVertexArray; + begin + //Get ordered list of vertices (clockwise) + SetLength(PanelVerts,4); + (* + LastEdge := Panel.Edges[0]; + PanelVerts[0] := LastEdge.Vertices[0]; + for i := 1 to 3 do + begin + LastEdge := Panel.FindEdge(PanelVerts[i-1], LastEdge.GetOtherVertex(PanelVerts[i-1])); + PanelVerts[i] := LastEdge.GetOtherVertex(PanelVerts[i-1]); + end; *) + for i := 0 to 3 do + PanelVerts[i] := Panel.Edges[i].Vertices[0,Panel]; + + //Setup for sector creation + SetLength(Vertices, 8); + for i := 0 to 7 do + begin + Vertices[i] := TEditorVertex.Create; + Vertices[i].OnGetState := GetVertexState; + end; + + //AddLinkedVertex assigns passed Vertex.Position to self.Position + PanelVerts[0].AddLinkedVertex( Vertices[0] ); + PanelVerts[1].AddLinkedVertex( Vertices[4] ); + PanelVerts[2].AddLinkedVertex( Vertices[5] ); + PanelVerts[3].AddLinkedVertex( Vertices[1] ); + + Vertices[3].Position := AddPoint(Vertices[0].Position,ScalePoint(CrossProduct(Normalize(SubPoint(Vertices[4].Position,Vertices[0].Position)), Normalize(SubPoint(Vertices[1].Position,Vertices[0].Position))),-Depth)); + Vertices[7].Position := AddPoint(Vertices[4].Position,ScalePoint(CrossProduct(Normalize(SubPoint(Vertices[5].Position,Vertices[4].Position)), Normalize(SubPoint(Vertices[0].Position,Vertices[4].Position))),-Depth)); + Vertices[6].Position := AddPoint(Vertices[5].Position,ScalePoint(CrossProduct(Normalize(SubPoint(Vertices[1].Position,Vertices[5].Position)), Normalize(SubPoint(Vertices[4].Position,Vertices[5].Position))),-Depth)); + Vertices[2].Position := AddPoint(Vertices[1].Position,ScalePoint(CrossProduct(Normalize(SubPoint(Vertices[0].Position,Vertices[1].Position)), Normalize(SubPoint(Vertices[5].Position,Vertices[1].Position))),-Depth)); + + FSectorList.Add( CreateSectorFromVerts(Vertices) ); + end; + end. Index: Main.dfm =================================================================== RCS file: /cvsroot/pythianproject/PythianProject/Source/SectorEditor/Main.dfm,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -r1.2 -r1.3 Binary files /tmp/cvsQhpsI0 and /tmp/cvskRlgaR differ Index: EditorSectors.pas =================================================================== RCS file: /cvsroot/pythianproject/PythianProject/Source/SectorEditor/EditorSectors.pas,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -r1.2 -r1.3 *** EditorSectors.pas 2000/08/28 20:38:32 1.2 --- EditorSectors.pas 2000/11/14 10:46:43 1.3 *************** *** 3,8 **** interface ! uses Classes, SysUtils, NewSectors, Points, Quads; type TEditorVertex = class; --- 3,17 ---- interface ! uses Classes, TaggedStreams, SysUtils, NewSectors, Points, Quads; [...1550 lines suppressed...] + var + i: Integer; + begin + Randomize; + for i := 0 to Count-1 do + Items[i].SetPanelColors; + end; + + procedure TEditorSectorList.Traverse(ClippingQuad: TQuad); + var + i: Integer; + begin + glPushName(0); + + for i := 0 to Count-1 do + begin + glLoadName(i); + Items[i].Traverse(ClippingQuad); end; |