From: Darryl L. <py...@us...> - 2000-11-28 19:02:30
|
Update of /cvsroot/pythianproject/PythianProject/Source/SectorEditor In directory slayer.i.sourceforge.net:/tmp/cvs-serv7526 Modified Files: ViewerForm.pas ViewerForm.dfm Log Message: Some bug fixes and new features. Sector extrusion, merging vertices, etc. Index: ViewerForm.pas =================================================================== RCS file: /cvsroot/pythianproject/PythianProject/Source/SectorEditor/ViewerForm.pas,v retrieving revision 1.3 retrieving revision 1.4 diff -C2 -r1.3 -r1.4 *** ViewerForm.pas 2000/08/31 17:29:42 1.3 --- ViewerForm.pas 2000/11/28 19:02:26 1.4 *************** *** 28,32 **** SplitVertical1: TMenuItem; N3: TMenuItem; - SelectOtherSide1: TMenuItem; CollapseVertices1: TMenuItem; ExpandVertex1: TMenuItem; --- 28,31 ---- *************** *** 37,40 **** --- 36,47 ---- Zoom1: TMenuItem; Edit1: TMenuItem; + SelectPanelVertices1: TMenuItem; + N2: TMenuItem; + SelectEdgeVertices1: TMenuItem; + SelectSectorVertices1: TMenuItem; + ExtrudeSector1: TMenuItem; + LinkVertices1: TMenuItem; + UnlinkVertices1: TMenuItem; + DeleteSector1: TMenuItem; procedure GLPanel1GLDraw(Sender: TObject); procedure FormCreate(Sender: TObject); *************** *** 46,50 **** procedure GLPanel1MouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); - procedure SelectOtherSide1Click(Sender: TObject); procedure SplitHorizontal1Click(Sender: TObject); procedure SplitVertical1Click(Sender: TObject); --- 53,56 ---- *************** *** 57,60 **** --- 63,73 ---- procedure popMainPopup(Sender: TObject); procedure ModeClick(Sender: TObject); + procedure SelectEdgeVertices1Click(Sender: TObject); + procedure SelectPanelVertices1Click(Sender: TObject); + procedure SelectSectorVertices1Click(Sender: TObject); + procedure ExtrudeSector1Click(Sender: TObject); + procedure LinkVertices1Click(Sender: TObject); + procedure UnlinkVertices1Click(Sender: TObject); + procedure DeleteSector1Click(Sender: TObject); private { Private declarations } *************** *** 81,86 **** procedure SetMOPanel(const Value: TEditorPanel); function GetCurrentMode: TMouseMode; - function GetSector: TEditorSector; - procedure SetSector(const Value: TEditorSector); function GetModelAngle: TAngle3D; --- 94,97 ---- *************** *** 88,91 **** --- 99,105 ---- procedure CollapseSelectedVertices; procedure ExpandSelectedVertices; + procedure LinkSelectedVertices; + procedure UnlinkSelectedVertices; + procedure ExtrudeSector(Panel: TEditorPanel; const Depth: Real); procedure UpdateStatusBar; function GetMOVertex: TEditorVertex; *************** *** 102,105 **** --- 116,123 ---- function GetInSelection: Boolean; procedure SetInSelection(const Value: Boolean); + function GetSectorList: TEditorSectorList; + procedure SetSectorList(const Value: TEditorSectorList); + function GetMouseOverSector: TEditorSector; + procedure SetMouseOverSector(const Value: TEditorSector); public { Public declarations } *************** *** 113,119 **** property MainFrm: TCustomForm read FMainFrm write FMainFrm; ! property Sector: TEditorSector read GetSector write SetSector; property CurrentMode: TMouseMode read GetCurrentMode write SetCurrentMode; property SolidModel: Boolean read GetSolidModel; property MouseOverPanel: TEditorPanel read GetMOPanel write SetMOPanel; property MouseOverEdge: TEditorEdge read GetMOEdge write SetMOEdge; --- 131,138 ---- property MainFrm: TCustomForm read FMainFrm write FMainFrm; ! property SectorList: TEditorSectorList read GetSectorList write SetSectorList; property CurrentMode: TMouseMode read GetCurrentMode write SetCurrentMode; property SolidModel: Boolean read GetSolidModel; + property MouseOverSector: TEditorSector read GetMouseOverSector write SetMouseOverSector; property MouseOverPanel: TEditorPanel read GetMOPanel write SetMOPanel; property MouseOverEdge: TEditorEdge read GetMOEdge write SetMOEdge; *************** *** 279,284 **** RenderAxes; ! if (Sector <> nil) then ! Sector.Traverse(NullQuad); glPopMatrix; --- 298,302 ---- RenderAxes; ! SectorList.Traverse(NullQuad); glPopMatrix; *************** *** 365,370 **** if (FMouseMode = mmDraggingVertex) then begin ! FVertexDragged := TRUE; ! P := RotatePoint(MakePoint3D(FMousePos.x*(FPosition.z/300),-FMousePos.y*(FPosition.z/300),0),AddPoint(ModelAngle,FCameraAngle)); --- 383,387 ---- if (FMouseMode = mmDraggingVertex) then begin ! FVertexDragged := true; P := RotatePoint(MakePoint3D(FMousePos.x*(FPosition.z/300),-FMousePos.y*(FPosition.z/300),0),AddPoint(ModelAngle,FCameraAngle)); *************** *** 380,385 **** if (MouseOverEdge <> nil) then begin //Move edge ! MouseOverEdge.Vertices[0].MoveVertex(P,False); ! MouseOverEdge.Vertices[1].MoveVertex(P,False); end; end; --- 397,402 ---- if (MouseOverEdge <> nil) then begin //Move edge ! MouseOverEdge.VerticesNil[0].MoveVertex(P,False); ! MouseOverEdge.VerticesNil[1].MoveVertex(P,False); end; end; *************** *** 388,391 **** --- 405,409 ---- else begin + MouseOverSector := nil; MouseOverPanel := nil; MouseOverEdge := nil; *************** *** 394,399 **** if (CurrentMode = mmEdit) then UpdateSelection(x,y); - - UpdateStatusBar; end; end; --- 412,415 ---- *************** *** 429,434 **** if (MouseOverEdge <> nil) and (MouseOverVertex = nil) then begin //Select edge's vertices ! SelectVertex( MouseOverEdge.Vertices[0], not(ssCtrl in Shift) ); ! SelectVertex( MouseOverEdge.Vertices[1], FALSE ); end; end; --- 445,450 ---- if (MouseOverEdge <> nil) and (MouseOverVertex = nil) then begin //Select edge's vertices ! SelectVertex( MouseOverEdge.VerticesNil[0], not(ssCtrl in Shift) ); ! SelectVertex( MouseOverEdge.VerticesNil[1], FALSE ); end; end; *************** *** 448,456 **** Angle: TAngle3D; begin ! if not(Assigned(Sector)) then exit; - // InSelection := true; - glGetIntegerv(GL_VIEWPORT, @ViewPort[0]); --- 464,470 ---- Angle: TAngle3D; begin ! if (SectorList.Count = 0) then exit; glGetIntegerv(GL_VIEWPORT, @ViewPort[0]); *************** *** 483,487 **** glRotatef(Angle.z,0,0,1); ! Sector.Traverse(NullQuad); glPopMatrix; --- 497,501 ---- glRotatef(Angle.z,0,0,1); ! SectorList.Traverse(NullQuad); glPopMatrix; *************** *** 511,523 **** begin ClosestZ := dNear/$7fffffff; - MouseOverPanel := Sector.Panels[ Names[0] ]; if (NameCnt > 1) then begin ! MouseOverEdge := MouseOverPanel.Edges[ Names[1] ]; ! if (NameCnt = 3) then ! MouseOverVertex := MouseOverEdge.Vertices[ Names[2] ]; end; - - UpdateStatusBar; end; Inc(j,NameCnt+3); --- 525,539 ---- begin ClosestZ := dNear/$7fffffff; if (NameCnt > 1) then begin ! MouseOverSector := TEditorSector(SectorList[ Names[0] ]); ! MouseOverPanel := MouseOverSector.Panels[ Names[1] ]; ! if (NameCnt > 2) then ! begin ! MouseOverEdge := MouseOverPanel.Edges[ Names[2] ]; ! if (NameCnt > 3) then ! MouseOverVertex := MouseOverEdge.VerticesNil[ Names[3] ]; ! end; end; end; Inc(j,NameCnt+3); *************** *** 525,564 **** end; ! // InSelection := false; end; - procedure TfrmViewer.SelectOtherSide1Click(Sender: TObject); - var - i: Integer; - MOEdge: TEditorEdge; - MOPanel: TEditorPanel; - begin - MOEdge := MouseOverEdge; - MOPanel := MouseOverPanel; - for i := 0 to MOEdge.NumParentPanels-1 do - if (MOEdge.ParentPanel[i] = MOPanel) then - begin - if (i = MOEdge.NumParentPanels-1) then - MouseOverPanel := MOEdge.ParentPanel[0] - else - MouseOverPanel := MOEdge.ParentPanel[i+1]; - - DrawMOPanel := True; - RefreshAllViewers; - popMain.Popup(Mouse.CursorPos.x,Mouse.CursorPos.y); - DrawMOPanel := False; - - exit; - end; - end; - procedure TfrmViewer.SplitHorizontal1Click(Sender: TObject); begin ! Sector.SplitPanel(MouseOverPanel, True); end; procedure TfrmViewer.SplitVertical1Click(Sender: TObject); begin ! Sector.SplitPanel(MouseOverPanel, False); end; --- 541,555 ---- end; ! UpdateStatusBar; end; procedure TfrmViewer.SplitHorizontal1Click(Sender: TObject); begin ! MouseOverSector.SplitPanel(MouseOverPanel, True); end; procedure TfrmViewer.SplitVertical1Click(Sender: TObject); begin ! MouseOverSector.SplitPanel(MouseOverPanel, False); end; *************** *** 592,605 **** CollapseVertices1.Visible := (MouseOverVertex <> nil); ExpandVertex1.Visible := CollapseVertices1.Visible; ! CollapseVertices1.Enabled := (Sector.AreCollapsable(SelectedVertices)); ExpandVertex1.Enabled := (SelectedVertices.Count > 0) and (SelectedVertices[0].NumCollapsedVertices > 0); SplitHorizontal1.Visible := (MouseOverVertex = nil) and (MouseOverPanel <> nil); SplitVertical1.Visible := SplitHorizontal1.Visible; ! N3.Visible := (MouseOverVertex = nil) and (MouseOverEdge <> nil); ! SelectOtherSide1.Visible := N3.Visible; Mode1.Items[ Ord(CurrentMode)-1 ].Checked := TRUE; end; --- 583,606 ---- CollapseVertices1.Visible := (MouseOverVertex <> nil); ExpandVertex1.Visible := CollapseVertices1.Visible; ! LinkVertices1.Visible := CollapseVertices1.Visible; ! UnlinkVertices1.Visible := CollapseVertices1.Visible; ! CollapseVertices1.Enabled := MouseOverSector.AreCollapsable(SelectedVertices); ExpandVertex1.Enabled := (SelectedVertices.Count > 0) and (SelectedVertices[0].NumCollapsedVertices > 0); + LinkVertices1.Enabled := AreLinkable(SectorList,SelectedVertices); + UnlinkVertices1.Enabled := (SelectedVertices.Count > 0) and (SelectedVertices[0].NumLinkedVertices > 0); + DeleteSector1.Visible := (MouseOverSector <> nil); SplitHorizontal1.Visible := (MouseOverVertex = nil) and (MouseOverPanel <> nil); SplitVertical1.Visible := SplitHorizontal1.Visible; ! N3.Visible := (MouseOverPanel <> nil); ! ExtrudeSector1.Visible := N3.Visible; Mode1.Items[ Ord(CurrentMode)-1 ].Checked := TRUE; + + SelectEdgeVertices1.Visible := (MouseOverEdge <> nil); + SelectPanelVertices1.Visible := (MouseOverPanel <> nil); + SelectSectorVertices1.Visible := (MouseOverSector <> nil); + N2.Visible := (MouseOverVertex = nil) and (MouseOverSector <> nil); end; *************** *** 609,612 **** --- 610,676 ---- end; + procedure TfrmViewer.SelectEdgeVertices1Click(Sender: TObject); + begin + SelectVertex(MouseOverEdge.VerticesNil[0],true); + SelectVertex(MouseOverEdge.VerticesNil[1],false); + end; + + procedure TfrmViewer.SelectPanelVertices1Click(Sender: TObject); + var + i: Integer; + begin + for i := 0 to MouseOverPanel.NumEdges-1 do + SelectVertex(MouseOverPanel.Edges[i].Vertices[0,MouseOverPanel], (i=0)); + end; + + procedure TfrmViewer.SelectSectorVertices1Click(Sender: TObject); + var + i,j: Integer; + begin + for i := 0 to MouseOverSector.NumPanels-1 do + for j := 0 to MouseOverSector.Panels[i].NumEdges-1 do + SelectVertex(MouseOverSector.Panels[i].Edges[j].Vertices[0,MouseOverSector.Panels[i]], (i+j=0)); + end; + + procedure TfrmViewer.ExtrudeSector1Click(Sender: TObject); + var + St: String; + Num: Real; + Code: Integer; + Quit: Boolean; + begin + Num := 0; + repeat + St := '1.0'; + Quit := not(InputQuery('Extrude Sector','Depth of new sector:',St)); + if not(Quit) then + begin + Val(St,Num,Code); + if (Code <> 0) then + MessageDLG('Invalid entry.',mtError,[mbOk],0); + end; + until Quit or (Code = 0); + + if (St = 'Q') then + exit; + + ExtrudeSector(MouseOverPanel,Num); + end; + + procedure TfrmViewer.LinkVertices1Click(Sender: TObject); + begin + LinkSelectedVertices; + end; + + procedure TfrmViewer.UnlinkVertices1Click(Sender: TObject); + begin + UnlinkSelectedVertices; + end; + + procedure TfrmViewer.DeleteSector1Click(Sender: TObject); + begin + SectorList.Remove(MouseOverSector); + end; + // TfrmMain Interface methods *************** *** 631,644 **** end; - function TfrmViewer.GetSector: TEditorSector; - begin - Result := TfrmMain(FMainFrm).Sector; - end; - - procedure TfrmViewer.SetSector(const Value: TEditorSector); - begin - TfrmMain(FMainFrm).Sector := Value; - end; - procedure TfrmViewer.SelectVertex(Vertex: TEditorVertex; const ClearFirst: Boolean); begin --- 695,698 ---- *************** *** 730,737 **** procedure TfrmViewer.SetInSelection(const Value: Boolean); begin ! TFrmMain(FMainFrm).InSelection := Value; end; end. - \ No newline at end of file --- 784,825 ---- procedure TfrmViewer.SetInSelection(const Value: Boolean); + begin + TfrmMain(FMainFrm).InSelection := Value; + end; + + function TfrmViewer.GetSectorList: TEditorSectorList; + begin + Result := TfrmMain(FMainFrm).SectorList; + end; + + procedure TfrmViewer.SetSectorList(const Value: TEditorSectorList); + begin + TfrmMain(FMainFrm).SectorList := Value; + end; + + function TfrmViewer.GetMouseOverSector: TEditorSector; + begin + Result := TfrmMain(FMainFrm).MouseOverSector; + end; + + procedure TfrmViewer.SetMouseOverSector(const Value: TEditorSector); + begin + TfrmMain(FMainFrm).MouseOverSector := Value; + end; + + procedure TfrmViewer.LinkSelectedVertices; + begin + TfrmMain(FMainFrm).LinkSelectedVertices; + end; + + procedure TfrmViewer.UnlinkSelectedVertices; + begin + TfrmMain(FMainFrm).UnlinkSelectedVertices; + end; + + procedure TfrmViewer.ExtrudeSector(Panel: TEditorPanel; const Depth: Real); begin ! TfrmMain(FMainFrm).ExtrudeSector(Panel,Depth); end; end. Index: ViewerForm.dfm =================================================================== RCS file: /cvsroot/pythianproject/PythianProject/Source/SectorEditor/ViewerForm.dfm,v retrieving revision 1.3 retrieving revision 1.4 diff -C2 -r1.3 -r1.4 Binary files /tmp/cvshyPPoA and /tmp/cvsMgVSJ0 differ |