using System; using System.Collections.Generic; using System.Reflection.Metadata; using System.Windows.Forms; using DPumpHydr.WinFrmUI.Volute.ViewModel; using HydrEngineCSharp; namespace DPumpHydr.WinFrmUI.Volute { public partial class OccDesignBaseCtrl : UserControl { protected HydrEngineCSharp.CDisplayView pDisplayView; public OccDesignBaseCtrl() { //InitializeComponent(); this.MouseDown += OnMouseDown; this.MouseMove += OnMouseMove; this.MouseUp += OnMouseUp; this.MouseWheel += OnMouseWheel; } protected override void OnPaint(PaintEventArgs e) { // »æÖÆ´úÂë pDisplayView.OCCDraw(); } protected override void OnResize(EventArgs e) { base.OnResize(e); // ³ß´ç¸Ä±äʱµÄ´úÂë if (pDisplayView != null) { pDisplayView.OCCResize(); } } public virtual void SetDimVisible(bool isVisible) { } protected void OnMouseDown(object sender, MouseEventArgs e) { if (e.Button == MouseButtons.Left) { // Êó±ê×ó¼ü°´ÏµIJÙ×÷ HydrEngineCSharp.LT_PtInt2D pLT_PtInt2D = new HydrEngineCSharp.LT_PtInt2D(e.X, e.Y); uint nF = 0; pDisplayView.LButtonDown(nF, pLT_PtInt2D); } else if (e.Button == MouseButtons.Middle) { HydrEngineCSharp.LT_PtInt2D pLT_PtInt2D = new HydrEngineCSharp.LT_PtInt2D(e.X, e.Y); uint nF = 0; pDisplayView.MButtonDown(nF, pLT_PtInt2D); } else if (e.Button == MouseButtons.Right) { HydrEngineCSharp.LT_PtInt2D pLT_PtInt2D = new HydrEngineCSharp.LT_PtInt2D(e.X, e.Y); uint nF = 0; pDisplayView.RButtonDown(nF, pLT_PtInt2D); } } protected void OnMouseUp(object sender, MouseEventArgs e) { if (e.Button == MouseButtons.Left) { // Êó±ê×ó¼ü°´ÏµIJÙ×÷ HydrEngineCSharp.LT_PtInt2D pLT_PtInt2D = new HydrEngineCSharp.LT_PtInt2D(e.X, e.Y); uint nF = 0; pDisplayView.LButtonUp(nF, pLT_PtInt2D); } else if (e.Button == MouseButtons.Middle) { HydrEngineCSharp.LT_PtInt2D pLT_PtInt2D = new HydrEngineCSharp.LT_PtInt2D(e.X, e.Y); uint nF = 0; pDisplayView.MButtonUp(nF, pLT_PtInt2D); } else if (e.Button == MouseButtons.Right) { HydrEngineCSharp.LT_PtInt2D pLT_PtInt2D = new HydrEngineCSharp.LT_PtInt2D(e.X, e.Y); uint nF = 0; pDisplayView.RButtonUp(nF, pLT_PtInt2D); } } // Êó±ê¹öÂֵIJÙ×÷ protected void OnMouseWheel(object sender, MouseEventArgs e) { // e.Delta ·µ»Ø¹öÂֵĹö¶¯Öµ // Èç¹û e.Delta > 0 Ôò±íʾ¹öÂÖÏòÉÏ // Èç¹û e.Delta < 0 Ôò±íʾ¹öÂÖÏòÏ HydrEngineCSharp.LT_PtInt2D pLT_PtInt2D = new HydrEngineCSharp.LT_PtInt2D(e.X, e.Y); uint nF = 0; pDisplayView.MouseWheel(nF, (short)e.Delta, pLT_PtInt2D); } // Êó±êµÄ²Ù×÷ protected void OnMouseMove(object sender, MouseEventArgs e) { HydrEngineCSharp.LT_PtInt2D pLT_PtInt2D = new HydrEngineCSharp.LT_PtInt2D(e.X, e.Y); uint nF = 0; pDisplayView.MouseMove(nF, pLT_PtInt2D); } public void SetViewDirect(DPumpHydr.Model.eViewDirect vd) { if (vd == Model.eViewDirect.TOP) pDisplayView.SetViewDirect(HydrEngineCSharp.VIEWDIRECT.TOPVIEW); if (vd == Model.eViewDirect.FRONT) pDisplayView.SetViewDirect(HydrEngineCSharp.VIEWDIRECT.FRONTVIEW); if (vd == Model.eViewDirect.BACK) pDisplayView.SetViewDirect(HydrEngineCSharp.VIEWDIRECT.BACKVIEW); if (vd == Model.eViewDirect.INI) pDisplayView.SetViewDirect(HydrEngineCSharp.VIEWDIRECT.INITVIEW); if (vd == Model.eViewDirect.LEFT) pDisplayView.SetViewDirect(HydrEngineCSharp.VIEWDIRECT.LEFTVIEW); if (vd == Model.eViewDirect.RIGHT) pDisplayView.SetViewDirect(HydrEngineCSharp.VIEWDIRECT.RIGHTVIEW); } protected bool _is3D = true; public virtual void Initial() { } #region 1-8 ½ØÃæÉè¼Æ bool _isFirstSectShape18 = true; /// /// /// /// /// public List RefreshAllSectShape18(ViewModel.SectionBundleInfo bundle) { if (_isFirstSectShape18) { _isFirstSectShape18 = false; return CreateSectShape18(bundle); } else { return EditSectShape18(bundle); } } protected double _sectStartAngle = -HydrDisplayEngineBridge.PI_4; public double SectStartAngle { get { return _sectStartAngle; } set { _sectStartAngle = value; } } /// /// /// /// protected List CreateSectShape18(ViewModel.SectionBundleInfo bundle) { List error_sect = new List(); double dStartAngle = _sectStartAngle; double dDetAngle = HydrDisplayEngineBridge.PI / 4; for (int i = 8; i >= 1; i--) { var theSectionParam = bundle.ToSectionShapePara(i); double dGama_Left, dGama_Right, dH, dR_out, dBaseWidth, dBaseCircleRadius; dGama_Left = theSectionParam.Gama_Left; dGama_Right = theSectionParam.Gama_Right; dH = theSectionParam.H; dR_out = theSectionParam.R_out; double dR_Left = theSectionParam.R_Left; double dR_Right = theSectionParam.R_Right; if (dR_Left < 1) dR_Left = 1; if (dR_Right < 1) dR_Right = 1; dBaseWidth = theSectionParam.BaseWidth; dBaseCircleRadius = theSectionParam.BaseCircleRadius; HydrProperties theHydrProperties = new HydrProperties(); HydrGeomCurve theHydrGeomCurve = HydrDisplayEngineBridge.CreateGeomCurve(HydrCurveType.EHydrGeomSection); HydrGeomSection pHydrGeomCurve = theHydrGeomCurve as HydrGeomSection; if (pHydrGeomCurve == null) { continue; } double dAngle = (8 - theSectionParam.Index) * dDetAngle + dStartAngle; theHydrProperties.SetShapeGuid(GlobalParas.BuildSectShapeName(theSectionParam.Index)); pHydrGeomCurve.SetHydrProperties(theHydrProperties); pHydrGeomCurve.SetGeomSection(dGama_Left, dGama_Right, dH, dR_out, dR_Left, dR_Right, dBaseWidth); pHydrGeomCurve.SetMatrix(dAngle, dBaseCircleRadius); ToolTips tt = pDisplayView.addVoluteCurve(theSectionParam.Index, pHydrGeomCurve); if (tt == null || tt.GetTipsId() != 1) { error_sect.Add(theSectionParam.Index); } } Invalidate(true); pDisplayView.FitAll3DViews(true); return error_sect; } /// /// /// /// public List EditSectShape18(ViewModel.SectionBundleInfo bundle) { List error_sect = new List(); double dStartAngle = _sectStartAngle; double dDetAngle = HydrDisplayEngineBridge.PI / 4; for (int i = 1; i <= 8; i++) { var theSectionParam = bundle.ToSectionShapePara(i); double dGama_Left, dGama_Right, dH, dR_out, dBaseWidth, dBaseCircleRadius; dGama_Left = theSectionParam.Gama_Left; dGama_Right = theSectionParam.Gama_Right; dH = theSectionParam.H; dR_out = theSectionParam.R_out; double dR_Left = theSectionParam.R_Left; double dR_Right = theSectionParam.R_Right; dBaseWidth = theSectionParam.BaseWidth; dBaseCircleRadius = theSectionParam.BaseCircleRadius; if (dR_Left < 1) dR_Left = 1; if (dR_Right < 1) dR_Right = 1; string wstrShapeNameI = string.Format("SectShape_{0}", theSectionParam.Index); HydrProperties theHydrProperties = new HydrProperties(); HydrGeomCurve theHydrGeomCurve = HydrDisplayEngineBridge.CreateGeomCurve(HydrCurveType.EHydrGeomSection); HydrGeomSection pHydrGeomCurve = theHydrGeomCurve as HydrGeomSection; if (pHydrGeomCurve == null) { continue; } double dAngle = (8 - theSectionParam.Index) * dDetAngle + dStartAngle; //theHydrProperties.SetShapeName(wstrShapeNameI); pHydrGeomCurve.SetHydrProperties(theHydrProperties); pHydrGeomCurve.SetGeomSection(dGama_Left, dGama_Right, dH, dR_out, dR_Left, dR_Right, dBaseWidth); pHydrGeomCurve.SetMatrix(dAngle, dBaseCircleRadius); //if (_is3D) //{ // BcGeMatrix theMatrix = BcGeMatrix.translate(0, dBaseCircleRadius, 0); // BcGeMatrix theMatrix1 = BcGeMatrix.rotate(-dAngle, 1.0, 0.0, 0.0); // theMatrix.postMult(theMatrix1); // pHydrGeomCurve.SetMatrix(theMatrix); //} ToolTips tt = pDisplayView.editVoluteCurve(wstrShapeNameI, pHydrGeomCurve); //pDisplayView.addVoluteCurve(theSectionParam.Index, pHydrGeomCurve); if (tt == null || tt.GetTipsId() != 1) { error_sect.Add(theSectionParam.Index); } } Invalidate(true); pDisplayView.ShowTopoShape(TopoTypeDisplay.ESectionCurve); return error_sect; } /// /// /// /// public void RefreshSingleSectShape18(ViewModel.SectionShapePara theSectionParam) { pDisplayView.Update3DViews(true); double dStartAngle = _sectStartAngle; double dDetAngle = HydrDisplayEngineBridge.PI / 4; double dGama_Left, dGama_Right, dH, dR_out, dR_Left, dR_Right, dBaseWidth, dBaseCircleRadius; dGama_Left = theSectionParam.Gama_Left; dGama_Right = theSectionParam.Gama_Right; dH = theSectionParam.H; dR_out = theSectionParam.R_out; dR_Left = theSectionParam.R_Left; dR_Right = theSectionParam.R_Right; dBaseWidth = theSectionParam.BaseWidth; dBaseCircleRadius = theSectionParam.BaseCircleRadius; HydrProperties theHydrProperties = new HydrProperties(); HydrGeomCurve theHydrGeomCurve = HydrDisplayEngineBridge.CreateGeomCurve(HydrCurveType.EHydrGeomSection); HydrGeomSection pHydrGeomCurve = theHydrGeomCurve as HydrGeomSection; if (pHydrGeomCurve == null) { return; } double dAngle = (8 - theSectionParam.Index) * dDetAngle + dStartAngle; theHydrProperties.SetShapeGuid(GlobalParas.BuildSectShapeName(theSectionParam.Index)); pHydrGeomCurve.SetHydrProperties(theHydrProperties); pHydrGeomCurve.SetGeomSection(dGama_Left, dGama_Right, dH, dR_out, dR_Left, dR_Right, dBaseWidth); pHydrGeomCurve.SetMatrix(dAngle, dBaseCircleRadius); pDisplayView.editVoluteCurve(GlobalParas.BuildSectShapeName(theSectionParam.Index), pHydrGeomCurve); Invalidate(true); } /// /// /// /// public void SetAllSectionCurveVisible(bool isVisible) { for (int i = 8; i >= 1; i--) { string wstrShapeNameI = string.Format("SectShape_{0}", i); if (isVisible) pDisplayView.showVoluteCurve(wstrShapeNameI); else pDisplayView.hideVoluteCurve(wstrShapeNameI); } } /// /// /// /// public void HightLightSectCurve(int sectIndex) { for (int i = 1; i <= 8; i++) { if (i == sectIndex) this.pDisplayView.setVoluteCurveClr(i, 255, 20, 147); else this.pDisplayView.setVoluteCurveClr(i, 75, 0, 130); } Invalidate(true); } #endregion #region Ë®Ìå public bool Create2DWaterBody(HydrEngineCSharp.WaterBodyOuterArcParam pHydrGeomArcCurve) { if (this._is3D) return false; ToolTips theToolTips = this.pDisplayView.build2DMidCurve(pHydrGeomArcCurve); if (theToolTips == null) return false; Invalidate(true); pDisplayView.FitAll3DViews(true); pDisplayView.set2DMidCurveClr( DPumpHydr.WinFrmUI.Volute.GlobalParas.WaterBoudaryColor.R, DPumpHydr.WinFrmUI.Volute.GlobalParas.WaterBoudaryColor.G, DPumpHydr.WinFrmUI.Volute.GlobalParas.WaterBoudaryColor.B); if (theToolTips.GetTipsId() == 1) { return true; } else { pDisplayView.ClearTopoShape(TopoTypeDisplay.E2DMidCurve); MessageBox.Show(theToolTips.GetToolTips(), "2DÌáʾ"); return false; } } public bool Create2DWaterBody(HydrEngineCSharp.WaterBodyOuterSpParam pHydrGeomCurve) { if (this._is3D) return false ; ToolTips theToolTips = this.pDisplayView.build2DMidCurve(pHydrGeomCurve); if (theToolTips == null) return false ; Invalidate(true); pDisplayView.FitAll3DViews(true); pDisplayView.set2DMidCurveClr( DPumpHydr.WinFrmUI.Volute.GlobalParas.WaterBoudaryColor.R, DPumpHydr.WinFrmUI.Volute.GlobalParas.WaterBoudaryColor.G, DPumpHydr.WinFrmUI.Volute.GlobalParas.WaterBoudaryColor.B); if (theToolTips.GetTipsId() == 1) { return true ; } else { pDisplayView.ClearTopoShape(TopoTypeDisplay.E2DMidCurve); MessageBox.Show(theToolTips.GetToolTips(), "2DÌáʾ"); return false ; } } public HydrEngineCSharp.ToolTips Create3DWaterBody(HydrEngineCSharp.WaterBodyOuterSpParam pHydrGeomCurve) { if (!this._is3D) return null; HydrProperties theHydrProperties = new HydrProperties(); theHydrProperties.SetShapeGuid(DPumpHydr.WinFrmUI.Volute.GlobalParas.WaterBodyShapeName); theHydrProperties.SetShapeColor( DPumpHydr.WinFrmUI.Volute.GlobalParas.WaterBodyColor.R, DPumpHydr.WinFrmUI.Volute.GlobalParas.WaterBodyColor.G, DPumpHydr.WinFrmUI.Volute.GlobalParas.WaterBodyColor.B, 256); if (pDisplayView.hasBuildThicknessBody()) pDisplayView.ClearTopoShape(TopoTypeDisplay.EThicknessBody); var tt = pDisplayView.buildWaterBody(theHydrProperties, pHydrGeomCurve); if (tt.GetTipsId() != 1) { MessageBox.Show(tt.GetToolTips(), "3DÌáʾ"); } Invalidate(true); pDisplayView.FitAll3DViews(true); return tt; } public HydrEngineCSharp.ToolTips Create3DWaterBody(HydrEngineCSharp.WaterBodyOuterArcParam pHydrGeomArcCurve) { if (!this._is3D) return null; HydrProperties theHydrProperties = new HydrProperties(); theHydrProperties.SetShapeGuid(DPumpHydr.WinFrmUI.Volute.GlobalParas.WaterBodyShapeName); theHydrProperties.SetShapeColor( DPumpHydr.WinFrmUI.Volute.GlobalParas.WaterBodyColor.R, DPumpHydr.WinFrmUI.Volute.GlobalParas.WaterBodyColor.G, DPumpHydr.WinFrmUI.Volute.GlobalParas.WaterBodyColor.B, 256); if (pDisplayView.hasBuildThicknessBody()) pDisplayView.ClearTopoShape(TopoTypeDisplay.EThicknessBody); var tt = pDisplayView.buildWaterBody(theHydrProperties, pHydrGeomArcCurve); if (tt.GetTipsId() != 1) { MessageBox.Show(tt.GetToolTips(), "3DÌáʾ"); } Invalidate(true); pDisplayView.FitAll3DViews(true); return tt; } public HydrEngineCSharp.ToolTips Edit3DWaterBody(HydrEngineCSharp.WaterBodyOuterSpParam pHydrGeomCurve) { if (!this._is3D) return null; if (pDisplayView.hasBuildThicknessBody()) pDisplayView.ClearTopoShape(TopoTypeDisplay.EThicknessBody); var tt = pDisplayView.rebuildWaterBody(pHydrGeomCurve); if (tt == null) return null; if (tt.GetTipsId() != 1) { pDisplayView.ClearTopoShape(TopoTypeDisplay.EWaterBody); pDisplayView.FitAll3DViews(true); MessageBox.Show(tt.GetToolTips(), "3DÌáʾ"); } Invalidate(true); return tt; } public HydrEngineCSharp.ToolTips Edit3DWaterBody(HydrEngineCSharp.WaterBodyOuterArcParam pHydrGeomArcCurve) { if (!this._is3D) return null; if (pDisplayView.hasBuildThicknessBody()) pDisplayView.ClearTopoShape(TopoTypeDisplay.EThicknessBody); var tt = pDisplayView.rebuildWaterBody(pHydrGeomArcCurve); if (tt == null) return null; if (tt.GetTipsId() != 1) { pDisplayView.ClearTopoShape(TopoTypeDisplay.EWaterBody); pDisplayView.FitAll3DViews(true); MessageBox.Show(tt.GetToolTips(), "3DÌáʾ"); } Invalidate(true); return tt; } #endregion public virtual bool RemoveThicknessBody() { return pDisplayView.RemoveShow(TopoTypeDisplay.EThicknessBody); } public virtual bool RemoveWaterBody() { return pDisplayView.RemoveShow(TopoTypeDisplay.EWaterBody); } public virtual bool RemoveMidCurve() { return pDisplayView.RemoveShow(TopoTypeDisplay.E2DMidCurve); } public virtual bool RemoveSectCurve910() { pDisplayView.removeOuterSectionCurve(10); return pDisplayView.removeOuterSectionCurve( 9); } public virtual bool HideSectCurve18() { for (int i= 1;i <= 8;i++) pDisplayView.hideOuterSectionCurve(i); return true; } public bool HideAll() { var ret = pDisplayView.HideTopoShape(TopoTypeDisplay.EAllBody); //bool bSucc = pDisplayView.BeginTurbopumpTopoShape(DPumpHydr.WinFrmUI.Volute.GlobalParas.RootTopoShapeName); Invalidate(true); return ret; } public bool ClearAll() { _isFirstSectShape18 = true; var ret = pDisplayView.ClearTopoShape(TopoTypeDisplay.EAllBody); //bool bSucc = pDisplayView.BeginTurbopumpTopoShape(DPumpHydr.WinFrmUI.Volute.GlobalParas.RootTopoShapeName); Invalidate(true); return ret; } public void FitView() { pDisplayView.FitAll3DViews(true); } } }