コード例 #1
0
        private List <RevitFunctionModel> AssignFunctions(List <RevitFunctionsPositionModel> functionsTypeList, List <RevitFunctionModel> revitFunctionsInFormula)
        {
            int iterator = 0;
            int actualParentFunctionNum = -1;
            List <RevitFunctionModel> revitFunctions = new List <RevitFunctionModel>();
            RevitFunctionModel        function = null, parentFunction = null;

            foreach (RevitFunctionsPositionModel functionPos in functionsTypeList)
            {
                // if(heigh=15, 145, if(and(a>15, b<16), 245,deep))
                // if(heigh=15, 145, if(and(a>15, b<16), and( ),deep))
                // if(if(and(a>15, b<16), and(4,5),deep), 145,and(heigh=15,h=2) )
                if (functionPos.Stage == RevitEnums.FunctionStage.Open)
                {
                    if (actualParentFunctionNum < iterator)
                    {
                        parentFunction = function;
                    }
                    else if (actualParentFunctionNum > iterator)
                    {
                        parentFunction = parentFunction.ParentFunction;
                    }
                    actualParentFunctionNum = iterator;
                    function = revitFunctionsInFormula.First(fun => fun.StartPos == functionPos.Position);

                    if (actualParentFunctionNum == 0)
                    {
                        revitFunctions.Add(function);
                    }
                    else
                    {
                        parentFunction.AddChildFunction(function);
                    }

                    iterator++;
                }
                else if (functionPos.Stage == RevitEnums.FunctionStage.Close)
                {
                    iterator--;
                }
            }

            return(revitFunctions);
        }