private void GenerateGroupOff(ref ColModel model)
        {
            model.tris = new List <ColData.ColTri>();
            uint off = 0;

            for (int i = 0; i < model.groups.Count; ++i)
            {
                ColData.GroupInfo grp = model.groups[i];
                grp.Offset = off;
                grp.Size   = (uint)model.triIndices[i].Count;
                off       += grp.Size;
                model.tris.AddRange(model.triIndices[i]);
                model.groups[i] = grp;
            }
        }
        private void comboBox1_TextChanged(object sender, EventArgs e)
        {
            if (listBox1.SelectedIndex == -1)
            {
                return;
            }
            int s;

            if (int.TryParse(comboBox1.Text.Split(' ')[0], out s))
            {
                ColModel model = models[listBox1.SelectedIndex];
                model.surface = s;
                models[listBox1.SelectedIndex] = model;
            }
        }
        private void CheckMergeGroups(ref ColModel model)
        {
            HashSet <int> groups_to_delete = new HashSet <int>();

            for (int i = 0; i < model.groups.Count; ++i)
            {
                if (groups_to_delete.Contains(i))
                {
                    continue;
                }
                HashSet <int> verts = new HashSet <int>();
                for (int j = 0; j < model.triIndices[i].Count; ++j)
                {
                    verts.Add(model.triIndices[i][j].Vert1);
                    verts.Add(model.triIndices[i][j].Vert2);
                    verts.Add(model.triIndices[i][j].Vert3);
                }
                for (int j = i + 1; j < model.groups.Count; ++j)
                {
                    if ((model.triIndices[i].Count + model.triIndices[j].Count) > numericUpDown1.Value)
                    {
                        continue;
                    }
                    for (int k = 0; k < model.triIndices[j].Count; ++k)
                    {
                        if (verts.Contains(model.triIndices[j][k].Vert1) || verts.Contains(model.triIndices[j][k].Vert3) || verts.Contains(model.triIndices[j][k].Vert3))
                        {
                            model.triIndices[i].AddRange(model.triIndices[j]);
                            groups_to_delete.Add(j);
                            break;
                        }
                    }
                }
            }
            List <int> delete_list = new List <int>(groups_to_delete);

            delete_list.Sort();
            for (int i = delete_list.Count - 1; i >= 0; --i)
            {
                model.groups.RemoveAt(delete_list[i]);
                model.triIndices.RemoveAt(delete_list[i]);
            }
        }
        public ActionResult CreateWorkflowCode(string databaseLinkId, string dbTable, string formData, string queryData, string colData, string baseInfo, string moduleEntityJson)
        {
            // 数据
            List <DbTableModel> dbTableObj   = dbTable.ToObject <List <DbTableModel> >();
            FormModel           formDataObj  = formData.ToObject <FormModel>();
            QueryModel          queryDataObj = queryData.ToObject <QueryModel>();
            ColModel            colDataObj   = colData.ToObject <ColModel>();
            BaseModel           baseInfoObj  = baseInfo.ToObject <BaseModel>();


            var moduleEntity = moduleEntityJson.ToObject <ModuleEntity>();

            moduleEntity.F_Target     = "iframe";
            moduleEntity.F_UrlAddress = "/" + baseInfoObj.outputArea + "/" + baseInfoObj.name + "/Index";

            List <ModuleButtonEntity> moduleButtonList = new List <ModuleButtonEntity>();
            ModuleButtonEntity        addButtonEntity  = new ModuleButtonEntity();

            addButtonEntity.Create();
            addButtonEntity.F_EnCode   = "lr_add";
            addButtonEntity.F_FullName = "新增";
            moduleButtonList.Add(addButtonEntity);
            ModuleButtonEntity editButtonEntity = new ModuleButtonEntity();

            editButtonEntity.Create();
            editButtonEntity.F_EnCode   = "lr_edit";
            editButtonEntity.F_FullName = "编辑";
            moduleButtonList.Add(editButtonEntity);
            ModuleButtonEntity deleteButtonEntity = new ModuleButtonEntity();

            deleteButtonEntity.Create();
            deleteButtonEntity.F_EnCode   = "lr_delete";
            deleteButtonEntity.F_FullName = "删除";
            moduleButtonList.Add(deleteButtonEntity);

            List <ModuleColumnEntity> moduleColumnList = new List <ModuleColumnEntity>();
            int num = 0;

            foreach (var col in colDataObj.fields)
            {
                ModuleColumnEntity moduleColumnEntity = new ModuleColumnEntity();
                moduleColumnEntity.Create();
                moduleColumnEntity.F_EnCode   = col.fieldId;
                moduleColumnEntity.F_FullName = col.fieldName;
                moduleColumnEntity.F_SortCode = num;
                moduleColumnEntity.F_ParentId = "0";
                num++;
                moduleColumnList.Add(moduleColumnEntity);
            }
            var moduleEntityTemp = moduleIBLL.GetModuleByUrl(moduleEntity.F_UrlAddress);

            if (moduleEntityTemp == null)
            {
                moduleIBLL.SaveEntity("", moduleEntity, moduleButtonList, moduleColumnList);
            }

            string codeContent = "";
            // 将表单数据进行一次转化
            Dictionary <string, CompontModel> compontMap = new Dictionary <string, CompontModel>();
            bool haveEditGird = false;

            foreach (var tab in formDataObj.tablist)
            {
                foreach (var compont in tab.componts)
                {
                    if (compont.type == "gridtable")
                    {
                        haveEditGird = true;
                    }
                    compontMap.Add(compont.id, compont);
                }
            }


            // 实体类 映射类

            string mainTable = "";

            foreach (var tableOne in dbTableObj)
            {
                bool isMain = false;
                if (string.IsNullOrEmpty(tableOne.relationName))
                {
                    mainTable = tableOne.name;
                    isMain    = true;
                }
                // 实体类
                codeContent = codeGenerator.WfEntityCreate(databaseLinkId, tableOne.name, tableOne.pk, baseInfoObj, colDataObj, isMain, formDataObj.workField);
                codeGenerator.CreateEntityCodeFile(baseInfoObj, tableOne.name, codeContent);
                // 映射类
                codeContent = codeGenerator.MappingCreate(tableOne.name, tableOne.pk, baseInfoObj);
                codeGenerator.CreateMapCodeFile(baseInfoObj, tableOne.name, codeContent);
            }

            // 服务类
            codeContent = codeGenerator.WfServiceCreate(databaseLinkId, dbTableObj, compontMap, queryDataObj, colDataObj, baseInfoObj, formDataObj.workField);
            codeGenerator.CreateSerivceCodeFile(baseInfoObj, codeContent);
            // 业务类
            codeContent = codeGenerator.WfBllCreate(baseInfoObj, dbTableObj, compontMap, colDataObj);
            codeGenerator.CreateBLLCodeFile(baseInfoObj, codeContent);
            // 业务接口类
            codeContent = codeGenerator.WfIBllCreate(baseInfoObj, dbTableObj, compontMap, colDataObj);
            codeGenerator.CreateIBLLCodeFile(baseInfoObj, codeContent);
            // 控制器类
            codeContent = codeGenerator.WfControllerCreate(baseInfoObj, dbTableObj, compontMap, colDataObj);
            codeGenerator.CreateControllerCodeFile(baseInfoObj, codeContent);
            // 页面类
            codeContent = codeGenerator.IndexCreate(baseInfoObj, compontMap, queryDataObj);
            codeGenerator.CreateIndexCodeFile(baseInfoObj, codeContent);
            // 页面js类
            codeContent = codeGenerator.WfIndexJSCreate(baseInfoObj, dbTableObj, formDataObj, compontMap, colDataObj, queryDataObj);
            codeGenerator.CreateIndexJSCodeFile(baseInfoObj, codeContent);
            // 表单类
            codeContent = codeGenerator.FormCreate(baseInfoObj, formDataObj, compontMap, haveEditGird);
            codeGenerator.CreateFormCodeFile(baseInfoObj, codeContent);
            // 表单js类
            codeContent = codeGenerator.WfFormJsCreate(baseInfoObj, dbTableObj, formDataObj);
            codeGenerator.CreateFormJSCodeFile(baseInfoObj, codeContent);

            return(Success("创建成功"));
        }
        public ActionResult LookWorkflowCode(string databaseLinkId, string dbTable, string formData, string queryData, string colData, string baseInfo)
        {
            // 数据
            List <DbTableModel> dbTableObj   = dbTable.ToObject <List <DbTableModel> >();
            FormModel           formDataObj  = formData.ToObject <FormModel>();
            QueryModel          queryDataObj = queryData.ToObject <QueryModel>();
            ColModel            colDataObj   = colData.ToObject <ColModel>();
            BaseModel           baseInfoObj  = baseInfo.ToObject <BaseModel>();

            // 将表单数据进行一次转化
            Dictionary <string, CompontModel> compontMap = new Dictionary <string, CompontModel>();
            bool haveEditGird = false;

            foreach (var tab in formDataObj.tablist)
            {
                foreach (var compont in tab.componts)
                {
                    if (compont.type == "gridtable")
                    {
                        haveEditGird = true;
                    }
                    compontMap.Add(compont.id, compont);
                }
            }

            // 实体类 映射类
            string entityCode = "";
            string mapCode    = "";

            string mainTable = "";

            foreach (var tableOne in dbTableObj)
            {
                bool isMain = false;
                if (string.IsNullOrEmpty(tableOne.relationName))
                {
                    mainTable = tableOne.name;
                    isMain    = true;
                }

                // 实体类
                entityCode += codeGenerator.WfEntityCreate(databaseLinkId, tableOne.name, tableOne.pk, baseInfoObj, colDataObj, isMain, formDataObj.workField);
                // 映射类
                mapCode += codeGenerator.MappingCreate(tableOne.name, tableOne.pk, baseInfoObj);
            }

            // 服务类
            string serviceCode = codeGenerator.WfServiceCreate(databaseLinkId, dbTableObj, compontMap, queryDataObj, colDataObj, baseInfoObj, formDataObj.workField);
            // 业务类
            string bllCode = codeGenerator.WfBllCreate(baseInfoObj, dbTableObj, compontMap, colDataObj);
            // 业务接口类
            string ibllCode = codeGenerator.WfIBllCreate(baseInfoObj, dbTableObj, compontMap, colDataObj);
            // 控制器类
            string controllerCode = codeGenerator.WfControllerCreate(baseInfoObj, dbTableObj, compontMap, colDataObj);
            // 页面类
            string indexCode = codeGenerator.IndexCreate(baseInfoObj, compontMap, queryDataObj);
            // 页面js类
            string indexJsCode = codeGenerator.WfIndexJSCreate(baseInfoObj, dbTableObj, formDataObj, compontMap, colDataObj, queryDataObj);
            // 表单类
            string formCode = codeGenerator.FormCreate(baseInfoObj, formDataObj, compontMap, haveEditGird);
            // 表单js类
            string formJsCode = codeGenerator.WfFormJsCreate(baseInfoObj, dbTableObj, formDataObj);


            var jsonData = new
            {
                entityCode     = entityCode,
                mapCode        = mapCode,
                serviceCode    = serviceCode,
                bllCode        = bllCode,
                ibllCode       = ibllCode,
                controllerCode = controllerCode,
                indexCode      = indexCode,
                indexJsCode    = indexJsCode,
                formCode       = formCode,
                formJsCode     = formJsCode
            };

            return(Success(jsonData));
        }
        public ActionResult LookCustmerProcCode(string databaseLinkId, string dbTable, string dbTablePk, string formData, string queryData, string colData, string baseInfo)
        {
            // 数据
            FormModel  formDataObj  = formData.ToObject <FormModel>();
            QueryModel queryDataObj = queryData.ToObject <QueryModel>();
            ColModel   colDataObj   = colData.ToObject <ColModel>();
            BaseModel  baseInfoObj  = baseInfo.ToObject <BaseModel>();

            // 将表单数据进行一次转化
            Dictionary <string, CompontModel> compontMap = new Dictionary <string, CompontModel>();
            bool haveEditGird = false;

            foreach (var tab in formDataObj.tablist)
            {
                foreach (var compont in tab.componts)
                {
                    if (compont.type == "gridtable")
                    {
                        haveEditGird = true;
                    }
                    compontMap.Add(compont.id, compont);
                }
            }

            // 实体类
            string entityCode = codeGenerator.EntityCreate(databaseLinkId, dbTable, dbTablePk, baseInfoObj, colDataObj, true);
            // 映射类
            string mapCode = codeGenerator.MappingCreate(dbTable, dbTablePk, baseInfoObj);



            //// 服务类
            string serviceCode = codeGenerator.ServiceProcCreate(databaseLinkId, dbTable, dbTablePk, compontMap, queryDataObj, colDataObj, baseInfoObj);
            //// 业务类
            string bllCode = codeGenerator.BllProcCreate(baseInfoObj, dbTable, compontMap, colDataObj);
            //// 业务接口类
            string ibllCode = codeGenerator.IBllProcCreate(baseInfoObj, dbTable, compontMap, colDataObj);
            //// 控制器类
            string controllerCode = codeGenerator.ControllerProcCreate(baseInfoObj, dbTable, compontMap, colDataObj);
            //// 页面类
            string indexCode = codeGenerator.IndexCreate(baseInfoObj, compontMap, queryDataObj);
            //// 页面js类
            string indexJsCode = codeGenerator.IndexJSProcCreate(baseInfoObj, dbTablePk, formDataObj, compontMap, colDataObj, queryDataObj);
            //// 表单类
            string formCode = codeGenerator.FormCreate(baseInfoObj, formDataObj, compontMap, haveEditGird);
            //// 表单js类
            string formJsCode = codeGenerator.FormJsProcCreate(baseInfoObj, formDataObj);


            var jsonData = new
            {
                entityCode     = entityCode,
                mapCode        = mapCode,
                serviceCode    = serviceCode,
                bllCode        = bllCode,
                ibllCode       = ibllCode,
                controllerCode = controllerCode,
                indexCode      = indexCode,
                indexJsCode    = indexJsCode,
                formCode       = formCode,
                formJsCode     = formJsCode
            };

            return(Success(jsonData));
        }
 public Grid AddColumn(Column column)
 {
     ColModel.Add(column);
     return(this);
 }
        private void button1_Click(object sender, EventArgs e)
        {
            OpenFileDialog ofd = new OpenFileDialog {
                Filter = "Wavefront OBJ (*.obj)|*.obj", Multiselect = true
            };

            if (ofd.ShowDialog() == DialogResult.OK)
            {
                for (int i = 0; i < ofd.FileNames.Length; ++i)
                {
                    vertGroups = new Dictionary <int, int>();
                    int      grp   = 0;
                    ColModel model = new ColModel {
                        vtx = new List <Pos>(), groups = new List <ColData.GroupInfo>(), triIndices = new List <List <ColData.ColTri> >()
                    };
                    StreamReader reader = new StreamReader(ofd.FileNames[i]);
                    while (!reader.EndOfStream)
                    {
                        string[] str = reader.ReadLine().Split(' ');
                        switch (str[0])
                        {
                        case "v":
                            model.vtx.Add(new Pos(-float.Parse(str[1].Replace(".", ".")), float.Parse(str[2].Replace(".", ".")), float.Parse(str[3].Replace(".", ".")), 1));
                            break;

                        case "f":
                            int v1 = int.Parse(str[1].Split('/')[0]) - 1;
                            int v2 = int.Parse(str[2].Split('/')[0]) - 1;
                            int v3 = int.Parse(str[3].Split('/')[0]) - 1;
                            if (vertGroups.TryGetValue(v1, out grp) || vertGroups.TryGetValue(v2, out grp) || vertGroups.TryGetValue(v3, out grp))
                            {
                                if (model.groups[grp].Size >= numericUpDown1.Value)
                                {
                                    DiscardGroup(grp);
                                    grp = model.groups.Count;
                                    model.groups.Add(new ColData.GroupInfo());
                                    model.triIndices.Add(new List <ColData.ColTri>());
                                }
                                if (!vertGroups.ContainsKey(v1))
                                {
                                    vertGroups.Add(v1, grp);
                                }
                                if (!vertGroups.ContainsKey(v2))
                                {
                                    vertGroups.Add(v2, grp);
                                }
                                if (!vertGroups.ContainsKey(v3))
                                {
                                    vertGroups.Add(v3, grp);
                                }
                            }
                            else
                            {
                                grp = model.groups.Count;
                                model.groups.Add(new ColData.GroupInfo());
                                model.triIndices.Add(new List <ColData.ColTri>());
                                vertGroups.Add(v1, grp);
                                vertGroups.Add(v2, grp);
                                vertGroups.Add(v3, grp);
                            }
                            model.triIndices[grp].Add(new ColData.ColTri {
                                Vert1 = v1, Vert2 = v2, Vert3 = v3
                            });
                            break;
                        }
                    }
                    reader.Close();
                    //GenerateGroups();
                    CheckMergeGroups(ref model);
                    GenerateGroupOff(ref model);
                    if (model.groups.Count == 0)
                    {
                        continue;
                    }
                    listBox1.Items.Add(ofd.FileNames[i]);
                    models.Add(model);
                    vertexCount += model.vtx.Count;
                    triCount    += model.tris.Count;
                    groupCount  += model.groups.Count;
                }
                button3.Enabled = label4.Enabled = true;
                UpdateMainLabel();
            }
        }