tx
2025-04-11 e8260697137f503aa0170b7a36170fd7168e9b80
WinFrmUI/DPumpHydr.WinFrmUI.Volute/Occ/OccDesignBaseCtrl.cs
@@ -1,6 +1,8 @@
using System;
using System.Collections.Generic;
using System.Windows.Forms;
using System.Reflection.Metadata;
using System.Windows.Forms;
using DPumpHydr.WinFrmUI.Volute.ViewModel;
using HydrEngineCSharp;
namespace DPumpHydr.WinFrmUI.Volute
@@ -8,35 +10,17 @@
    public partial class OccDesignBaseCtrl : UserControl
    {
        protected HydrEngineCSharp.CDisplayView pDisplayView;
        protected string strTurbopumpTopoShapeName = "蜗壳设计x";
        public OccDesignBaseCtrl()
        {
            InitializeComponent();
            //this.DefaultDockArea = RLT.Enum.Crown.DockArea.Document;
            //this._isDispCloseIcon = false ;//不能关闭
            //InitializeComponent();
            this.MouseDown += OnMouseDown;
            this.MouseMove += OnMouseMove;
            this.MouseUp += OnMouseUp;
            this.MouseWheel += OnMouseWheel;
            //string strTurbopumpTopoShapeName = "蜗壳设计" + (m_nNum++).ToString();
            //bool bSucc = pDisplayView.addTurbopumpTopoShape(strTurbopumpTopoShapeName);
            //if (bSucc)
            //{
            //    m_nCreateCurve = 1;
            //    //MessageBox.Show("开始蜗壳设计");
            //}
        }
@@ -57,7 +41,10 @@
        }
        public virtual void SetDimVisible(bool isVisible)
        {
        }
        protected void OnMouseDown(object sender, MouseEventArgs e)
@@ -148,14 +135,10 @@
        }
        protected bool _is3D = true;
        public void ClearAll()
        public virtual void Initial()
        {
            //pDisplayView.DeleteObject(strTurbopumpTopoShapeName);
            //pDisplayView.addTurbopumpTopoShape(strTurbopumpTopoShapeName);
        }
        public virtual void Initial( )
        {
        }
        #region 1-8 截面设计
@@ -165,40 +148,63 @@
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        public void RefreshAllSectShape18(ViewModel.SectionBundleInfo bundle)
        public List<int> RefreshAllSectShape18(ViewModel.SectionBundleInfo bundle)
        {
            if (_isFirstSectShape18)
            {
                CreateSectShape18(bundle);
                _isFirstSectShape18 = false;
                return CreateSectShape18(bundle);
            }
            else
            {
                EditSectShape18(bundle);
            }
            _isFirstSectShape18 = false;
                return EditSectShape18(bundle);
            }
        }
        protected void CreateSectShape18(ViewModel.SectionBundleInfo bundle)
        protected double _sectStartAngle = -HydrDisplayEngineBridge.PI_4;
        public double SectStartAngle
        {
            //pDisplayView.Update3DViews(_is3D);
            get
            {
                return _sectStartAngle;
            }
            set
            {
                _sectStartAngle = value;
            }
        }
            double dStartAngle = -HydrDisplayEngineBridge.PI_4;
        /// <summary>
        ///
        /// </summary>
        /// <param name="bundle"></param>
        protected List<int> CreateSectShape18(ViewModel.SectionBundleInfo bundle)
        {
            List<int> error_sect = new List<int>();
            double dDetAngle = 2 * HydrDisplayEngineBridge.PI / 8;
            for (int i = 8; i >=1; i--)
            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, dR_Left, dR_Right, dBaseWidth, dBaseCircleRadius;
                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;
                dR_Left = theSectionParam.R_Left;
                dR_Right = theSectionParam.R_Right;
                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;
                string wstrShapeNameI = string.Format("SectShape_{0}", theSectionParam.Index);
                HydrProperties theHydrProperties = new HydrProperties();
@@ -211,95 +217,106 @@
                double dAngle = (8 - theSectionParam.Index) * dDetAngle + dStartAngle;
                theHydrProperties.SetShapeName(wstrShapeNameI);
                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);
                //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);
                //}
                pDisplayView.addVoluteCurve( theSectionParam.Index, pHydrGeomCurve);
            }
                Invalidate(true);
                pDisplayView.FitAll3DViews(true);
        }
        protected void EditSectShape18(ViewModel.SectionBundleInfo bundle)
        {
            pDisplayView.Update3DViews(_is3D);
            double dStartAngle = -HydrDisplayEngineBridge.PI_4;
            double dDetAngle = 2 * HydrDisplayEngineBridge.PI / 8;
            for (int i = 1; i <= 8; i++)
            {
                var theSectionParam = bundle.ToSectionShapePara(i);
                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;
                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)
                ToolTips tt = pDisplayView.addVoluteCurve(theSectionParam.Index, pHydrGeomCurve);
                if (tt == null || tt.GetTipsId() != 1)
                {
                    continue;
                    error_sect.Add(theSectionParam.Index);
                }
                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);
                //}
                pDisplayView.editVoluteCurve(wstrShapeNameI, pHydrGeomCurve);
            }
            Invalidate(true);
            pDisplayView.FitAll3DViews(true);
            return error_sect;
        }
        /// <summary>
        ///
        /// </summary>
        /// <param name="bundle"></param>
        public List<int> EditSectShape18(ViewModel.SectionBundleInfo bundle)
        {
            List<int> error_sect = new List<int>();
            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;
        }
        /// <summary>
        ///
        /// </summary>
        /// <param name="theSectionParam"></param>
        public void RefreshSingleSectShape18(ViewModel.SectionShapePara theSectionParam)
        {
            pDisplayView.Update3DViews(true );
            pDisplayView.Update3DViews(true);
            double dStartAngle = -HydrDisplayEngineBridge.PI_4;
            double dStartAngle = _sectStartAngle;
            double dDetAngle = 2 * HydrDisplayEngineBridge.PI / 8;
            double dDetAngle = HydrDisplayEngineBridge.PI / 4;
            double dGama_Left, dGama_Right, dH, dR_out, dR_Left, dR_Right, dBaseWidth, dBaseCircleRadius;
@@ -312,8 +329,6 @@
            dBaseWidth = theSectionParam.BaseWidth;
            dBaseCircleRadius = theSectionParam.BaseCircleRadius;
            string wstrShapeNameI = string.Format("SectShape_{0}", theSectionParam.Index);
            HydrProperties theHydrProperties = new HydrProperties();
            HydrGeomCurve theHydrGeomCurve = HydrDisplayEngineBridge.CreateGeomCurve(HydrCurveType.EHydrGeomSection);
@@ -325,80 +340,250 @@
            double dAngle = (8 - theSectionParam.Index) * dDetAngle + dStartAngle;
            theHydrProperties.SetShapeName(wstrShapeNameI);
            theHydrProperties.SetShapeGuid(GlobalParas.BuildSectShapeName(theSectionParam.Index));
            pHydrGeomCurve.SetHydrProperties(theHydrProperties);
            pHydrGeomCurve.SetGeomSection(dGama_Left, dGama_Right, dH, dR_out, dR_Left, dR_Right, dBaseWidth );
            pHydrGeomCurve.SetGeomSection(dGama_Left, dGama_Right, dH, dR_out, dR_Left, dR_Right, dBaseWidth);
            pHydrGeomCurve.SetMatrix(dAngle, dBaseCircleRadius);
            //{
            //    BcGeMatrix theMatrix = BcGeMatrix.translate(0, dBaseCircleRadius, 0);
            //    BcGeMatrix theMatrix1 = BcGeMatrix.rotate(-dAngle, 1.0, 0.0, 0.0);
            //    theMatrix.postMult(theMatrix1);
            //    pHydrGeomCurve.SetMatrix(theMatrix);
            //}
            pDisplayView.editVoluteCurve(wstrShapeNameI, pHydrGeomCurve);
            pDisplayView.editVoluteCurve(GlobalParas.BuildSectShapeName(theSectionParam.Index), pHydrGeomCurve);
            Invalidate(true);
            Invalidate(true);
        }
        /// <summary>
        ///
        /// </summary>
        /// <param name="isVisible"></param>
        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);
            }
        }
        /// <summary>
        ///
        /// </summary>
        /// <param name="sectIndex"></param>
        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
        public HydrGeomSplineParam Create2DWaterBody(WaterBodyOuterParam theWaterBodyOuterParam)
        #region 水体
        public bool Create2DWaterBody(HydrEngineCSharp.WaterBodyOuterArcParam pHydrGeomArcCurve)
        {
            if (this._is3D)
                return null;
            bool bSucc = pDisplayView.build2DMidCurve(theWaterBodyOuterParam);
                return false;
            ToolTips theToolTips = this.pDisplayView.build2DMidCurve(pHydrGeomArcCurve);
            if (theToolTips == null)
                return false;
            Invalidate(true);
            pDisplayView.FitAll3DViews(true);
            if (bSucc)
            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 pDisplayView.getHydrGeomSplineParam();
                return true;
            }
            else
            {
                return null;
                pDisplayView.ClearTopoShape(TopoTypeDisplay.E2DMidCurve);
                MessageBox.Show(theToolTips.GetToolTips(), "2D提示");
                return false;
            }
        }
        public void Create3DWaterBody(WaterBodyOuterParam theWaterBodyOuterParam, HydrGeomSplineParam theHydrGeomSplineParam)
        public bool Create2DWaterBody(HydrEngineCSharp.WaterBodyOuterSpParam pHydrGeomCurve)
        {
            if (!this._is3D)
                return;
            if (theHydrGeomSplineParam != null)
            {
                string wstrName = "水体";
                string wstrShapeNameI = wstrName;
                HydrGeomCurve theHydrGeomCurve = HydrDisplayEngineBridge.CreateGeomCurve(HydrCurveType.EHydrGeomCircle);
                HydrProperties theHydrProperties = new HydrProperties();
                theHydrProperties.SetShapeName(wstrShapeNameI);
                theHydrGeomCurve.SetHydrProperties(theHydrProperties);
                if (pDisplayView.hasBuildThicknessBody())
                pDisplayView.removeThicknessBody();//
                pDisplayView.buildWaterBody(wstrShapeNameI, theHydrGeomSplineParam, theWaterBodyOuterParam);
                Invalidate(true);
                pDisplayView.FitAll3DViews(true);
            }
            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 void Edit3DWaterBody(WaterBodyOuterParam theWaterBodyOuterParam, HydrGeomSplineParam theHydrGeomSplineParam)
        public HydrEngineCSharp.ToolTips  Create3DWaterBody(HydrEngineCSharp.WaterBodyOuterSpParam pHydrGeomCurve)
        {
            if (!this._is3D)
                return;
            if(theHydrGeomSplineParam != null)
                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)
            {
                pDisplayView.rebuildWaterBody(theHydrGeomSplineParam, theWaterBodyOuterParam);
                Invalidate(true);
                pDisplayView.FitAll3DViews(true);
                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);
        }
    }
}