예제 #1
0
        /// <summary>
        ///  Путь на волосы и аксессуары приходит в виде ссылке на картинку, Там же с тем же названием должен лежать обж.
        /// Мне проще обработать такие ссылки тут, чем в яве
        ///                             <img src=\"http://printahead.net/printahead.online/Library/Hair/Standard/20.jpg\" </summary>
        /// <param name="manTypeInt"></param>
        /// <param name="sessionID"></param>
        /// <param name="hairPath"></param>
        /// <param name="hairMaterialPath"></param>
        /// <param name="accessoryPath"></param>
        /// <param name="accessoryMaterialPath"></param>
        /// <param name="size">96% (3.2"), 113%(3.8"), 134%(4.5") ( 1 это 3.2, 2 - 3.8 дюйма и т.п.</param>
        public void CreateObj(int manTypeInt, string sessionID, string hairPath, string hairMaterialPath, string accessoryPath, string accessoryMaterialPath, string basePath, string baseMaterialPath, string addonPath1, string addonPath2, string addonPath3, string addonPath4, string addonMaterialPath, int oldMorphingValue, int fatMorphingValue, int smoothingValue, int size, string ftpOutputName)
        {
            var manType = ManType.Male;

            switch (manTypeInt)
            {
            case 1:
                manType = ManType.Female;
                break;

            case 2:
            case 3:
                manType = ManType.Child;
                break;
            }

            #region Создание проекта

            WebClient client = new WebClient();

            var    imagePath  = "https://printahead.net/printahead.online/PrintAhead_images/" + sessionID + ".jpeg";
            byte[] imageBytes = client.DownloadData(imagePath);

            var ms            = new MemoryStream(imageBytes);
            var templateImage = new Bitmap(ms);


            ProgramCore.Project            = new Project(sessionID, null, null, GenesisType.Genesis2, manType, null, false, 1024, false);
            ProgramCore.Project.FrontImage = templateImage;
            //ProgramCore.Project.LoadMeshes();
            #endregion

            #region активация охуенной распознавалки

            if (FSDK.FSDKE_OK != FSDK.ActivateLibrary("DWysHuomlBcczVM2MQfiz/3WraXb7r+fM0th71X5A9z+gsHn2kpGOgWrVh9D/9sQWlPXO00CFmGMvetl9A+VEr9Y5GVBIccyV32uaZutZjKYH5KB2k87NJAAw6NPkzK0DSQ5b5W7EO0yg2+x4HxpWzPogGyIIYcAHIYY11/YGsU="))
            {
                MessageBox.Show("Please run the License Key Wizard (Start - Luxand - FaceSDK - License Key Wizard)", "Error activating FaceSDK", MessageBoxButtons.OK, MessageBoxIcon.Error);
                Application.Exit();
            }

            FSDK.InitializeLibrary();
            FSDK.SetFaceDetectionParameters(true, true, 384);

            #endregion

            Recognize(templateImage);
            var aabb = ProgramCore.Project.RenderMainHelper.InitializeShapedotsHelper(true);
            ProgramCore.Project.RenderMainHelper.LoadProject(true, aabb, imagePath, false);

            headMeshesController.InitializeTexturing(autodotsShapeHelper.GetBaseDots(), HeadController.GetIndices());
            autodotsShapeHelper.Transform(headMeshesController.TexturingInfo.Points.ToArray());
            headController.StartAutodots();
            ProgramCore.Project.RenderMainHelper.UpdateUserCenterPositions();

            for (var i = 0; i < headMeshesController.RenderMesh.Parts.Count; i++)
            {
                var part = headMeshesController.RenderMesh.Parts[i];
                if (part.Texture == 0)
                {
                    part.Texture     = ProgramCore.Project.RenderMainHelper.HeadTextureId;
                    part.TextureName = ProgramCore.Project.RenderMainHelper.GetTexturePath(part.Texture);
                }
            }

            headController.EndAutodots();

            #region Загружаем и применяем морфинги

            #region Старость

            if (oldMorphingValue != 20)          // назачем морфить, если по дефолту итак так. чтобы время на загрузку не тратить
            {
                var intTemp = 0;

                var oldMorphingPath = "ftp://108.167.164.209/public_html/printahead.online/PrintAhead_DefaultModels/" + manType.GetObjDirPath(false) + "/Old.obj";       // загружаем трансформации для старения
                oldMorphingPath = oldMorphingPath.Replace(@"\", "/");
                if (FTPHelper.IsFileExists(oldMorphingPath))
                {
                    OldMorphing = ProgramCore.Project.RenderMainHelper.pickingController.LoadPartsMorphInfo(oldMorphingPath, headMeshesController.RenderMesh, ref intTemp);
                }

                if (OldMorphing != null)
                {
                    var delta = oldMorphingValue == 20 ? 0 : oldMorphingValue / 80f;
                    foreach (var m in OldMorphing)
                    {
                        m.Value.Delta = delta;
                    }
                    ProgramCore.Project.AgeCoefficient = delta;
                }
            }

            #endregion

            #region Толстость

            if (fatMorphingValue != 0)
            {
                var intTemp         = 0;
                var fatMorphingPath = "ftp://108.167.164.209/public_html/printahead.online/PrintAhead_DefaultModels/" + manType.GetObjDirPath(false) + "/Fat.obj";  // загружаем трансформации для толстения
                fatMorphingPath = fatMorphingPath.Replace(@"\", "/");
                if (FTPHelper.IsFileExists(fatMorphingPath))
                {
                    FatMorphing = ProgramCore.Project.RenderMainHelper.pickingController.LoadPartsMorphInfo(fatMorphingPath, headMeshesController.RenderMesh, ref intTemp);
                }

                if (FatMorphing != null)
                {
                    var delta = fatMorphingValue == 0 ? 0 : fatMorphingValue / 30f;
                    foreach (var m in FatMorphing)
                    {
                        m.Value.Delta = delta;
                    }
                    ProgramCore.Project.FatCoefficient = delta;
                }
            }

            #endregion

            float?k = null;
            if (smoothingValue != 0)
            {
                var delta = (100 - smoothingValue) / 100f;

                ProgramCore.Project.MorphingScale = delta;
                k = delta;
            }

            DoMorth(k);

            #endregion

            FTPHelper.UpdateAddress(@"ftp://108.167.164.209/public_html/printahead.online/PrintAhead_models/" + sessionID);

            ProgramCore.Project.RenderMainHelper.InitializeHairPositions();
            ProgramCore.Project.RenderMainHelper.InitializeAccessoryPositions();

            ZipOutputStream zipStream = null;

            MemoryStream outputMemStream = new MemoryStream();
            if (!string.IsNullOrEmpty(ftpOutputName))
            {
                zipStream = new ZipOutputStream(outputMemStream); // заодно все будем паковать в архивчик
                zipStream.SetLevel(3);
            }

            #region Attach hair

            var hairObjPath = string.Empty;
            if (string.IsNullOrEmpty(hairPath))
            {
                switch (manTypeInt)
                {
                case 0:
                    hairObjPath = @"ftp://108.167.164.209/public_html/printahead.online/Library/Hair/Standard/20.obj";          // мужик
                    break;

                case 1:
                    hairObjPath = @"ftp://108.167.164.209/public_html/printahead.online/Library/Hair/Standard/3.obj";           // баба
                    break;

                case 2:
                    hairObjPath = @"ftp://108.167.164.209/public_html/printahead.online/Library/Hair/Standard/10C.obj";         // мальчик
                    break;

                case 3:
                    hairObjPath = @"ftp://108.167.164.209/public_html/printahead.online/Library/Hair/Standard/12C.obj";         // девочка
                    break;
                }
            }
            else
            {
                hairObjPath = GetParcedHairAccessoriesLink(hairPath, manType == ManType.Child ? "C.obj" : ".obj");
            }

            if (!string.IsNullOrEmpty(hairObjPath) && FTPHelper.IsFileExists(hairObjPath))
            {
                hairMaterialPath = GetParcedHairAccessoriesLink(hairMaterialPath, "T.jpg").Replace("/Icons/", "/Materials/");
                if (string.IsNullOrEmpty(hairMaterialPath))
                {
                    hairMaterialPath = "ftp://108.167.164.209/public_html/printahead.online/Library/Hair/Materials/H7T.jpg";
                }

                var temp     = @"ftp://108.167.164.209/public_html/printahead.online/PrintAhead_models/" + sessionID + "/Textures";
                var fileName = Path.GetFileNameWithoutExtension(hairMaterialPath) + ".jpg";

                FTPHelper.CopyFromFtpToFtp(hairMaterialPath, temp, fileName, zipStream, fileName);
                hairMaterialPath = @"ftp://108.167.164.209/public_html/printahead.online/PrintAhead_models/" + sessionID + "/Textures/" + fileName;

                ProgramCore.Project.RenderMainHelper.AttachHair(hairObjPath, hairMaterialPath, manType);
            }

            #endregion

            #region Attach accessories

            var accessoryObjPath = string.Empty;
            if (string.IsNullOrEmpty(accessoryPath))
            {
                switch (manType)
                {
                case ManType.Child:
                    accessoryObjPath = @"ftp://108.167.164.209/public_html/printahead.online/Library/Accessory/Standard/I.obj";
                    break;

                case ManType.Female:
                    accessoryObjPath = @"ftp://108.167.164.209/public_html/printahead.online/Library/Accessory/Standard/HF.obj";
                    break;

                default:
                    accessoryObjPath = @"ftp://108.167.164.209/public_html/printahead.online/Library/Accessory/Standard/HM.obj";
                    break;
                }
            }
            else
            {
                accessoryObjPath = GetParcedHairAccessoriesLink(accessoryPath, manType == ManType.Child ? "C.obj" : ".obj");
            }

            if (!string.IsNullOrEmpty(accessoryObjPath) && FTPHelper.IsFileExists(accessoryObjPath))
            {
                accessoryMaterialPath = GetParcedHairAccessoriesLink(accessoryMaterialPath, "T.jpg").Replace("/Icons/", "/Materials/");;
                if (string.IsNullOrEmpty(accessoryMaterialPath))
                {
                    accessoryMaterialPath = "ftp://108.167.164.209/public_html/printahead.online/Library/Accessory/Materials/lgreenT.jpg";
                }

                var temp     = @"ftp://108.167.164.209/public_html/printahead.online/PrintAhead_models/" + sessionID + "/Textures";
                var fileName = Path.GetFileNameWithoutExtension(accessoryMaterialPath) + ".jpg";

                FTPHelper.CopyFromFtpToFtp(accessoryMaterialPath, temp, fileName, zipStream, fileName);
                accessoryMaterialPath = @"ftp://108.167.164.209/public_html/printahead.online/PrintAhead_models/" + sessionID + "/Textures/" + fileName;

                ProgramCore.Project.RenderMainHelper.AttachAccessory(accessoryObjPath, accessoryMaterialPath, manType);
            }

            #region Base

            var baseObjPath = string.Empty;
            if (!string.IsNullOrEmpty(basePath))
            {
                baseObjPath = GetParcedHairAccessoriesLink(basePath, manType == ManType.Child ? "C.obj" : ".obj");
            }

            if (!string.IsNullOrEmpty(baseObjPath) && FTPHelper.IsFileExists(baseObjPath))
            {
                baseMaterialPath = GetParcedHairAccessoriesLink(baseMaterialPath, "T.jpg").Replace("/Icons/", "/Materials/");
                if (string.IsNullOrEmpty(baseMaterialPath))
                {
                    baseMaterialPath = "ftp://108.167.164.209/public_html/printahead.online/Library/Accessory/Materials/lgreenT.jpg";
                }

                var temp     = @"ftp://108.167.164.209/public_html/printahead.online/PrintAhead_models/" + sessionID + "/Textures";
                var fileName = Path.GetFileNameWithoutExtension(baseMaterialPath) + ".jpg";

                FTPHelper.CopyFromFtpToFtp(baseMaterialPath, temp, fileName, zipStream, fileName);
                baseMaterialPath = @"ftp://108.167.164.209/public_html/printahead.online/PrintAhead_models/" + sessionID + "/Textures/" + fileName;

                ProgramCore.Project.RenderMainHelper.AttachAccessory(baseObjPath, baseMaterialPath, manType);
            }

            #endregion

            #region Addons

            var addonObjPath = GetParcedHairAccessoriesLink(addonPath1, manType == ManType.Child ? "C.obj" : ".obj");
            AttachAddon(addonObjPath, ref addonMaterialPath, sessionID, manType, ref zipStream);

            addonObjPath = GetParcedHairAccessoriesLink(addonPath2, manType == ManType.Child ? "C.obj" : ".obj");
            AttachAddon(addonObjPath, ref addonMaterialPath, sessionID, manType, ref zipStream);

            addonObjPath = GetParcedHairAccessoriesLink(addonPath3, manType == ManType.Child ? "C.obj" : ".obj");
            AttachAddon(addonObjPath, ref addonMaterialPath, sessionID, manType, ref zipStream);

            addonObjPath = GetParcedHairAccessoriesLink(addonPath4, manType == ManType.Child ? "C.obj" : ".obj");
            AttachAddon(addonObjPath, ref addonMaterialPath, sessionID, manType, ref zipStream);

            #endregion

            #endregion


            ProgramCore.Project.RenderMainHelper.SaveMergedHead(sessionID, zipStream, size);
            ProgramCore.Project.RenderMainHelper.SaveSmoothedTextures(zipStream);


            var address        = "ftp://108.167.164.209/public_html/printahead.online/PrintAhead_models/" + ProgramCore.Project.ProjectName + "/Textures";
            var profileImgPath = sessionID + ".jpeg";

            var ftpHelper = new FTPHelper(address);
            var stream    = new MemoryStream();
            templateImage.Save(stream, ImageFormat.Jpeg);
            ftpHelper.Upload(stream, profileImgPath);

            if (zipStream != null)
            {
                ms.Seek(0, SeekOrigin.Begin);
                var newEntry = new ZipEntry(profileImgPath);
                zipStream.PutNextEntry(newEntry);
                ms.CopyTo(zipStream);
                zipStream.CloseEntry();

                zipStream.IsStreamOwner = false; // False stops the Close also Closing the underlying stream.
                zipStream.Close();               // Must finish the ZipOutputStream before using outputMemStream.

                outputMemStream.Position = 0;
                address   = "ftp://108.167.164.209/public_html/printahead.online/PrintAhead_output/";
                ftpHelper = new FTPHelper(address);
                ftpHelper.Upload(outputMemStream, ftpOutputName + ".zip");
            }
        }
예제 #2
0
        public void btnAutodots_Click(object sender, EventArgs e)
        {
            if (IsUpdating)
            {
                return;
            }

            BeginUpdate();
            if (btnAutodots.Tag.ToString() == "2")
            {
                btnAutodots.Tag = "1";

                SetDefaultHeadRotation();
                ProgramCore.MainForm.DisableRotating();

                btnAutodots.BackColor = SystemColors.ControlDarkDark;
                btnAutodots.ForeColor = Color.White;

                if (ProgramCore.Project.AutodotsUsed)
                {
                    ProgramCore.MainForm.ctrlRenderControl.Mode = Mode.HeadAutodots;
                }
                else
                {
                    ProgramCore.MainForm.ctrlRenderControl.autodotsShapeHelper.TransformRects();
                    ProgramCore.MainForm.ctrlRenderControl.autodotsShapeHelper.InitializeShaping();
                    ProgramCore.MainForm.ctrlRenderControl.headMeshesController.InitializeTexturing(ProgramCore.MainForm.ctrlRenderControl.autodotsShapeHelper.GetBaseDots(), HeadController.GetIndices());

                    ProgramCore.MainForm.ctrlRenderControl.headMeshesController.TexturingInfo.UpdatePointsInfo(ProgramCore.MainForm.ctrlRenderControl.headMeshesController.RenderMesh.Scale,
                                                                                                               ProgramCore.MainForm.ctrlRenderControl.headMeshesController.RenderMesh.AABB.Center.Xy);
                    ProgramCore.MainForm.ctrlRenderControl.autodotsShapeHelper.Transform(ProgramCore.MainForm.ctrlRenderControl.headMeshesController.TexturingInfo.Points.ToArray());
                    ProgramCore.MainForm.ctrlRenderControl.headController.StartAutodots();

                    ProgramCore.MainForm.ctrlRenderControl.Mode = Mode.HeadAutodotsFirstTime;
                }
                ProgramCore.MainForm.ctrlTemplateImage.UpdateUserCenterPositions(false, true);

                btnFlipLeft.Visible  = true;
                btnFlipRight.Visible = true;
                UpdateFlipEnable(ProgramCore.Project.TextureFlip);
                SetPanelLogic();

                if (frontTab && UserConfig.ByName("Options")["Tutorials", "Autodots", "1"] == "1")
                {
                    ProgramCore.MainForm.frmTutAutodots.ShowDialog(this);
                }
            }
            else
            {
                btnAutodots.Tag = "2";

                btnAutodots.BackColor = SystemColors.Control;
                btnAutodots.ForeColor = Color.Black;

                if (!ProgramCore.Project.AutodotsUsed)
                {
                    for (var i = 0; i < ProgramCore.MainForm.ctrlRenderControl.headMeshesController.RenderMesh.Parts.Count; i++)
                    {
                        var part = ProgramCore.MainForm.ctrlRenderControl.headMeshesController.RenderMesh.Parts[i];
                        if (part.Texture == 0)
                        {
                            part.Texture     = ProgramCore.MainForm.ctrlRenderControl.HeadTextureId;
                            part.TextureName = ProgramCore.MainForm.ctrlRenderControl.GetTexturePath(part.Texture);
                        }
                    }

                    ProgramCore.Project.AutodotsUsed = true;
                    ProgramCore.MainForm.ctrlRenderControl.headController.EndAutodots();
                    ProgramCore.MainForm.ctrlRenderControl.ApplySmoothedTextures();
                }

                btnFlipLeft.Visible  = false;
                btnFlipRight.Visible = false;
                ProgramCore.MainForm.ctrlRenderControl.CalcReflectedBitmaps();
                ProgramCore.MainForm.ctrlTemplateImage.RectTransformMode = false;
                ProgramCore.MainForm.EnableRotating();
                ProgramCore.MainForm.ctrlRenderControl.Mode = Mode.None;
                SetPanelLogic();
                DisableFlip();
            }
            EndUpdate();
        }
예제 #3
0
        public void btnAutodots_Click(object sender, EventArgs e)
        {
            if (IsUpdating)
            {
                return;
            }

            BeginUpdate();
            if (btnAutodots.Tag.ToString() == "2")
            {
                btnAutodots.Tag = "1";

                SetDefaultHeadRotation();
                ProgramCore.MainForm.DisableRotating();

                btnAutodots.BackColor = SystemColors.ControlDarkDark;
                btnAutodots.ForeColor = Color.White;

                if (ProgramCore.Project.AutodotsUsed)
                {
                    ProgramCore.MainForm.ctrlRenderControl.Mode = Mode.HeadAutodots;
                }
                else
                {
                    ProgramCore.Project.RenderMainHelper.headMeshesController.InitializeTexturing(ctrlRenderControl.autodotsShapeHelper.GetBaseDots(), HeadController.GetIndices());
                    ctrlRenderControl.autodotsShapeHelper.Transform(ProgramCore.Project.RenderMainHelper.headMeshesController.TexturingInfo.Points.ToArray());
                    ProgramCore.Project.RenderMainHelper.headController.StartAutodots();

                    ProgramCore.MainForm.ctrlRenderControl.Mode = Mode.HeadAutodotsFirstTime;
                }
                ProgramCore.MainForm.ctrlTemplateImage.UpdateUserCenterPositions(false, true);

                SetPanelLogic();

                if (frontTab && ProgramCore.IsTutorialVisible && UserConfig.ByName("Options")["Tutorials", "Autodots", "1"] == "1")
                {
                    ProgramCore.MainForm.frmTutAutodots.ShowDialog(this);
                }
            }
            else
            {
                btnAutodots.Tag = "2";

                btnAutodots.BackColor = SystemColors.Control;
                btnAutodots.ForeColor = Color.Black;

                if (!ProgramCore.Project.AutodotsUsed)
                {
                    //заменть все шейп-точки на новые
                    //    ProgramCore.Project.RenderMainHelper.headController.UpdateAllShapedotsFromAutodots();

                    for (var i = 0; i < ProgramCore.Project.RenderMainHelper.headMeshesController.RenderMesh.Parts.Count; i++)
                    {
                        var part = ProgramCore.Project.RenderMainHelper.headMeshesController.RenderMesh.Parts[i];
                        if (part.Texture == 0)
                        {
                            part.Texture     = ProgramCore.MainForm.ctrlRenderControl.HeadTextureId;
                            part.TextureName = ProgramCore.MainForm.ctrlRenderControl.GetTexturePath(part.Texture);
                        }
                    }

                    ProgramCore.Project.AutodotsUsed = true;
                    btnProfile.Enabled = true;
                    ProgramCore.Project.RenderMainHelper.headController.EndAutodots();
                    ProgramCore.MainForm.ctrlRenderControl.ApplySmoothedTextures();

                    /*  for (var i = 0; i < ProgramCore.Project.RenderMainHelper.headController.AutoDots.Count; i++)      // TODO АЛГОРИТМЫ АВТОДОТСОВ 29.05.2018
                     * {
                     *    var p = ProgramCore.Project.RenderMainHelper.headController.AutoDots[i];
                     *    ctrlRenderControl.autodotsShapeHelper.Transform(p.Value, i); // точка в мировых координатах
                     * }*/
                }

                //        btnFlipLeft.Visible = false;
                //        btnFlipRight.Visible = false;
                ProgramCore.MainForm.ctrlRenderControl.CalcReflectedBitmaps();
                ProgramCore.MainForm.ctrlTemplateImage.RectTransformMode = false;
                ProgramCore.MainForm.EnableRotating();
                ProgramCore.MainForm.ctrlRenderControl.Mode = Mode.None;
                SetPanelLogic();
                //      DisableFlip();
            }
            EndUpdate();
        }