Example #1
0
        protected override WFData GenerateWFDataUnit(FrameRule clamp)
        {
            var num      = clamp.num1;
            var unitSize = clamp.size1 / num;

            return(CalcuteUtility.TrigonumSpaceGrid_Unit(unitSize, clamp.height));
        }
        protected override WFData GenerateWFData(FrameRule clamp)
        {
            var data       = new WFData();
            var num        = clamp.num1;
            var size       = clamp.size1;
            var unitSize   = clamp.size1 / num;
            var unitHeight = Mathf.Sin(Mathf.Deg2Rad * 60) * unitSize;
            var startPos   = new Vector3(-size * 0.5f, clamp.height * 0.5f, -Mathf.Sin(Mathf.Deg2Rad * 60) * size);

            var boundNodes = new List <WFNode>();
            var topNodes   = new List <WFNode>();

            for (int i = -num; i < num; i++)
            {
                for (int j = 0; j < 2 * num - Mathf.Abs(i + 1); j++)
                {
                    var pos = startPos +
                              (j * unitSize - 0.5f * unitSize * (num - Mathf.Abs(i + 1))) * Vector3.right +
                              unitHeight * (i + num) * Vector3.forward;
                    var tdata = CalcuteUtility.TrigonumSpaceGrid_Unit(unitSize, clamp.height);
                    tdata.AppendPosition(pos);
                    data.InsertData(tdata);
                    //记录顶点用于连线
                    topNodes.Add(tdata.wfNodes.Find(x => x.type == NodePosType.taperedTop));
                    //记录边界节点用于连线
                    RecordBoundNode(i, j, num, tdata, pos, unitSize, unitHeight, boundNodes);
                }
            }

            var topData = CalcuteUtility.ConnectNeerBy(topNodes, unitSize, BarPosType.downBar, BoundConnectType.NoRule);

            data.InsertData(topData);

            var bundData = CalcuteUtility.ConnectNeerBy(boundNodes, unitSize, BarPosType.upBar, BoundConnectType.NoRule);

            data.InsertData(bundData);

            return(data);
        }