Esempio n. 1
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);
             }
         }
     }
 }
Esempio n. 2
0
        public bool InsertOneItem(ValueType item)
        {
            CameraLens info = (CameraLens)item;

            string strSql = @"insert into camLens (name,imgName,number,resoLength,resoWidth,connector,focus,flange,length,hh,ratioMin,ratioMax,target,weight,contrast,distort) 
                                   values (@name,@imgName,@number,@resoLength,@resoWidth,@connector,@focus,@flange,@length,@hh,@ratioMin,@ratioMax,@target,@weight,@contrast,@distort)";
            List <SQLiteParameter> paraList = new List <SQLiteParameter>();

            paraList.Add(SQLiteHelper.CreateParameter("@name", DbType.String, info.Name));
            paraList.Add(SQLiteHelper.CreateParameter("@imgName", DbType.String, info.ImgName));
            paraList.Add(SQLiteHelper.CreateParameter("@number", DbType.String, info.Number));
            paraList.Add(SQLiteHelper.CreateParameter("@resoLength", DbType.Int32, info.ResolutionLength));
            paraList.Add(SQLiteHelper.CreateParameter("@resoWidth", DbType.Int32, info.ResolutionWidth));
            paraList.Add(SQLiteHelper.CreateParameter("@connector", DbType.Int32, info.Connector));
            paraList.Add(SQLiteHelper.CreateParameter("@focus", DbType.Single, info.Focus));
            paraList.Add(SQLiteHelper.CreateParameter("@flange", DbType.Single, info.Flange));
            paraList.Add(SQLiteHelper.CreateParameter("@length", DbType.Single, info.Length));
            paraList.Add(SQLiteHelper.CreateParameter("@hh", DbType.Single, info.HH));
            paraList.Add(SQLiteHelper.CreateParameter("@ratioMin", DbType.Single, info.RatioMin));
            paraList.Add(SQLiteHelper.CreateParameter("@ratioMax", DbType.Single, info.RatioMax));
            paraList.Add(SQLiteHelper.CreateParameter("@target", DbType.Single, info.Target));
            paraList.Add(SQLiteHelper.CreateParameter("@weight", DbType.Int32, info.Weight));
            paraList.Add(SQLiteHelper.CreateParameter("@contrast", DbType.Int32, info.Contrast));
            paraList.Add(SQLiteHelper.CreateParameter("@distort", DbType.Int32, info.Distort));

            SQLiteCommand command = SQLiteHelper.CreateCommand(this.STR_CONNECTION, strSql, paraList.ToArray());

            return(SQLiteHelper.ExecuteNonQuery(command) > 0);
        }
Esempio n. 3
0
        private bool CombinationStructDataList(CameraLens lens, List <List <RingMedium> > allList, bool showAll = false)
        {
            bool finish = showAll || allList.Count <= 1;

            if (!finish)
            {
                return(finish);
            }

            foreach (List <RingMedium> itemList in allList)
            {
                List <RingMedium> ringsTmp = new List <RingMedium>(itemList);
                //ringsTmp.RemoveAt(ringsTmp.Count - 1);
                RingResults oneResult = new RingResults()
                {
                    Idx      = this.resultsFound.Count + 1,
                    Lens     = lens,
                    ringList = ringsTmp
                };
                if (DateTime.Now.Month <= 6 && this.resultsFound.Count < 100000)
                {
                    this.resultsFound.Add(oneResult);
                }
            }

            return(finish);
        }
Esempio n. 4
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);
        }
Esempio n. 5
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);
        }
Esempio n. 6
0
 private void FindAllRing(CameraLens lens, List <RingMedium> current, int interUp, int interDown, float lengthMin, float lengthMax, float target)
 {
     foreach (RingMedium item in this.ringList)
     {
         if (//调焦环:最多有一个
             item.RingType == enumProductType.Focus && current != null && current.Find(itmp => itmp.RingType == enumProductType.Focus).Idx > 0 ||
             //调焦环:相机靶面 >= 56,仅用smart focus 23
             item.RingType == enumProductType.Focus && target >= 56 && item.Name != "Smart Focus 23" && !lens.Name.StartsWith("Xenon") ||
             //调焦环:名字以Xenon-Zirconia开头的镜头,用V48 to V70
             item.RingType == enumProductType.Focus && lens.Name.StartsWith("Xenon-Zirconia") && !item.Name.Equals("V48 to V70") ||
             //调焦环:Xenon-sapphire,xenon-Diamond系列不需要聚焦环
             item.RingType == enumProductType.Focus && (lens.Name.StartsWith("Xenon-Diamond") || lens.Name.StartsWith("Xenon Sapphire")) ||
             //转接环:同一规格仅出现一次
             item.RingType == enumProductType.Adapter && current != null && current.Find(itmp => itmp.RingType == enumProductType.Adapter && itmp.InterUp == item.InterUp && itmp.InterDown == item.InterDown).Idx > 0 ||
             //转接环:接口口径方向一致
             item.RingType == enumProductType.Adapter && current != null && current.Find(itmp => itmp.RingType == enumProductType.Adapter && ((this.connectorIDLen[itmp.InterUp] - this.connectorIDLen[itmp.InterDown]) * (this.connectorIDLen[item.InterUp] - this.connectorIDLen[item.InterDown])) < 0).Idx > 0 ||
             //延长环:独立查找,用于找最优
             item.RingType == enumProductType.Extend
             )
         {
             continue;
         }
         if (item.InterUp == interUp && item.LengthMin < lengthMax)
         {
             current.Add(item);
             if (item.InterDown == interDown &&
                 //调焦环:Xenon-sapphire,xenon-Diamond系列不需要聚焦环,其它至少有一个
                 (current.Find(itmp => itmp.RingType == enumProductType.Focus).Idx > 0 ||
                  lens.Name.StartsWith("Xenon-Diamond") ||
                  lens.Name.StartsWith("Xenon Zirconia"))
                 )
             {
                 int idxTmp = current.Count;
                 current.Insert(idxTmp, new RingMedium()
                 {
                     InterUp = interDown, Length = 0, LengthMin = 0, LengthMax = 0
                 });
                 this.FindAllRingExtend(lens, current, lengthMin - item.LengthMax, lengthMax - item.LengthMin);
                 current.RemoveAt(idxTmp);
             }
             else
             {
                 this.FindAllRing(lens, current, item.InterDown, interDown, lengthMin - item.LengthMax, lengthMax - item.LengthMin, target);
             }
             current.Remove(item);
         }
     }
 }
Esempio n. 7
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);
         }
     }
 }
Esempio n. 8
0
        private float getRangeLength(CameraLens lens)
        {
            float range = 0f;

            if (lens.Name.StartsWith("Xenon-Diamond"))
            {
                range = 16f;
            }
            else if (lens.Name.StartsWith("Xenon Zirconia"))
            {
                range = 9f;
            }
            else if (lens.Name.StartsWith("Xenon Sapphire"))
            {
                range = 10f;
            }

            return(range);
        }
Esempio n. 9
0
        /// <summary>
        /// 找延长环
        /// </summary>
        /// <param name="lens"></param>
        /// <param name="current"></param>
        /// <param name="lengthMin"></param>
        /// <param name="lengthMax"></param>
        private void FindAllRingExtend(CameraLens lens, List <RingMedium> current, float lengthMin, float lengthMax)
        {
            float lengthMid = (lengthMin + lengthMax) / 2.0f;

            List <List <RingMedium> >     allList       = new List <List <RingMedium> >();
            List <Dictionary <int, int> > diffCountList = new List <Dictionary <int, int> >();

            this.FindAllExtend(allList, diffCountList, current, 0, lengthMin, lengthMax);
            //this.FindAllExtendLast(allList, lengthMin, lengthMax);

            List <List <RingMedium> > validList = this.FilterBySpecialCondition(allList, lens);
            // if (this.CombinationStructDataList(lens, validList)) return;
            //最接近中间值
            //List<List<RingMedium>> shortestList = this.SearchShortestExtend(validList, lengthMid);
            //根据中间值范围过滤
            List <List <RingMedium> > shortestList = this.FilterByAdpaterRange(validList, lengthMid, lens);

            if (this.CombinationStructDataList(lens, shortestList))
            {
                return;
            }
            //最长
            List <List <RingMedium> > mostLengthList = this.SearchMostLengthExtend(shortestList);

            if (this.CombinationStructDataList(lens, mostLengthList))
            {
                return;
            }
            //最大口径
            List <List <RingMedium> > mostWidthList = this.SearchMostWidthExtendSimple(mostLengthList);

            if (this.CombinationStructDataList(lens, mostWidthList))
            {
                return;
            }

            List <List <RingMedium> > resultList = this.FilterRepeatExtend(mostWidthList);

            this.CombinationStructDataList(lens, resultList, true);
        }
Esempio n. 10
0
        public ValueType DecodeOneItemByDb(DataRow dr)
        {
            CameraLens info = new CameraLens();

            info.Idx              = Convert.ToInt32(dr["id"]);
            info.Name             = dr["name"].ToString();
            info.ImgName          = dr["imgName"].ToString();
            info.Number           = dr["number"].ToString();
            info.HH               = Convert.ToSingle(dr["hh"]);
            info.Length           = Convert.ToSingle(dr["length"]);
            info.Focus            = Convert.ToSingle(dr["focus"]);
            info.Flange           = Convert.ToSingle(dr["flange"]);
            info.Connector        = Convert.ToInt32(dr["connector"]);
            info.ResolutionLength = Convert.ToInt32(dr["resoLength"]);
            info.ResolutionWidth  = Convert.ToInt32(dr["resoWidth"]);
            info.RatioMin         = Convert.ToSingle(dr["ratioMin"]);
            info.RatioMax         = Convert.ToSingle(dr["ratioMax"]);
            info.Weight           = Convert.ToInt32(dr["weight"]);
            info.Contrast         = Convert.ToInt32(dr["contrast"]);
            info.Target           = Convert.ToSingle(dr["target"]);
            info.Distort          = Convert.ToInt32(dr["distort"]);

            return(info);
        }
Esempio n. 11
0
        private List <List <RingMedium> > FilterByAdpaterRange(List <List <RingMedium> > allList, float length, CameraLens lens)
        {
            List <List <RingMedium> > shortestList = new List <List <RingMedium> >();

            if (length <= 0)
            {
                return(shortestList);
            }
            float rangeLength = this.getRangeLength(lens);

            foreach (List <RingMedium> itemList in allList)
            {
                float extLength = -length, mustLength = 0;
                foreach (RingMedium item in itemList)
                {
                    extLength += item.RingType == enumProductType.Extend ? item.Length : 0;
                    if (item.RingType == enumProductType.Focus)
                    {
                        rangeLength = rangeLength == 0 ? this.getRangeLength(item) : rangeLength;
                        mustLength  = this.getMustExtendLength(item, lens);
                    }
                }

                extLength = Math.Abs(extLength);
                if (length - mustLength >= 0 && extLength <= rangeLength)
                {
                    shortestList.Add(itemList);
                }
            }
            return(shortestList);
        }
Esempio n. 12
0
        private List <List <RingMedium> > FilterBySpecialCondition(List <List <RingMedium> > allList, CameraLens lens)
        {
            bool focus23Flag = false, focus7Flag = false, extend25Flag = false, extend10Flag = false, lens120Flag = false;

            if (lens.Name.Contains("5.6/120"))
            {
                lens120Flag = true;
            }
            List <List <RingMedium> > validList = new List <List <RingMedium> >();

            foreach (List <RingMedium> itemList in allList)
            {
                focus23Flag  = false;
                focus7Flag   = false;
                extend25Flag = false;
                extend10Flag = false;
                foreach (RingMedium item in itemList)
                {
                    if (item.RingType == enumProductType.Focus && item.Name == "Smart Focus 23")
                    {
                        focus23Flag = true;
                    }
                    else if (item.RingType == enumProductType.Focus && item.Name == "Smart Focus 7")
                    {
                        focus7Flag = true;
                    }
                    else if (item.RingType == enumProductType.Extend && item.Number == "20179A")
                    {
                        extend25Flag = true;
                    }
                    else if (item.RingType == enumProductType.Extend && item.Number == "20178A")
                    {
                        extend10Flag = true;
                    }
                }
                if (focus23Flag && lens120Flag && extend25Flag ||
                    focus23Flag && !lens120Flag && extend10Flag ||
                    focus7Flag && lens120Flag && extend25Flag ||
                    focus7Flag && !lens120Flag ||
                    !focus23Flag && !focus7Flag)
                {
                    validList.Add(itemList);
                }
            }
            return(validList);
        }