Пример #1
0
        private void FindAllExtendLast(List <List <RingMedium> > allList, List <RingMedium> current, float lengthMin, float lengthMax, bool hasInsertItem)
        {
            if (hasInsertItem && lengthMin <= 0 && lengthMax >= 0)
            {
                List <RingMedium> tempResults = new List <RingMedium>();
                foreach (RingMedium item in current)
                {
                    tempResults.Add(item);
                }
                allList.Add(current);
            }

            int        k        = current.Count - 1;
            RingMedium ringLast = current[k];

            foreach (RingMedium item in this.extendList)
            {
                if (ringLast.InterDown != item.InterUp || item.Length > lengthMax)
                {
                    continue;
                }
                current.Insert(k + 1, item);
                this.FindAllExtendLast(allList, current, lengthMin - item.Length, lengthMax - item.Length, true);
                current.RemoveAt(k + 1);
            }
        }
Пример #2
0
 /// <summary>
 /// 找多个转接环
 /// </summary>
 /// <param name="lens">镜头</param>
 /// <param name="focus">调焦环</param>
 /// <param name="upRing">上端(相机)接口</param>
 /// <param name="endRing">下端(镜头)接口</param>
 /// <param name="minLen">最小长度</param>
 /// <param name="maxLen">最大长度</param>
 /// <returns></returns>
 private void findAdpater(CameraLens lens, RingMedium focus, int upRing, int endRing, float minLen, float maxLen)
 {
     if (upRing == endRing)
     {//不需要转接环
         this.FindExtend(lens, focus, adapterVisitedList, endRing, minLen, maxLen);
     }
     foreach (RingMedium item in adapterList)
     {
         if (maxLen <= 0)
         {//上一层已经结束
             this.adapterVisitedList.RemoveAt(adapterVisitedList.Count - 1);
             break;
         }
         if (item.InterUp == upRing && item.Length < maxLen)
         {
             this.adapterVisitedList.Add(item);
             if (item.InterDown == endRing)
             {//找到合适
                 this.FindExtend(lens, focus, adapterVisitedList, endRing, minLen - item.Length, maxLen - item.Length);
             }
             else
             {//查找未结束
                 this.findAdpater(lens, focus, item.InterDown, endRing, minLen - item.Length, maxLen - item.Length);
             }
         }
     }
 }
Пример #3
0
        private void FindAllExtend(List <List <RingMedium> > allList, List <Dictionary <int, int> > diffCountList, List <RingMedium> current, int idx, float lengthMin, float lengthMax)
        {
            if (!this.NormalSearchFlag)
            {
                return;
            }
            if (lengthMin <= 0 && lengthMax >= 0)
            {
                if (!this.CheckExistsItemsWithinList(diffCountList, current))
                {
                    List <RingMedium> tempResults = new List <RingMedium>();
                    foreach (RingMedium item in current)
                    {
                        tempResults.Add(item);
                    }
                    tempResults.RemoveAt(tempResults.Count - 1);
                    allList.Add(tempResults);
                }
            }

            for (int i = idx; i < current.Count; i++)
            {
                RingMedium ring = current[i];
                foreach (RingMedium item in this.extendList)
                {
                    if (ring.InterUp != item.InterDown || item.Length > lengthMax)
                    {
                        continue;
                    }
                    current.Insert(i, item);
                    this.FindAllExtend(allList, diffCountList, current, i + 1, lengthMin - item.Length, lengthMax - item.Length);
                    current.RemoveAt(i);
                }
            }
        }
Пример #4
0
        public Algorithm(List <ValueType> interList, List <ValueType> camList, List <ValueType> connList)
        {
            foreach (ValueType item in interList)
            {
                RingMedium ring = (RingMedium)item;
                this.ringList.Add(ring);
                switch (ring.RingType)
                {
                case enumProductType.Focus: focusList.Add(ring); break;

                case enumProductType.Adapter: adapterList.Add(ring); break;

                case enumProductType.Extend: extendList.Add(ring); break;

                default: Console.WriteLine("Error Type"); break;
                }
            }
            foreach (ValueType item in camList)
            {
                this.camList.Add((CameraLens)item);
            }
            foreach (ValueType item in connList)
            {
                Connectors connItem = (Connectors)item;
                this.connectorIDLen.Add(connItem.Idx, connItem.Length);
            }
            this.NormalSearchFlag = true;
        }
Пример #5
0
        private void CombinationStruct(CameraLens lens, RingMedium focus, List <RingMedium> adapter, List <RingMedium> extend)
        {
            List <RingMedium> adapterTmp = new List <RingMedium>(adapter);
            List <RingMedium> extendTmp  = new List <RingMedium>(extend);
            RingResult        oneResult  = new RingResult()
            {
                Idx         = this.results.Count + 1,
                Lens        = lens,
                Focus       = focus,
                AdapterList = adapterTmp,
                ExtendList  = extendTmp
            };

            this.results.Add(oneResult);
        }
Пример #6
0
        private float getMustExtendLength(RingMedium focus, CameraLens lens)
        {
            float range = 0f;

            if (lens.Name.Contains("5.6/120") && (focus.Name.StartsWith("Smart Focus 23") || focus.Name.StartsWith("Smart Focus 7")))
            {
                range = 25f;
            }
            else if (focus.Name.StartsWith("Smart Focus 23"))
            {
                range = 10f;
            }

            return(range);
        }
Пример #7
0
        private void showResults(List <RingResults> result, float ratio)
        {
            if (this.InvokeRequired)
            {
                Action <List <RingResults>, float> delegateChangeCursor = new Action <List <RingResults>, float>(showResults);
                this.Invoke(delegateChangeCursor, new object[] { result, ratio });
                return;
            }

            this.searchCount         = 0;
            this.timerSearch.Enabled = false;
            this.btnSearch.Text      = "search";
            this.btnSearch.Enabled   = true;

            DataTable dt = new DataTable();

            dt.Columns.Add(new DataColumn("item"));
            dt.Columns.Add(new DataColumn("lens"));
            dt.Columns.Add(new DataColumn("focus"));
            dt.Columns.Add(new DataColumn("adapter"));
            dt.Columns.Add(new DataColumn("ext"));
            dt.Columns.Add(new DataColumn("wd"));
            dt.Columns.Add(new DataColumn("fov"));
            foreach (RingResults ring in result)
            {
                RingMedium        focus   = ring.ringList.Find(item => item.RingType == enumProductType.Focus);
                List <RingMedium> adapter = ring.ringList.FindAll(item => item.RingType == enumProductType.Adapter);
                List <RingMedium> extend  = ring.ringList.FindAll(item => item.RingType == enumProductType.Extend);
                DataRow           dr      = dt.NewRow();
                dr["item"]    = PRE_PROJECT_NAME + ring.Idx;
                dr["lens"]    = ring.Lens.Name;
                dr["focus"]   = focus.Name == string.Empty ? NAME_NONE : focus.Name;
                dr["adapter"] = adapter.Count == 1 ? adapter[0].Name : adapter.Count.ToString() + POST_RING_NUMBER;
                dr["ext"]     = extend.Count == 1 ? extend[0].Name : extend.Count.ToString() + POST_RING_NUMBER;;
                dr["wd"]      = ring.Lens.Focus * (2 + ratio + 1 / ratio) + ring.Lens.HH - ring.Lens.Length - ring.Lens.Focus * ratio - ring.Lens.Flange;
                dr["fov"]     = this.isMeshCamera ? this.tbFovH.Text + "×" + this.tbFovV.Text : this.tbFovH.Text;
                dt.Rows.Add(dr);
            }
            this.dgvProj.DataSource   = dt;
            this.alg.NormalSearchFlag = true;

            if (this.resultList.Count <= 2)
            {
                MessageBox.Show("If you want more solutions, please extend the working range.", "Notice", MessageBoxButtons.OK, MessageBoxIcon.Information);
            }
        }
Пример #8
0
        private void FindAllExtendLast(List <List <RingMedium> > allList, float lengthMin, float lengthMax)
        {
            int idxCount = allList.Count;

            for (int i = 0; i < idxCount; i++)
            {
                List <RingMedium> ringLastList = allList[i];
                int        k         = ringLastList.Count - 1;
                RingMedium ringLast  = ringLastList[k];
                float      extLength = 0f;
                foreach (RingMedium item in ringLastList)
                {
                    extLength += item.RingType == enumProductType.Extend ? item.Length : 0f;
                }
                this.FindAllExtendLast(allList, allList[i], lengthMin - extLength, lengthMax - extLength, false);
            }
        }
Пример #9
0
 private void btnSave_Click(object sender, EventArgs e)
 {
     if (this.CheckDataBeforeSave())
     {
         RingMedium item = new RingMedium()
         {
             Name      = this.tbName.Text.Trim(),
             Number    = this.tbNumber.Text.Trim(),
             InterDown = Convert.ToInt32(this.cbInterA.SelectedValue),
             InterUp   = Convert.ToInt32(this.cbInterB.SelectedValue),
             Length    = float.Parse(this.tbLength.Text),
             LengthMin = float.Parse(this.tbLenMin.Text),
             LengthMax = float.Parse(this.tbLenMax.Text),
         };
         this.handlerAfterSave(this, this.typeName, dbHandler.InsertItem(item));
     }
 }
Пример #10
0
 /// <summary>
 /// 找延长环
 /// </summary>
 /// <param name="lens">镜头</param>
 /// <param name="focus">调焦环</param>
 /// <param name="adapter">转接环</param>
 /// <param name="inter">接口类型</param>
 /// <param name="minLen">最小长度</param>
 /// <param name="maxLen">最大长度</param>
 private void FindExtend(CameraLens lens, RingMedium focus, List <RingMedium> adapter, int inter, float minLen, float maxLen)
 {
     if (maxLen <= 0)
     {//上一层已经结束
         this.extendVisitedList.RemoveAt(extendVisitedList.Count - 1);
     }
     if (minLen <= 0 && maxLen >= 0)
     {
         this.CombinationStruct(lens, focus, adapter, extendVisitedList);
     }
     foreach (RingMedium item in this.extendList)
     {
         if (item.InterUp == inter && item.Length <= maxLen)
         {
             this.extendVisitedList.Add(item);
             this.FindExtend(lens, focus, adapter, inter, minLen - item.Length, maxLen - item.Length);
         }
     }
 }
Пример #11
0
        private float getRangeLength(RingMedium focus)
        {
            float range = 0f;

            if (focus.Name.StartsWith("Smart Focus 23"))
            {
                range = 9f;
            }
            else if (focus.Name.StartsWith("Smart Focus 7"))
            {
                range = 2.5f;
            }
            else if (focus.Name.StartsWith("Smart Focus"))
            {
                range = 2f;
            }

            return(range);
        }
Пример #12
0
        private void showResults(List <RingResults> result, float ratio)
        {
            string strNone   = this.GetConstantsString(NAME_NONE);
            string strProj   = this.GetConstantsString(PRE_PROJECT_NAME);
            string strNumber = this.GetConstantsString(POST_RING_NUMBER);

            DataTable dt = new DataTable();

            dt.Columns.Add(new DataColumn("Idx"));
            dt.Columns.Add(new DataColumn("lens"));
            dt.Columns.Add(new DataColumn("focus"));
            dt.Columns.Add(new DataColumn("adapter"));
            dt.Columns.Add(new DataColumn("extend"));
            dt.Columns.Add(new DataColumn("ratio"));
            dt.Columns.Add(new DataColumn("workDistance"));
            dt.Columns.Add(new DataColumn("fovLength"));
            dt.Columns.Add(new DataColumn("fovWidth"));
            foreach (RingResults ring in result)
            {
                RingMedium        focus   = ring.ringList.Find(item => item.RingType == enumProductType.Focus);
                List <RingMedium> adapter = ring.ringList.FindAll(item => item.RingType == enumProductType.Adapter);
                List <RingMedium> extend  = ring.ringList.FindAll(item => item.RingType == enumProductType.Extend);
                DataRow           dr      = dt.NewRow();
                dr["Idx"]          = strProj + ring.Idx;
                dr["lens"]         = ring.Lens.Name;
                dr["focus"]        = focus.Name == string.Empty ? strNone : focus.Name;
                dr["adapter"]      = adapter.Count == 1 ? adapter[0].Name : adapter.Count.ToString() + strNumber;
                dr["extend"]       = extend.Count == 1 ? extend[0].Name : extend.Count.ToString() + strNumber;;
                dr["ratio"]        = ratio;
                dr["workDistance"] = ring.Lens.Focus * (2 + ratio + 1 / ratio) + ring.Lens.HH - ring.Lens.Length;
                dr["fovLength"]    = this.fovLengthValue;
                dr["fovWidth"]     = this.fovWidthValue;
                dt.Rows.Add(dr);
            }
            this.dgvProjList.DataSource = dt;
        }