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); } }
/// <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); } } } }
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); } } }
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; }
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); }
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); }
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); } }
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); } }
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)); } }
/// <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); } } }
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); }
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; }