tangxu
2024-11-07 4546b652e6de456dcf040bf751047f7c06bc5675
WinFrmUI/DPumpHydr.WinFrmUI.Volute/Occ/OccDesignCtrl.cs
@@ -1,15 +1,15 @@
using System;
using System.Collections.Generic;
using System.Windows.Forms;
using DPumpHydr.WinFrmUI.RLT.Docking.Crown;
using HydrEngineCSharp;
namespace DPumpHydr.WinFrmUI.Volute
{
    public partial class OccDesignCtrl : System.Windows.Forms.UserControl
    {
    public partial class OccDesignCtrl : UserControl
    {
        private HydrEngineCSharp.CDisplayView pDisplayView;
        private int m_nCreateCurve = 0;
        private int m_nNum = 0;
        private int m_nSectionNum = 0;
        private int m_nVoluteNum = 0;
@@ -17,20 +17,16 @@
        {
            InitializeComponent();
            // 创建时的代码
            pDisplayView = new HydrEngineCSharp.CDisplayView();
            //this.DefaultDockArea = RLT.Enum.Crown.DockArea.Document;
            //this._isDispCloseIcon = false ;//不能关闭
            pDisplayView.InitOCCDraw();
            this.MouseDown += OnMouseDown;
            this.MouseMove += OnMouseMove;
            this.MouseUp += OnMouseUp;
            this.MouseWheel += OnMouseWheel;
            IntPtr hwnd = this.Handle;
            //IntPtr hwnd = splitContainer1.Handle;
            // 初始化更新代码
            pDisplayView.InitialUpdateOCC((uint)hwnd, true);
            //string strTurbopumpTopoShapeName = "蜗壳设计" + (m_nNum++).ToString();
            //bool bSucc = pDisplayView.addTurbopumpTopoShape(strTurbopumpTopoShapeName);
@@ -151,230 +147,145 @@
            if (vd == Model.eViewDirect.RIGHT)
                pDisplayView.SetViewDirect(HydrEngineCSharp.VIEWDIRECT.RIGHTVIEW);
        }
        private bool _is3D = true;
        string strTurbopumpTopoShapeName = "蜗壳设计1" ;
        public  void Initial( )
        {
            bool bSucc = pDisplayView.addTurbopumpTopoShape(strTurbopumpTopoShapeName);
            if (bSucc)
            {
                m_nCreateCurve = 1;
            }
        }
        /// <summary>
        /// 更新1-8端面参数
        /// </summary>
        public void UpdateSectParas18(List<DPumpHydr.OccModel.SectionParam> listSectionParam)
        public void ClearAll()
        {
            string wstrName = "断面";
            double dStartAngle = -HydrDisplayEngineBridge.PI_4;
            int nNum = listSectionParam.Count;
            double dDetAngle = 2 * HydrDisplayEngineBridge.PI / nNum;
            for (int i = 0; i < nNum; i++)
            {
                DPumpHydr.OccModel.SectionParam theSectionParam = listSectionParam[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.m_dR_Left;
                dR_Right = theSectionParam.R_Right;
                dBaseWidth = theSectionParam.BaseWidth;
                dBaseCircleRadius = theSectionParam.BaseCircleRadius;
                int nIndex = theSectionParam.Index;
                string wstrShapeNameI = wstrName + nIndex.ToString() + "(" + (m_nSectionNum++).ToString() + ")";
                HydrGeomSection pHydrGeomCurve = new HydrGeomSection();
                HydrProperties theHydrProperties = new HydrProperties();
                theHydrProperties.SetShapeName(wstrShapeNameI);
                pHydrGeomCurve.SetHydrProperties(theHydrProperties);
                pHydrGeomCurve.SetGeomSection(dGama_Left, dGama_Right, dH, dR_out, dR_Left, dR_Right, dBaseWidth, dBaseCircleRadius);
                double dAngle = i * dDetAngle + dStartAngle;
                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(i, pHydrGeomCurve);
            }
            Invalidate(true);
            pDisplayView.FitAll3DViews(true);
            m_nCreateCurve = 2;
            pDisplayView.DeleteObject(strTurbopumpTopoShapeName);
            pDisplayView.addTurbopumpTopoShape(strTurbopumpTopoShapeName);
        }
        public  void Initial(bool is3D)
        {
            this._is3D = is3D;
            // 创建时的代码
            pDisplayView = new HydrEngineCSharp.CDisplayView();
            pDisplayView.InitOCCDraw();
            IntPtr hwnd = this.Handle;
            //IntPtr hwnd = splitContainer1.Handle;
            // 初始化更新代码
            pDisplayView.InitialUpdateOCC((uint)hwnd, is3D);
            bool bSucc = pDisplayView.addTurbopumpTopoShape(strTurbopumpTopoShapeName);
            //OnSectiondesignbutton();
            //OnBuildsolidbutton();
        }
        bool isFirst = true;
        /// <summary>
        /// 
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void OnSectiondesignbutton(object sender, EventArgs e)
        public void RefreshAllSectShape18(ViewModel.SectionBundleInfo bundle)
        {
            if (m_nCreateCurve != 1)
            {
                MessageBox.Show("请先创建蜗壳设计", "提示");
                return;
            }
            List<DPumpHydr.OccModel.SectionParam> listSectionParam = new List<DPumpHydr.OccModel.SectionParam>();
            {
                DPumpHydr.OccModel.SectionParam theSectionParam = new DPumpHydr.OccModel.SectionParam();
                theSectionParam.Index = 8;
                theSectionParam.Gama_Left = 15.0;
                theSectionParam.Gama_Right = 15.0;
                theSectionParam.H = 79.9267;
                theSectionParam.R_out = 1000;
                theSectionParam.m_dR_Left = 29.0;
                theSectionParam.R_Right = 29.0;
                theSectionParam.BaseWidth = 60;
                theSectionParam.BaseCircleRadius = 263.5;
                listSectionParam.Add(theSectionParam);
            }
            {
                DPumpHydr.OccModel.SectionParam theSectionParam = new DPumpHydr.OccModel.SectionParam();
                theSectionParam.Index = 7;
                theSectionParam.Gama_Left = 14.0;
                theSectionParam.Gama_Right = 14.0;
                theSectionParam.H = 72.5712;
                theSectionParam.R_out = 1000;
                theSectionParam.m_dR_Left = 27.0;
                theSectionParam.R_Right = 27.0;
                theSectionParam.BaseWidth = 60;
                theSectionParam.BaseCircleRadius = 263.5;
                listSectionParam.Add(theSectionParam);
            }
            {
                DPumpHydr.OccModel.SectionParam theSectionParam = new DPumpHydr.OccModel.SectionParam();
                theSectionParam.Index = 6;
                theSectionParam.Gama_Left = 13.0;
                theSectionParam.Gama_Right = 13.0;
                theSectionParam.H = 64.6095;
                theSectionParam.R_out = 1000;
                theSectionParam.m_dR_Left = 25.0;
                theSectionParam.R_Right = 25.0;
                theSectionParam.BaseWidth = 60;
                theSectionParam.BaseCircleRadius = 263.5;
                listSectionParam.Add(theSectionParam);
            }
            {
                DPumpHydr.OccModel.SectionParam theSectionParam = new DPumpHydr.OccModel.SectionParam();
                theSectionParam.Index = 5;
                theSectionParam.Gama_Left = 12.0;
                theSectionParam.Gama_Right = 12.0;
                theSectionParam.H = 55.9824;
                theSectionParam.R_out = 1000;
                theSectionParam.m_dR_Left = 23.0;
                theSectionParam.R_Right = 23.0;
                theSectionParam.BaseWidth = 60;
                theSectionParam.BaseCircleRadius = 263.5;
                listSectionParam.Add(theSectionParam);
            }
            {
                DPumpHydr.OccModel.SectionParam theSectionParam = new DPumpHydr.OccModel.SectionParam();
                theSectionParam.Index = 4;
                theSectionParam.Gama_Left = 11.0;
                theSectionParam.Gama_Right = 11.0;
                theSectionParam.H = 46.6348;
                theSectionParam.R_out = 1000;
                theSectionParam.m_dR_Left = 21.0;
                theSectionParam.R_Right = 21.0;
                theSectionParam.BaseWidth = 60;
                theSectionParam.BaseCircleRadius = 263.5;
                listSectionParam.Add(theSectionParam);
            }
            {
                DPumpHydr.OccModel.SectionParam theSectionParam = new DPumpHydr.OccModel.SectionParam();
                theSectionParam.Index = 3;
                theSectionParam.Gama_Left = 10.0;
                theSectionParam.Gama_Right = 10.0;
                theSectionParam.H = 36.5229;
                theSectionParam.R_out = 1000;
                theSectionParam.m_dR_Left = 19.0;
                theSectionParam.R_Right = 19.0;
                theSectionParam.BaseWidth = 60;
                theSectionParam.BaseCircleRadius = 263.5;
                listSectionParam.Add(theSectionParam);
            }
            {
                DPumpHydr.OccModel.SectionParam theSectionParam = new DPumpHydr.OccModel.SectionParam();
                theSectionParam.Index = 2;
                theSectionParam.Gama_Left = 9.0;
                theSectionParam.Gama_Right = 9.0;
                theSectionParam.H = 25.6253;
                theSectionParam.R_out = 1000;
                theSectionParam.m_dR_Left = 17.0;
                theSectionParam.R_Right = 17.0;
                theSectionParam.BaseWidth = 60;
                theSectionParam.BaseCircleRadius = 263.5;
                listSectionParam.Add(theSectionParam);
            }
            {
                DPumpHydr.OccModel.SectionParam theSectionParam = new DPumpHydr.OccModel.SectionParam();
                theSectionParam.Index = 1;
                theSectionParam.Gama_Left = 8.0;
                theSectionParam.Gama_Right = 8.0;
                theSectionParam.H = 13.9584;
                theSectionParam.R_out = 1000;
                theSectionParam.m_dR_Left = 10.0;
                theSectionParam.R_Right = 10.0;
                theSectionParam.BaseWidth = 60;
                theSectionParam.BaseCircleRadius = 263.5;
                listSectionParam.Add(theSectionParam);
            }
            string wstrName = "断面";
            double dStartAngle = -HydrDisplayEngineBridge.PI_4;
            int nNum = listSectionParam.Count;
            double dDetAngle = 2 * HydrDisplayEngineBridge.PI / nNum;
            for (int i = 0; i < nNum; i++)
            if (!isFirst)
            {
                DPumpHydr.OccModel.SectionParam theSectionParam = listSectionParam[i];
                //string wstrVoluteName = "泵体" + (m_nVoluteNum++).ToString();
                // pDisplayView.DeleteObject(wstrVoluteName);//删除掉老的
                ClearAll();
                //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;
                //    int nIndex = i;
                //    string wstrShapeNameI = wstrName + nIndex.ToString() + "(" + (m_nSectionNum++).ToString() + ")";
                //    pDisplayView.DeleteObject(wstrShapeNameI);//删除掉老的
                //}
            }
            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.m_dR_Left;
                dR_Left = theSectionParam.R_Left;
                dR_Right = theSectionParam.R_Right;
                dBaseWidth = theSectionParam.BaseWidth;
                dBaseCircleRadius = theSectionParam.BaseCircleRadius;
                int nIndex = theSectionParam.Index;
                string wstrShapeNameI = wstrName + nIndex.ToString() + "(" + (m_nSectionNum++).ToString() + ")";
                //int nIndex = theSectionParam.Index;
                HydrGeomSection pHydrGeomCurve = new HydrGeomSection();
                string wstrShapeNameI = wstrName + i.ToString() + "(" + (m_nSectionNum++).ToString() + ")";
                HydrProperties theHydrProperties = new HydrProperties();
                theHydrProperties.SetShapeName(wstrShapeNameI);
                pHydrGeomCurve.SetHydrProperties(theHydrProperties);
                pHydrGeomCurve.SetGeomSection(dGama_Left, dGama_Right, dH, dR_out, dR_Left, dR_Right, dBaseWidth, dBaseCircleRadius);
                double dAngle = i * dDetAngle + dStartAngle;
                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(i, pHydrGeomCurve);
            }
            Invalidate(true);
            pDisplayView.FitAll3DViews(true);
            m_nCreateCurve = 2;
                HydrGeomCurve theHydrGeomCurve = HydrDisplayEngineBridge.CreateGeomCurve(HydrCurveType.EHydrGeomSection);
                HydrGeomSection pHydrGeomCurve = theHydrGeomCurve as HydrGeomSection;
                if (pHydrGeomCurve == null)
                {
                    continue;
                }
                    theHydrProperties.SetShapeName(wstrShapeNameI);
                    pHydrGeomCurve.SetHydrProperties(theHydrProperties);
                    pHydrGeomCurve.SetGeomSection(dGama_Left, dGama_Right, dH, dR_out, dR_Left, dR_Right, dBaseWidth, dBaseCircleRadius);
                    if (_is3D)
                    {
                        double dAngle = i * dDetAngle + dStartAngle;
                        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(i, pHydrGeomCurve);
            }
            if (_is3D)
            {
                CreateSolid();
            }
            else
            {
                Invalidate(true);
                pDisplayView.FitAll3DViews(true);
            }
            isFirst = false;
        }
   
        //
        private void OnBuildsolidbutton(object sender, EventArgs e)
        {
            if (m_nCreateCurve != 2)
            {
                MessageBox.Show("请先完成断面设计", "提示");
                return;
            }
            //
        private void CreateSolid( )
        {
            string wstrVoluteName = "泵体" + (m_nVoluteNum++).ToString();
            bool bSucc = pDisplayView.buildVoluteShape(wstrVoluteName);
            if (bSucc)
            {
                Invalidate(true);
                pDisplayView.FitAll3DViews(true);
                m_nCreateCurve = 3;
            }
            Invalidate(true);
            pDisplayView.FitAll3DViews(true);
        }