protected override void OnRenderItemText(ToolStripItemTextRenderEventArgs e) { ToolStrip toolStrip = e.ToolStrip; ToolStripItem item = e.Item; if (toolStrip is ToolStripDropDown) { e.TextColor = item.Selected ? this.ColorTable.HoverFore : this.ColorTable.Fore; } else { e.TextColor = item.Selected ? this.ColorTable.BaseHoverFore : this.ColorTable.BaseFore; } if ((toolStrip is ToolStripDropDown) && (e.Item is ToolStripMenuItem)) { Rectangle textRectangle = e.TextRectangle; e.TextRectangle = textRectangle; } if ((!(toolStrip is ToolStripDropDown) && this.ColorTable.BaseForeAnamorphosis) && !string.IsNullOrEmpty(e.Item.Text)) { Graphics graphics = e.Graphics; Image image = SkinTools.ImageLightEffect(e.Item.Text, e.Item.Font, e.TextColor, this.ColorTable.BaseForeAnamorphosisColor, this.ColorTable.BaseForeAnamorphosisBorder); graphics.DrawImage(image, (int)(e.TextRectangle.Left - (this.ColorTable.BaseForeAnamorphosisBorder / 2)), (int)(e.TextRectangle.Top - (this.ColorTable.BaseForeAnamorphosisBorder / 2))); } else { base.OnRenderItemText(e); } }
void BlurPass() { SkinTools t = target as SkinTools; SkinToolsData data = t.Data; data.UpdateResultInfo(); for (int v = 0; v < data.SourceGeometry.posVertsList.Count; v++) { data.SourceGeometry.posVertsList[v].BonesWeights = new float[data.ResultBones.Length]; } for (int i = 0; i < data.SourceGeometry.unityVertices.Count; i++) { int parent = data.SourceGeometry.unityVertices[i].PVertIdx; for (int b = 0; b < data.ResultBones.Length; b++) { data.SourceGeometry.posVertsList[parent].BonesWeights[b] = data.ResultBones[b].Weights[i]; } } for (int b = 0; b < data.ResultBones.Length; b++) { for (int i = 0; i < data.BlurIterations; i++) { for (int v = 0; v < data.SourceGeometry.posVertsList.Count; v++) { float lerpVal = (1f / data.SourceGeometry.posVertsList[v].AdjacentPV.Count) * data.BlurMultiplier; for (int a = 0; a < data.SourceGeometry.posVertsList[v].AdjacentPV.Count; a++) { int apv = data.SourceGeometry.posVertsList[v].AdjacentPV[a]; data.SourceGeometry.posVertsList[v].BonesWeights[b] = Mathf.Lerp(data.SourceGeometry.posVertsList[v].BonesWeights[b], data.SourceGeometry.posVertsList[apv].BonesWeights[b], lerpVal); } } } } Transform[] bones = data.resultSMR.bones; for (int v = 0; v < data.SourceGeometry.posVertsList.Count; v++) { data.SourceGeometry.posVertsList[v].ebw = new ExtBoneWeight(); for (int b = 0; b < data.ResultBones.Length; b++) { data.SourceGeometry.posVertsList[v].ebw.Add(bones[b], data.SourceGeometry.posVertsList[v].BonesWeights[b], 0); } } BoneWeight[] weights = data.ResultMesh.boneWeights; for (int i = 0; i < data.SourceGeometry.unityVertices.Count; i++) { int parent = data.SourceGeometry.unityVertices[i].PVertIdx; data.SourceGeometry.posVertsList[parent].ebw.FillIndeces(bones); weights[i] = data.SourceGeometry.posVertsList[parent].ebw.GetClampedBW(); } data.ResultMesh.boneWeights = weights; data.resultSMR.sharedMesh = data.ResultMesh; data.UpdateResultInfo(); data.ApplyResultVisual(); }
private void btnCancel_Click(object sender, EventArgs e) { if (txtSkins.Text != SystemConfig.CurrentConfig.SkinName) { SkinTools.SetSkin(SystemConfig.CurrentConfig.SkinName); } }
//画标题 private void DrawCaptionText( Graphics g, Rectangle textRect, string text, Font font, TitleType Effect, Color EffetBack, int EffectWidth, Color FrmColor, Point TitleOffset) { if (Effect == TitleType.EffectTitle) { Size txtsize = TextRenderer.MeasureText(text, font); Image imgtext = SkinTools.ImageLightEffect(text, font, FrmColor, EffetBack, EffectWidth, new Rectangle(0, 0, textRect.Width, txtsize.Height), true); g.DrawImage(imgtext, textRect.X - EffectWidth / 2 + TitleOffset.X, textRect.Y - EffectWidth / 2 + TitleOffset.Y ); } else if (Effect == TitleType.Title) { textRect.X += TitleOffset.X; textRect.Y += TitleOffset.Y; TextRenderer.DrawText( g, text, font, textRect, FrmColor, TextFormatFlags.VerticalCenter | TextFormatFlags.Left | TextFormatFlags.SingleLine | TextFormatFlags.WordEllipsis); } }
public frmMain() { InitializeComponent(); ribbonControl1.ShowPageHeadersMode = ShowPageHeadersMode.Hide; UpdateMainUI(); string title = INISystemConfig.GetTitle(); if (!String.IsNullOrEmpty(title)) { this.Text = title; } PageHeadColor = new XtraTabbedMdiManagerPageColor(); bll = new bllModules(); MDIPageOption(); if (INISystemConfig.GetWindowState() == "Y") { this.WindowState = FormWindowState.Maximized; } new GZFramework.UI.Dev.RibbonButton.RibbonLoad(rpage_Option, rpg_Function, rpg_DataNav); //设置皮肤 SkinTools.InitSkinAStyleGallery(ribbonGalleryBarItem1, ribbonControl1, barItem_RbStyle); this.FormClosing += frmMain_FormClosing; }
private void btnApplySkin_Click(object sender, EventArgs e) { if (txtSkins.SelectedItem != null) { SkinTools.SetSkin(txtSkins.SelectedItem.ToString()); } }
internal void ApplyChangesToScene(SkinTools b) { if (!Application.isPlaying) { EditorUtility.SetDirty(b); EditorSceneManager.MarkAllScenesDirty(); } }
//大小改变时 protected override void OnSizeChanged(EventArgs e) { if (SkinBack != null && show) { SkinTools.CreateControlRegion(this, TrankBack(), 255); skin.Size = this.Size; } base.OnSizeChanged(e); }
private void RenderAnamorphosisText(Graphics g, PointF point, Color fc, Color bc) { using (Brush brush = new SolidBrush(base.ForeColor)) { Rectangle rc = new Rectangle(new Point(Convert.ToInt32(point.X), Convert.ToInt32(point.Y)), ClientRectangle.Size); Image img = SkinTools.ImageLightEffect(Text, base.Font, fc, bc, BorderSize, rc, !AutoSize); g.DrawImage(img, point.X - (BorderSize / 2), point.Y - (BorderSize / 2)); } }
void DrawReferenceSkinProperties(SkinTools t, SkinToolsData data) { GUILayout.BeginHorizontal(); GUILayout.Label("select:", GUILayout.Width(100)); SkinnedMeshRenderer nSourceSkin = (SkinnedMeshRenderer)EditorGUILayout.ObjectField(data.ReferenceSMR, typeof(SkinnedMeshRenderer), true); if (nSourceSkin != data.ReferenceSMR) { data.ReferenceSMR = nSourceSkin; data.OnChangeReferenceSMR(nSourceSkin); ApplyChangesToScene(t); } GUILayout.EndHorizontal(); if (data.ReferenceMeshIsValid) { EditorGUI.indentLevel += 1; GUILayout.Label("Excluded triangles"); GUILayout.BeginHorizontal(); bool npaintExcludedTriangles = GUILayout.Toggle(paintExcludedTriangles, "Paint", "Button", GUILayout.Width(80)); if (npaintExcludedTriangles != paintExcludedTriangles) { paintExcludedTriangles = npaintExcludedTriangles; SceneView.RepaintAll(); } GUILayout.Label("Brush radius:", GUILayout.Width(100)); brushRadius = GUILayout.HorizontalSlider(brushRadius, 0.002f, 1f); GUILayout.EndHorizontal(); _sourceSkinBonesFoldout = EditorGUILayout.Foldout(_sourceSkinBonesFoldout, "Reference bones"); _sourceSkinBonesFoldoutAB.target = _sourceSkinBonesFoldout; if (EditorGUILayout.BeginFadeGroup(_sourceSkinBonesFoldoutAB.faded)) { for (int i = 0; i < data.ReferenceSMRBones.Count; i++) { GUILayout.BeginHorizontal(); GUILayout.Space(24); GUILayout.Label(data.ReferenceSMRBones[i].Tr.name, GUILayout.Width(160)); bool nVal = GUILayout.Toggle(data.ReferenceSMRBones[i].Excluded, ResourceHolder.ExcludeIkon, ResourceHolder.IkonStyle); if (nVal != data.ReferenceSMRBones[i].Excluded) { data.ReferenceSMRBones[i].Excluded = nVal; ApplyChangesToScene(t); } GUILayout.EndHorizontal(); } } EditorGUILayout.EndFadeGroup(); EditorGUI.indentLevel -= 1; } }
//控件圆角 private void SetReion() { if (base.Region != null) { base.Region.Dispose(); } if (RoundStyle != SkinClass.RoundStyle.None) { SkinTools.CreateRegion(this, this.ClientRectangle, Radius, RoundStyle); } }
//获取图片主色调,设置前景色 public static void SetForeColor(DSkinForm form, Image image) { Color cl = SkinTools.GetImageAverageColor(image); if ((cl.B + cl.G + cl.R) / 2 > 200) { form.ForeColor = Color.Black; } else { form.ForeColor = Color.WhiteSmoke; } }
/// <summary> /// 绘制水印 /// </summary> private void WmPaintWater(Graphics g) { if (this.Text.Length == 0 && !string.IsNullOrEmpty(this._waterText) && !this.Focused) { g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality; if (WaterText.Length != 0) { Image img = SkinTools.ImageLightEffect(WaterText, WaterFont, WaterColor, BackColor, 0, ClientRectangle, !AutoSize); int left = this.RightToLeft == RightToLeft.Yes ? Width - img.Width : 0; g.DrawImage(img, left, (Height - img.Height) / 2); } } }
void OnSceneGUI() { SkinTools t = target as SkinTools; SkinToolsData data = t.Data; if (_resultFoldout) { DrawResultBonesOnSceneGUI(data); } if (paintExcludedTriangles && data.ReferenceSMRGeometry != null && data.ReferenceSMRGeometry.IsValid) { PaintSourceSMRExcludedTriangles(data); } }
private void frmSystemOptions_Load(object sender, EventArgs e) { SkinTools.LoadSkin(txtSkins); //加载皮肤列表 txtSkins.Text = SystemConfig.CurrentConfig.SkinName; chkLocalLog.Checked = SystemConfig.CurrentConfig.WriteLocalLog; chkAllowRunMultiInstance.Checked = SystemConfig.CurrentConfig.AllowRunMultiInstance; chkDoubleClickIntoEditMode.Checked = SystemConfig.CurrentConfig.DoubleClickIntoEditMode; rgAuthType.SelectedIndex = SystemConfig.CurrentConfig.LoginAuthType - 1; rgUpgraderType.SelectedIndex = SystemConfig.CurrentConfig.UpgradeType - 1; txtUpgraderIP.Text = SystemConfig.CurrentConfig.UpgraderServerIP; txtUpgraderPort.Text = SystemConfig.CurrentConfig.UpgraderServerPort; chkCheckVer.Checked = SystemConfig.CurrentConfig.AutoCheckVersion; chkExitAppIfOldVer.Checked = SystemConfig.CurrentConfig.ExitAppIfOldVersion; this.xtraTabControl1.SelectedTabPageIndex = 0; }
void DrawSourceGeometryProperties(SkinTools t, SkinToolsData data) { GUILayout.BeginHorizontal(); GUILayout.Label("select:", GUILayout.Width(100)); MeshFilter nSourceMeshMF = (MeshFilter)EditorGUILayout.ObjectField(data.SourceGeometryMF, (typeof(MeshFilter)), true); if (nSourceMeshMF != data.SourceGeometryMF) { data.SourceGeometryMF = nSourceMeshMF; ApplyChangesToScene(t); data.OnChangeSourceGeometry(nSourceMeshMF); } GUILayout.EndHorizontal(); if (data.SourceGeometry != null) { GUILayout.Label(string.Format("{0} verts, {1} tris", data.SourceGeometry.VertsCount, data.SourceGeometry.TrisCount) + (data.SourceGeometry.HasUV0? ", uv ":" ") + (data.SourceGeometry.HasUV1? " UV1 ":" ")); } }
protected override void OnVisibleChanged(EventArgs e) { if (!DesignMode) { if (skin != null) { skin.Visible = this.Visible; } else { SkinTools.CreateControlRegion(this, TrankBack(), 255); show = true; skin = new SkinForm(this); skin.Show(); } } base.OnVisibleChanged(e); }
private void RenderText(Graphics g) { using (TextRenderingHintGraphics textRenderGraphics = new TextRenderingHintGraphics(g)) { PointF point = CalculateRenderTextStartPoint(g); Color fc = ForeColor; Color bc = BorderColor; if (ForeColorSuit) { bool Base = SkinTools.ColorSlantsDarkOrBright(this.Parent.BackColor); if (Base) { fc = Color.White; bc = Color.Black; } else { fc = Color.Black; bc = Color.White; } } switch (_artTextStyle) { case ArtTextStyle.Border: RenderBordText(g, point, fc, bc); break; case ArtTextStyle.Relievo: RenderRelievoText(g, point, fc, bc); break; case ArtTextStyle.Forme: RenderFormeText(g, point, fc, bc); break; case ArtTextStyle.Anamorphosis: RenderAnamorphosisText(g, point, fc, bc); break; } } }
private void dSkinButton_BackGround_Click(object sender, EventArgs e) { bool bbb = dSkinCheckBox_ImageFuzzy.Checked; OpenFileDialog openFileDialog = new OpenFileDialog(); openFileDialog.Filter = "Image Files(*.All Types)|*.jpg;*.jpeg;*.png;*.bmp;*.gif"; openFileDialog.FilterIndex = 1; if (openFileDialog.ShowDialog() == DialogResult.OK) { System.IO.FileInfo fl = new System.IO.FileInfo(openFileDialog.FileName); if (fl.Length > 1024 * 1024) { //System.Windows.Forms.MessageBox.Show("请选择1M以内的横向图片"); AuroraMessageBox msg = null; msg = new AuroraMessageBox(); msg.strCaption = "Aurora智能提示"; msg.strMessage = "请选择1M以内的横向图片"; msg.strButtonText = "确定"; msg.StartPosition = FormStartPosition.Manual; msg.Location = new Point(this.Location.X + this.Width / 2 - msg.Width / 2, this.Location.Y + this.Height / 2 - msg.Height / 2); msg.ShowDialog(); return; } mainFrm.str_BackGroundImage = dSkinTextBox_BackGround.Text = openFileDialog.FileName; mainFrm.SetPlayerBackground(); mainFrm.ItemHoverColor = SkinTools.GetImageAverageColor(Image.FromFile(openFileDialog.FileName)); HSL hsl = ColorConverterEx.ColorToHSL(mainFrm.ItemHoverColor); //hsl.Luminance += 0.2; //if (hsl.Luminance >= 1) // hsl.Luminance = 0.99; hsl.Saturation += 0.2; if (hsl.Saturation >= 1) { hsl.Saturation = 0.99; } mainFrm.ItemHoverColor = ColorConverterEx.HSLToColor(hsl); dSkinCheckBox_ImageFuzzy.Checked = !bbb; dSkinCheckBox_ImageFuzzy.Checked = bbb; this.Invalidate(); } }
/// <summary> /// 通过正确的字符串构造一个TimePoint对象 /// </summary> /// <param name="line">指定的字符串</param> public TimingPoint(string line) { var data = line.Split(','); Offset = double.Parse(data[0]); BeatLength = double.Parse(data[1]); Meter = double.Parse(data[2]); var b = int.TryParse(data[3], out var sample); SampleSet = b ? (SampleSets)sample : SkinTools.StringToEnum <SampleSets>(data[3]); SampleIndex = int.Parse(data[4]); Volume = double.Parse(data[5]); Uninherited = int.Parse(data[6]).ToBool(); if (!Uninherited) { var speed = 100 / (BeatLength / 100); SliderVelocity *= speed * -1 > 0 ? Math.Abs(speed) : 0; } _effect = int.Parse(data[7]); Bpm = Math.Round((1 / BeatLength * 1000 * 60), 2); BitProcesser(_effect); }
//重绘 protected override void OnPaint(PaintEventArgs e) { Graphics g = e.Graphics; //取得当前需要绘画的图像 Bitmap btm = null; switch (_controlState) { case ControlState.Pressed: btm = (Bitmap)DownBack; break; case ControlState.Hover: btm = (Bitmap)MouseBack; break; default: btm = (Bitmap)NormlBack; break; } if (btm != null) { //是否启用九宫绘图 if (Palace) { ImageDrawRect.DrawRect(g, btm, new Rectangle(ClientRectangle.X, ClientRectangle.Y, ClientRectangle.Width, ClientRectangle.Height), Rectangle.FromLTRB(BackRectangle.X, BackRectangle.Y, BackRectangle.Width, BackRectangle.Height), 1, 1); } else { g.DrawImage(btm, this.ClientRectangle); } } //绘制圆角 SkinTools.CreateRegion(this, this.ClientRectangle, radius, RoundStyle); base.OnPaint(e); }
private void getAddtionalInfo(string[] dataPares) { foreach (var d in dataPares) { try { var data = d.Split(':'); if (data[0].Contains("AudioLeadIn:")) { double.TryParse(data[1].Trim(), out var val); AudioLeadIn = val; continue; } if (data[0].Contains("PreviewTime:")) { double.TryParse(data[1].Trim(), out var val); PreviewTime = val; continue; } if (data[0].Contains("Countdown:")) { int.TryParse(data[1].Trim(), out var val); HasCountdown = val.ToBool(); continue; } if (data[0].Contains("SampleSet:")) { if (int.TryParse(data[1].Trim(), out var val)) { SampleSet = (SampleSets)val; } else { SampleSet = SkinTools.StringToEnum <SampleSets>(data[1].Trim()); } continue; } if (data[0].Contains("StackLeniency:")) { double.TryParse(data[1].Trim(), out var val); StackLeniency = val; continue; } if (data[0].Contains("LetterboxInBreaks:")) { int.TryParse(data[1].Trim(), out var val); LetterboxInBreaks = val.ToBool(); continue; } if (data[0].Contains("WidescreenStoryboard")) { int.TryParse(data[1].Trim(), out var val); WidescreenStoryboard = val.ToBool(); continue; } if (data[0].Contains("Bookmarks")) { var bookmarks = data[1].Trim(); if (bookmarks == "0") { return; } var offsets = bookmarks.Split(','); foreach (var offset in offsets) { try { var innerOffset = int.Parse(offset); Bookmarks.Add(innerOffset); } catch (Exception ex) { throw new FailToParseException("无法通过Bookmarks标签获取书签。", ex); } } continue; } if (data[0].Contains("DistanceSpacing")) { double.TryParse(data[1].Trim(), out var val); DistanceSpacing = val; continue; } if (data[0].Contains("BeatDivisor")) { double.TryParse(data[1].Trim(), out var val); BeatDivisor = val; continue; } if (data[0].Contains("GridSize")) { double.TryParse(data[1].Trim(), out var val); GridSize = val; continue; } if (data[0].Contains("TimelineZoom")) { double.TryParse(data[1].Trim(), out var val); TimelineZoom = val; continue; } if (data[0].Contains("SliderMultiplier")) { double.TryParse(data[1].Trim(), out var val); SliderMultiplier = val; continue; } if (data[0].Contains("SliderTickRate")) { double.TryParse(data[1].Trim(), out var val); SliderTickRate = val; } } catch (Exception ex) { throw new FailToParseException("从谱面文件获取信息失败。", ex); } } }
protected override void OnPaint(PaintEventArgs e) { //设置圆角矩形窗体 SkinTools.CreateRegion(this, 4); base.OnPaint(e); }
private void DrawProgressBar(IntPtr hWnd) { bool flag; Graphics graphics = this._bufferedGraphics.Graphics; graphics.Clear(Color.Transparent); Rectangle rect = new Rectangle(System.Drawing.Point.Empty, base.Size); float basePosition = (flag = (this.Style != ProgressBarStyle.Marquee) || base.DesignMode) ? 0.3f : 0.45f; SmoothingModeGraphics graphics2 = new SmoothingModeGraphics(graphics); if (this.Back != null) { Bitmap bitmap = new Bitmap(this.Back, base.Size); SkinTools.CreateControlRegion(this, bitmap, 200); graphics.DrawImage(this.Back, rect); } else { RenderHelper.RenderBackgroundInternal(graphics, rect, this.TrackBack, this.Border, this.InnerBorder, this.RadiusStyle, this.Radius, basePosition, true, this.Glass, LinearGradientMode.Vertical); } Rectangle rectangle2 = rect; rectangle2.Inflate(-this.BarMinusSize.Width, -this.BarMinusSize.Height); if (!flag) { GraphicsState gstate = graphics.Save(); graphics.SetClip(rectangle2); rectangle2.X = this._trackX; rectangle2.Width = 100; using (GraphicsPath path = new GraphicsPath()) { path.AddEllipse(rectangle2); graphics.SetClip(path, CombineMode.Intersect); } RenderHelper.RenderBackgroundInternal(graphics, rectangle2, this.TrackFore, this.Border, this.InnerBorder, RoundStyle.None, 8, basePosition, false, this.BarGlass, LinearGradientMode.Vertical); using (LinearGradientBrush brush2 = new LinearGradientBrush(rectangle2, this.InnerBorder, Color.Transparent, 0f)) { Blend blend = new Blend(); float[] numArray = new float[3]; numArray[1] = 1f; blend.Factors = numArray; float[] numArray2 = new float[3]; numArray2[1] = 0.5f; numArray2[2] = 1f; blend.Positions = numArray2; brush2.Blend = blend; graphics.FillRectangle(brush2, rectangle2); } graphics.Restore(gstate); goto Label_02F1; } rectangle2.Width = (int)((((double)base.Value) / ((double)(base.Maximum - base.Minimum))) * rectangle2.Width); if (this.BarBack != null) { if (this.BarBackStyle == BackStyle.Tile) { using (TextureBrush brush = new TextureBrush(this.BarBack)) { brush.WrapMode = WrapMode.Tile; graphics.FillRectangle(brush, rectangle2); goto Label_019B; } } Bitmap image = new Bitmap(this.BarBack, base.Size); graphics.DrawImageUnscaledAndClipped(image, rectangle2); } else { RenderHelper.RenderBackgroundInternal(graphics, rectangle2, this.TrackFore, this.Border, this.InnerBorder, this.BarRadiusStyle, this.BarRadius, basePosition, false, this.BarGlass, LinearGradientMode.Vertical); } Label_019B: if (!string.IsNullOrEmpty(this._formatString) && this.TxtShow) { TextRenderer.DrawText(graphics, string.Format(this._formatString, ((double)base.Value) / ((double)(base.Maximum - base.Minimum))), base.Font, rect, base.ForeColor, TextFormatFlags.WordEllipsis | TextFormatFlags.SingleLine | TextFormatFlags.VerticalCenter | TextFormatFlags.HorizontalCenter); } Label_02F1: graphics2.Dispose(); IntPtr dC = NativeMethods.GetDC(hWnd); this._bufferedGraphics.Render(dC); NativeMethods.ReleaseDC(hWnd, dC); }
//画标题和ICO protected override void OnRenderSkinFormCaption( SkinFormCaptionRenderEventArgs e) { Graphics g = e.Graphics; Rectangle rect = e.ClipRectangle; CCSkinMain form = e.SkinForm; Rectangle iconRect = form.IconRect; Rectangle textRect = Rectangle.Empty; bool closeBox = form.ControlBox; bool minimizeBox = form.ControlBox && form.MinimizeBox; bool maximizeBox = form.ControlBox && form.MaximizeBox; int textWidthDec = 0; if (closeBox) { textWidthDec += form.CloseBoxSize.Width + form.ControlBoxOffset.X; } if (maximizeBox) { textWidthDec += form.MaxSize.Width + form.ControlBoxSpace; } if (minimizeBox) { textWidthDec += form.MiniSize.Width + form.ControlBoxSpace; } foreach (CmSysButton item in form.ControlBoxManager.SysButtonItems) { if (form.ControlBox && item.Visibale) { textWidthDec += item.Size.Width + form.ControlBoxSpace; } } textRect = new Rectangle( iconRect.Right + 3, form.BorderPadding.Left, rect.Width - iconRect.Right - textWidthDec - 6, rect.Height - form.BorderPadding.Left); using (AntiAliasGraphics antiGraphics = new AntiAliasGraphics(g)) { DrawCaptionBackground( g, rect, e.Active); if (form.ShowDrawIcon && form.Icon != null) { DrawIcon(g, iconRect, form.Icon); } if (!string.IsNullOrEmpty(form.Text)) { Color EfColor = form.EffectBack; Color TitleColor = form.TitleColor; //判断是否根据背景色适应颜色 if (form.TitleSuitColor) { //如果背景色为暗色 if (SkinTools.ColorSlantsDarkOrBright(form.BackColor)) { TitleColor = Color.White; EfColor = Color.Black; } else//如果背景色为亮色 { TitleColor = Color.Black; EfColor = Color.White; } } DrawCaptionText( g, textRect, form.Text, form.CaptionFont, form.EffectCaption, EfColor, form.EffectWidth, TitleColor, form.TitleOffset); } } }
public override void OnInspectorGUI() { SkinTools t = target as SkinTools; SkinToolsData data = t.Data; _mapBonesFoldout = EditorGUILayout.Foldout(_mapBonesFoldout, "Map Bones"); _mapBonesFoldoutAB.target = _mapBonesFoldout; if (EditorGUILayout.BeginFadeGroup(_mapBonesFoldoutAB.faded)) { DrawMapBonesProperties(t, data); } EditorGUILayout.EndFadeGroup(); _sourceSkinFoldoutAB.target = EditorGUILayout.Foldout(_sourceSkinFoldoutAB.target, ("Reference skin: " + (data.ReferenceSMR == null? "none":data.ReferenceSMR.name)), true); if (EditorGUILayout.BeginFadeGroup(_sourceSkinFoldoutAB.faded)) { DrawReferenceSkinProperties(t, data); } EditorGUILayout.EndFadeGroup(); _sourceGeometryFoldout = EditorGUILayout.Foldout(_sourceGeometryFoldout, ("Source geometry: " + (data.SourceGeometryMF == null? "none":data.SourceGeometryMF.name))); _sourceGeometryFoldoutAB.target = _sourceGeometryFoldout; if (EditorGUILayout.BeginFadeGroup(_sourceGeometryFoldoutAB.faded)) { DrawSourceGeometryProperties(t, data); } EditorGUILayout.EndFadeGroup(); _resultFoldout = EditorGUILayout.Foldout(_resultFoldout, ("Result mesh: " + (data.ResultMesh == null? "none":data.ResultMesh.name))); _resultFoldoutAB.target = _resultFoldout; if (EditorGUILayout.BeginFadeGroup(_resultFoldoutAB.faded)) { DrawResultProperties(t, data); } EditorGUILayout.EndFadeGroup(); GUILayout.Space(6); if (EditorGUILayout.BeginFadeGroup(_paramFoldoutAB.faded)) { GUILayout.BeginHorizontal(); GUILayout.Label("Projection quality:"); int nQuality = EditorGUILayout.Popup(data.BakingQuality, data.BakingQualityNames); if (nQuality != data.BakingQuality) { data.BakingQuality = nQuality; ApplyChangesToScene(t); } GUILayout.EndHorizontal(); GUILayout.BeginHorizontal(); GUILayout.Label("Blur multiplier: " + data.BlurMultiplier.ToString("F2"), GUILayout.Width(120)); float nBlurMult = GUILayout.HorizontalSlider(data.BlurMultiplier, 0, 1f); if (data.BlurMultiplier != nBlurMult) { data.BlurMultiplier = nBlurMult; ApplyChangesToScene(t); } GUILayout.EndHorizontal(); GUILayout.BeginHorizontal(); GUILayout.Label("Blur iterations:" + data.BlurIterations.ToString(), GUILayout.Width(120)); int nIterations = (int)GUILayout.HorizontalSlider(data.BlurIterations, 0, 10); if (data.BlurIterations != nIterations) { data.BlurIterations = nIterations; ApplyChangesToScene(t); } GUILayout.EndHorizontal(); GUILayout.BeginHorizontal(); GUILayout.Label("Bone gizmo width:", GUILayout.Width(120)); float nBoneGizmoSize = GUILayout.HorizontalSlider(boneGizmoSize, 0.002f, 0.1f); if (nBoneGizmoSize != boneGizmoSize) { boneGizmoSize = nBoneGizmoSize; SceneView.RepaintAll(); } GUILayout.EndHorizontal(); } EditorGUILayout.EndFadeGroup(); GUILayout.BeginHorizontal(); _paramFoldout = GUILayout.Toggle(_paramFoldout, _paramFoldout? ResourceHolder.ParamIkonOn : ResourceHolder.ParamIkonOff, ResourceHolder.IkonStyle); _paramFoldoutAB.target = _paramFoldout; if (GUILayout.Button("Generate Skinning")) { GenerateFilter(); } GUILayout.EndHorizontal(); }
void DrawMapBonesProperties(SkinTools t, SkinToolsData data) { if (GUILayout.Button(ResourceHolder.AddIkon, ResourceHolder.IkonStyle)) { data.MapBones.Insert(0, new SkinToolsData.MapBone()); } for (int b = 0; b < data.MapBones.Count; b++) { GUILayout.BeginHorizontal(); Transform nTr = (Transform)EditorGUILayout.ObjectField(data.MapBones[b].Tr, typeof(Transform), true); if (data.MapBones[b].Tr != nTr) { data.MapBones[b].Tr = nTr; ApplyChangesToScene(t); } Texture2D nTex = (Texture2D)EditorGUILayout.ObjectField(data.MapBones[b].Map, typeof(Texture2D), true); if (data.MapBones[b].Map != nTex) { data.MapBones[b].Map = nTex; ApplyChangesToScene(t); } if (GUILayout.Button(ResourceHolder.UpIkon, ResourceHolder.IkonStyle)) { int prevIdx = b - 1; if (prevIdx < 0) { prevIdx = data.MapBones.Count - 1; } SkinToolsData.MapBone _prev = data.MapBones[prevIdx]; SkinToolsData.MapBone _this = data.MapBones[b]; data.MapBones[b] = _prev; data.MapBones[prevIdx] = _this; ApplyChangesToScene(t); } if (GUILayout.Button(ResourceHolder.DownIkon, ResourceHolder.IkonStyle)) { int nextIdx = b + 1; if (nextIdx >= data.MapBones.Count) { nextIdx = 0; } SkinToolsData.MapBone _next = data.MapBones[nextIdx]; SkinToolsData.MapBone _this = data.MapBones[b]; data.MapBones[b] = _next; data.MapBones[nextIdx] = _this; ApplyChangesToScene(t); } if (GUILayout.Button(ResourceHolder.DelIkon, ResourceHolder.IkonStyle)) { t.Data.MapBones.RemoveAt(b); ApplyChangesToScene(t); } GUILayout.EndHorizontal(); } }
void GenerateSkinning() { SkinTools t = target as SkinTools; SkinToolsData data = t.Data; bool referenceExist = data.ReferenceSMR != null; Vector3[] rVertices = data.SourceGeometryMF.sharedMesh.vertices; Vector3[] rNormals = data.SourceGeometryMF.sharedMesh.normals; Vector3[] rWorldVertices = new Vector3[rVertices.Length]; Vector2[] rMapVertices = data.SourceGeometryMF.sharedMesh.uv; Matrix4x4 smLTW = data.SourceGeometryMF.transform.localToWorldMatrix; Matrix4x4 tWTL = t.transform.worldToLocalMatrix; for (int v = 0; v < rVertices.Length; v++) { rWorldVertices[v] = smLTW.MultiplyPoint3x4(rVertices[v]); rVertices[v] = tWTL.MultiplyPoint3x4(rWorldVertices[v]); rNormals[v] = smLTW.MultiplyVector(rNormals[v]); rNormals[v] = tWTL.MultiplyVector(rNormals[v]); } data.ResultMesh = Instantiate(data.SourceGeometryMF.sharedMesh) as Mesh; string[] splittedPath = data.OutputMeshPath.Split("/.".ToCharArray()); string meshName = splittedPath[splittedPath.Length - 2]; data.ResultMesh.name = meshName; data.ResultMesh.vertices = rVertices; data.ResultMesh.normals = rNormals; data.ResultMesh.RecalculateBounds(); data.resultSMR.localBounds = new Bounds(data.ResultMesh.bounds.center, data.ResultMesh.bounds.size * 2); SourceSMRCollider _collider = null; SourceSMRCollider _icollider = null; BoneWeight[] existingWeights = null; Transform[] sourceBones = null; int[] sourceSMRTris = null; Ray[] frays = null; bool[] excludedTriangles = null; if (referenceExist) { _collider = new SourceSMRCollider(data.ReferenceSMR, false); _icollider = new SourceSMRCollider(data.ReferenceSMR, true); existingWeights = data.ReferenceSMR.sharedMesh.boneWeights; sourceBones = data.ReferenceSMR.bones; sourceSMRTris = data.ReferenceSMR.sharedMesh.triangles; excludedTriangles = new bool[data.ReferenceSMR.sharedMesh.triangles.Length / 3]; if (data.ReferenceSMRGeometry != null && data.ReferenceSMRGeometry.IsValid) { excludedTriangles = data.ReferenceSMRGeometry.ExcludedTris; } if (data.BakingQuality == 0) { frays = new Ray[ResourceHolder.Rays362.Length]; for (int i = 0; i < frays.Length; i++) { frays[i] = new Ray(Vector3.zero, ResourceHolder.Rays362[i]); } } else if (data.BakingQuality == 1) { frays = new Ray[ResourceHolder.Rays642.Length]; for (int i = 0; i < frays.Length; i++) { frays[i] = new Ray(Vector3.zero, ResourceHolder.Rays642[i]); } } else if (data.BakingQuality == 2) { frays = new Ray[ResourceHolder.Rays1002.Length]; for (int i = 0; i < frays.Length; i++) { frays[i] = new Ray(Vector3.zero, ResourceHolder.Rays1002[i]); } } } ExtBoneWeight[] ebws = new ExtBoneWeight[rWorldVertices.Length]; List <Transform> newBonesList = new List <Transform>(); for (int b = 0; b < data.MapBones.Count; b++) { newBonesList.Add(data.MapBones[b].Tr); } EditorUtility.DisplayProgressBar("Bake", "Baking vertices", 0); int progressPercent = 0; for (int v = 0; v < rWorldVertices.Length; v++) { ebws[v] = new ExtBoneWeight( ); if (data.SourceGeometry.HasUV0) { Vector2 uv = rMapVertices[v]; for (int b = 0; b < data.MapBones.Count; b++) { float val = data.MapBones[b].Map.GetPixelBilinear(uv.x, uv.y).grayscale; ebws[v].AddMask(data.MapBones[b].Tr, val); } } if (referenceExist) { RaycastHit hit = GetNearestHit(frays, _collider._Collider, _icollider._Collider, rWorldVertices[v], excludedTriangles); BoneWeight bwA = existingWeights [sourceSMRTris[hit.triangleIndex * 3]]; BoneWeight bwB = existingWeights [sourceSMRTris[hit.triangleIndex * 3 + 1]]; BoneWeight bwC = existingWeights [sourceSMRTris[hit.triangleIndex * 3 + 2]]; for (int i = 0; i < 4; i++) { Transform nbA = sourceBones[bwA.GetBoneIdx(i)]; Transform nbB = sourceBones[bwB.GetBoneIdx(i)]; Transform nbC = sourceBones[bwC.GetBoneIdx(i)]; if (!data.ReferenceSMRBones[nbA].Excluded) { if (!newBonesList.Contains(nbA)) { newBonesList.Add(nbA); } ebws[v].Add(nbA, bwA.GetWeight(i) * hit.barycentricCoordinate.x, 0); } if (!data.ReferenceSMRBones[nbB].Excluded) { if (!newBonesList.Contains(nbB)) { newBonesList.Add(nbB); } ebws[v].Add(nbB, bwB.GetWeight(i) * hit.barycentricCoordinate.y, 0); } if (!data.ReferenceSMRBones[nbC].Excluded) { if (!newBonesList.Contains(nbC)) { newBonesList.Add(nbC); } ebws[v].Add(nbC, bwC.GetWeight(i) * hit.barycentricCoordinate.z, 0); } } } float progress = v / (float)rWorldVertices.Length; int percent = Mathf.FloorToInt(progress * 100); if (progressPercent != percent) { progressPercent = percent; string progressBarName = string.Format("Bake {0}", data.ResultMesh.name); string progressInfo = string.Format("baking vertices {0} of {1} with {2} quality ", v, rWorldVertices.Length, data.BakingQualityNames[data.BakingQuality]); EditorUtility.DisplayProgressBar(progressBarName, progressInfo, progress); } } EditorUtility.ClearProgressBar(); BoneWeight[] newweights = new BoneWeight[rWorldVertices.Length]; Transform[] newBonesArray = newBonesList.ToArray(); for (int w = 0; w < ebws.Length; w++) { ebws[w].FillIndeces(newBonesArray); newweights[w] = ebws[w].GetClampedBW(); } data.resultSMR.bones = newBonesArray; Matrix4x4[] bindBones = new Matrix4x4[newBonesArray.Length]; for (int b = 0; b < newBonesArray.Length; b++) { bindBones[b] = newBonesArray[b].worldToLocalMatrix * t.transform.localToWorldMatrix; } data.ResultMesh.bindposes = bindBones; data.ResultMesh.boneWeights = newweights; if (referenceExist) { _collider.Destroy(); _icollider.Destroy(); } AssetDatabase.DeleteAsset(data.OutputMeshPath); AssetDatabase.CreateAsset(data.ResultMesh, data.OutputMeshPath); AssetDatabase.SaveAssets(); data.ResultMesh = AssetDatabase.LoadAssetAtPath(data.OutputMeshPath, typeof(Mesh)) as Mesh; data.resultSMR.sharedMesh = data.ResultMesh; data.UpdateResultInfo(); data.ApplyResultVisual(); }
void GenerateFilter() { SkinTools t = target as SkinTools; SkinToolsData data = t.Data; if (ResourceHolder == null) { EditorUtility.DisplayDialog("SkinTools", "Requared prefab SkinBakerResourcesHolder_SBRTSGJHKNBHD not found. \nPlease restore it or reimport SkinTools package. \n Operation canceled", "Ok"); return; } for (int b = 0; b < data.MapBones.Count; b++) { if (data.MapBones[b].Map == null) { EditorUtility.DisplayDialog("SkinTools", string.Format("Empty texture field at #{0} map bone. \nPlease assign texture or delete bone. \nOperation canceled.", b), "Ok"); return; } if (data.MapBones[b].Tr == null) { EditorUtility.DisplayDialog("Skin baker", string.Format("Empty transform field at #{0} map bone. Please assign bone transform or delete bone. Operation canceled.", b), "Ok"); return; } string p = AssetDatabase.GetAssetPath(data.MapBones[b].Map); TextureImporter ti = (TextureImporter)TextureImporter.GetAtPath(p); bool needReimport = false; if (ti.isReadable == false) { ti.isReadable = true; needReimport = true; } if (ti.alphaSource != TextureImporterAlphaSource.None) { ti.alphaSource = TextureImporterAlphaSource.None; needReimport = true; } if (needReimport) { Debug.LogFormat("{0} reimported", p); ti.SaveAndReimport(); } } if (data.SourceGeometryMF == null || data.SourceGeometryMF.sharedMesh == null) { EditorUtility.DisplayDialog("Skin Tools", "Source Geometry not found. Please assign Source Geometry field. Operation canseled", "Ok"); return; } GenerateSkinning(); if (data.BlurIterations > 0) { BlurPass(); } ApplyChangesToScene(t); }
void DrawResultProperties(SkinTools t, SkinToolsData data) { GUILayout.Label("path:" + data.OutputMeshPath); GUILayout.BeginHorizontal(); GUILayout.Label("select:", GUILayout.Width(45)); Mesh nOutputMesh = (Mesh)EditorGUILayout.ObjectField(data.ResultMesh, (typeof(Mesh)), false); if (nOutputMesh != data.ResultMesh) { string nPath = AssetDatabase.GetAssetPath(nOutputMesh); System.Type x = AssetDatabase.GetMainAssetTypeAtPath(nPath); if (x != typeof(UnityEngine.Mesh)) { EditorUtility.DisplayDialog("SkinTools", "Output mesh can not be part of prefab. Select other mesh or create new", "Ok"); return; } else { data.ResultMesh = nOutputMesh; data.OutputMeshPath = nPath; } ApplyChangesToScene(t); } if (GUILayout.Button("new", GUILayout.Width(40))) { string selectedFilePath = EditorUtility.SaveFilePanelInProject("Save mesh", "", "asset", "Please select a file to save mesh to"); if (!string.IsNullOrEmpty(selectedFilePath)) { Mesh nMesh = new Mesh(); nMesh.vertices = new Vector3[4]; AssetDatabase.CreateAsset(nMesh, selectedFilePath); data.OutputMeshPath = selectedFilePath; data.ResultMesh = AssetDatabase.LoadAssetAtPath(data.OutputMeshPath, typeof(Mesh)) as Mesh; ApplyChangesToScene(t); } } GUILayout.EndHorizontal(); GUILayout.BeginHorizontal(); GUILayout.Label("Affected bones:"); GUILayout.EndHorizontal(); for (int i = 0; i < data.ResultBones.Length; i++) { GUILayout.BeginHorizontal(); bool isSel = data.SelectedResultBone == i; GUILayout.Space(20); GUILayout.Label("#" + i.ToString(), GUILayout.Width(26)); bool nIsSel = GUILayout.Toggle(isSel, data.ResultBones[i].Tr.name, "Button", GUILayout.Width(160)); if (nIsSel != isSel) { if (nIsSel) { data.SelectedResultBone = i; } else { data.SelectedResultBone = -1; } data.ApplyResultVisual(); ApplyChangesToScene(t); } if (data.SelectedResultBone == i) { if (GUILayout.Button(ResourceHolder.MoveToExcludeIkon, ResourceHolder.IkonStyle)) { SkinToolsData.ReferenceSMRBonesClass rsmb = data.ReferenceSMRBones; if (rsmb != null) { SkinToolsData.ReferenceBone rb = data.ReferenceSMRBones[data.ResultBones[i].Tr]; if (rb != null) { rb.Excluded = true; } } GenerateFilter(); } if (GUILayout.Button(ResourceHolder.SelectBoneIkon, ResourceHolder.IkonStyle)) { Selection.activeGameObject = data.ResultBones[i].Tr.gameObject; } } GUILayout.EndHorizontal(); } }