//替换引用 public void replaceHandler(MClipElement toReplace, MClipElement toCompare) { MActorsManager MAM = form_Main.form_MAnimation.form_MActorList.actorsManager; //转移引用 for (int i1 = 0; i1 < MAM.Count(); i1++) { for (int i2 = 0; i2 < MAM[i1].Count(); i2++) { for (int i3 = 0; i3 < MAM[i1][i2].Count(); i3++) { for (int i4 = 0; i4 < MAM[i1][i2][i3].Count(); i4++) { for (int i5 = 0; i5 < MAM[i1][i2][i3][i4].Count(); i5++) { for (int i6 = 0; i6 < MAM[i1][i2][i3][i4][i5].Count(); i6++) { MFrameUnit unit = MAM[i1][i2][i3][i4][i5][i6]; if (unit is MFrameUnit_Bitmap) { MFrameUnit_Bitmap unitBitmap = (MFrameUnit_Bitmap)unit; if (unitBitmap.clipElement.Equals(toCompare)) { unitBitmap.clipElement = toReplace; } } } } } } } } }
private void button_lock_Click(object sender, EventArgs e) { if (form_MA.form_MFrameEdit.currentUnits.Count == 0) { return; } form_MA.historyManager.ReadyHistory(HistoryType.Action); bool makeLock = false; for (int i = 0; i < form_MA.form_MFrameEdit.currentUnits.Count; i++) { MFrameUnit clipElement = form_MA.form_MFrameEdit.currentUnits[i]; if (clipElement.isLocked) { makeLock = true; break; } } makeLock = !makeLock; for (int i = 0; i < form_MA.form_MFrameEdit.currentUnits.Count; i++) { MFrameUnit clipElement = form_MA.form_MFrameEdit.currentUnits[i]; clipElement.isLocked = makeLock; } form_MA.historyManager.AddHistory(HistoryType.Action); updateLevelLock(); form_MA.form_MFrameEdit.UpdateRegion_EditAndFrameLevel(); }
//µ÷Õû¹ö¶¯Ìõ£¬ÈÃÇÐƬ²ãÖÐÖ¸¶¨µÄµ¥ÔªÍêÕûÏÔʾ public bool showUnitInView(int id) { if (form_MA.form_MTimeLine == null || form_MA.form_MTimeLine.focusFrame == null || id < 0 || id >= form_MA.form_MTimeLine.focusFrame.Count()) { return(false); } float maxHeight = 0; float unitY = 0; float unitH = 0; for (int i = 0; i < form_MA.form_MTimeLine.focusFrame.Count(); i++) { MFrameUnit clip = form_MA.form_MTimeLine.focusFrame[i]; SizeF sizeI = clip.getTransformSize(zoomLevel_ClipsLevel); if (id == i) { unitY = maxHeight; unitH = sizeI.Height; } maxHeight += sizeI.Height + form_MA.LEVEL_GAP; } int maxHeightS = (int)maxHeight; int containerH = pictureBox_clipsLevel.Height; if (maxHeightS <= containerH || (vScrollBar_ClipsLevel.Maximum - 9) == 0) { return(false); } int scrollH = maxHeightS - containerH; float y = vScrollBar_ClipsLevel.Value * scrollH / (vScrollBar_ClipsLevel.Maximum - 9); int needChange = -1; if (unitY < y) { y = unitY; needChange = 0; } if (unitY + unitH > y + containerH) { y = unitY + unitH + form_MA.LEVEL_GAP - containerH; needChange = 1; } if (needChange < 0) { return(false); } if (y < 0) { y = 0; } Form_MAnimation.noScrollEvent = true; int newValue = (int)((y * (vScrollBar_ClipsLevel.Maximum - 9) + (scrollH - 1) * needChange) / scrollH); newValue = MathUtil.limitNumber(newValue, vScrollBar_ClipsLevel.Minimum, vScrollBar_ClipsLevel.Maximum - 9); vScrollBar_ClipsLevel.Value = newValue; Form_MAnimation.noScrollEvent = false; return(true); }
//返回使用情况 public virtual String getUsedInfor() { String s = ""; int number = 0; MActorsManager MAM = null; if (clipsManager.Equals(clipsManager.form_Main.form_MapImagesManager.MClipsManager)) { MAM = clipsManager.form_Main.form_MAnimation.form_MActorList.actorsManager; } else if (clipsManager.Equals(clipsManager.form_Main.animClipsManagerForExport)) { MAM = clipsManager.form_Main.animActorsManagerExport; } if (MAM == null) { return(s); } for (int i1 = 0; i1 < MAM.Count(); i1++) { for (int i2 = 0; i2 < MAM[i1].Count(); i2++) { for (int i3 = 0; i3 < MAM[i1][i2].Count(); i3++) { for (int i4 = 0; i4 < MAM[i1][i2][i3].Count(); i4++) { for (int i5 = 0; i5 < MAM[i1][i2][i3][i4].Count(); i5++) { for (int i6 = 0; i6 < MAM[i1][i2][i3][i4][i5].Count(); i6++) { MFrameUnit unit = MAM[i1][i2][i3][i4][i5][i6]; if (unit is MFrameUnit_Bitmap) { MFrameUnit_Bitmap unitBitmap = (MFrameUnit_Bitmap)unit; if (unitBitmap.clipElement.Equals(this)) { s += "" + MAM[i1].name + "->" + MAM[i1][i2].name + "->" + MAM[i1][i2][i3].name + "->" + MAM[i1][i2][i3][i4].name + "->第" + MAM[i1][i2][i3][i4][i5].timeBegin + "帧" + "->第" + MAM[i1][i2][i3][i4][i5][i6].GetID() + "个单元" + "\n"; number++; } } } } } } } } s += "共被使用了" + number + "次\n"; return(s); }
//返回是用次数 public virtual int getUsedTime() { int number = 0; MActorsManager MAM = null; MClipsManager clipsManagerM = clipsManager.form_Main.form_MAnimation.form_MImgsList.MClipsManager; Console.WriteLine("m:" + clipsManagerM.GetHashCode() + ",c:" + clipsManager.GetHashCode()); if (clipsManager.Equals(clipsManagerM)) { MAM = clipsManager.form_Main.form_MAnimation.form_MActorList.actorsManager; } else if (clipsManager.Equals(clipsManager.form_Main.animClipsManagerForExport)) { MAM = clipsManager.form_Main.animActorsManagerExport; } if (MAM == null) { return(0); } for (int i1 = 0; i1 < MAM.Count(); i1++) { for (int i2 = 0; i2 < MAM[i1].Count(); i2++) { for (int i3 = 0; i3 < MAM[i1][i2].Count(); i3++) { for (int i4 = 0; i4 < MAM[i1][i2][i3].Count(); i4++) { for (int i5 = 0; i5 < MAM[i1][i2][i3][i4].Count(); i5++) { for (int i6 = 0; i6 < MAM[i1][i2][i3][i4][i5].Count(); i6++) { MFrameUnit unit = MAM[i1][i2][i3][i4][i5][i6]; if (unit is MFrameUnit_Bitmap) { MFrameUnit_Bitmap unitBitmap = (MFrameUnit_Bitmap)unit; if (unitBitmap.clipElement != null && unitBitmap.clipElement.Equals(this)) { number++; } } } } } } } } return(number); }
//¸üвãËø¶¨×´Ì¬ public void updateLevelLock() { if (form_MA.form_MFrameEdit.currentUnits.Count == 0) { return; } bool makeLock = false; for (int i = 0; i < form_MA.form_MFrameEdit.currentUnits.Count; i++) { MFrameUnit clipElement = form_MA.form_MFrameEdit.currentUnits[i]; if (clipElement.isLocked) { makeLock = true; break; } } button_lock.BackgroundImage = makeLock ? global::Cyclone.Properties.Resources.level_lock_locked : global::Cyclone.Properties.Resources.level_lock_unclocked; }
//¸üвã¿É¼û״̬ public void updateLevelEye() { if (form_MA.form_MFrameEdit.currentUnits.Count == 0) { return; } bool makeVisible = false; for (int i = 0; i < form_MA.form_MFrameEdit.currentUnits.Count; i++) { MFrameUnit clipElement = form_MA.form_MFrameEdit.currentUnits[i]; if (clipElement.isVisible) { makeVisible = true; break; } } button_visible.BackgroundImage = makeVisible ? global::Cyclone.Properties.Resources.level_eye_on : global::Cyclone.Properties.Resources.level_eye_off; }
//(ÇÐƬ²ãͼƬ¿ò)ÉèÖÃÇÐƬ½¹µã public void clickClipsLevel(int cursorY) { if (form_MA.form_MTimeLine == null || form_MA.form_MTimeLine.focusFrame == null) { return; } float maxHeight = 0; for (int i = 0; i < form_MA.form_MTimeLine.focusFrame.Count(); i++)//×ÝÏòɨÃèËùÓÐÇÐƬ¸ß¶È { MFrameUnit clip = form_MA.form_MTimeLine.focusFrame[i]; maxHeight += clip.getTransformSize(zoomLevel_ClipsLevel).Height + form_MA.LEVEL_GAP; } //maxHeight *= zoomLevel_ClipsLevel; int containerH = imgClipsLevelBuf.Height; int maxHeightS = (int)maxHeight; int scrollH = maxHeightS > containerH ? maxHeightS - containerH : 0; cursorY += (vScrollBar_ClipsLevel.Maximum - 9) == 0 ? 0 : vScrollBar_ClipsLevel.Value * scrollH / (vScrollBar_ClipsLevel.Maximum - 9); maxHeight = 0; MFrameUnit focusedClipclip = null; for (int i = 0; i < form_MA.form_MTimeLine.focusFrame.Count(); i++)//×ÝÏòɨÃèËùÓÐÇÐƬ¸ß¶È { MFrameUnit clip = form_MA.form_MTimeLine.focusFrame[i]; SizeF clipBox = clip.getLastTransformSize(); if (MathUtil.inRegionCloseLeft(cursorY, maxHeight, maxHeight + (clipBox.Height + form_MA.LEVEL_GAP))) { focusedClipclip = clip; break; } maxHeight += (clipBox.Height + form_MA.LEVEL_GAP); } if (focusedClipclip != null) { if (ModifierKeys == Keys.Shift) { if (form_MA.form_MFrameEdit.currentUnits.Count == 1) { MFrameUnit startClip = form_MA.form_MFrameEdit.currentUnits[0]; int startID = startClip.GetID(); int endID = focusedClipclip.GetID(); form_MA.form_MFrameEdit.releaseFocusClips(); for (int i = Math.Min(startID, endID); i <= Math.Max(startID, endID); i++) { form_MA.form_MFrameEdit.addFocusClips(form_MA.form_MTimeLine.focusFrame[i], false); } } else { form_MA.form_MFrameEdit.releaseFocusClips(); form_MA.form_MFrameEdit.addFocusClips(focusedClipclip, false); } } else if (ModifierKeys == Keys.Control) { form_MA.form_MFrameEdit.addFocusClips(focusedClipclip, false, true); } else { form_MA.form_MFrameEdit.releaseFocusClips(); form_MA.form_MFrameEdit.addFocusClips(focusedClipclip, false); } form_MA.form_MFrameEdit.UpdateRegion_EditFrame(); UpdateRegion_FrameLevel(); form_MA.form_MConfig.checkUnitProperty(); } form_MA.historyManager.ReadyHistory(HistoryType.Action); }
private Image imgClipsLevelBuf = null;//ÇÐƬ²ãÏÔʾÇøÓò»º³å //(ÇÐƬ²ãͼƬ¿ò)Ë¢ÐÂÇÐƬ²ãͼƬ¿òÏÔʾÇøÓò public void UpdateRegion_FrameLevel() { if (pictureBox_clipsLevel.Height <= 0 || pictureBox_clipsLevel.Width <= 0) { return; } //µ÷Õû»º³å if (imgClipsLevelBuf == null || imgClipsLevelBuf.Width != pictureBox_clipsLevel.Width || imgClipsLevelBuf.Height != pictureBox_clipsLevel.Height) { imgClipsLevelBuf = new Bitmap(pictureBox_clipsLevel.Width, pictureBox_clipsLevel.Height); } //¼ÆËã×î´óÇÐƬ³ß´çÒÔµ÷Õû¹ö¶¯Ìõ //³ß´ç,ͬÈÝÆ÷¿ò´óС int containerW = imgClipsLevelBuf.Width; int containerH = imgClipsLevelBuf.Height; //»æÖƵ½»º³å Graphics gBuf = Graphics.FromImage(imgClipsLevelBuf); gBuf.Clear(Color.Transparent); if (form_MA != null && form_MA.form_MTimeLine != null && form_MA.form_MTimeLine.focusFrame != null) { //ɨÃèÇÐƬ£¬¼ÆË㻺³å´óС float maxWidth = 0; for (int i = 0; i < form_MA.form_MTimeLine.focusFrame.Count(); i++)//ºáÏòɨÃè×î´óÇÐƬ¿í¶È { MFrameUnit clip = form_MA.form_MTimeLine.focusFrame[i]; float wI = clip.getTransformSize(zoomLevel_ClipsLevel).Width; if (maxWidth < wI) { maxWidth = wI; } } float maxHeight = 0; for (int i = 0; i < form_MA.form_MTimeLine.focusFrame.Count(); i++)//×ÝÏòɨÃè×î´óÇÐƬ¸ß¶È { MFrameUnit clip = form_MA.form_MTimeLine.focusFrame[i]; maxHeight += clip.getLastTransformSize().Height + form_MA.LEVEL_GAP; } //µ÷Õû¹ö¶¯Ìõ int maxHeightS = (int)maxHeight; int scrollH = maxHeightS > containerH ? maxHeightS - containerH : 0; int x = 0; float y = (vScrollBar_ClipsLevel.Maximum - 9) == 0 ? 0 : vScrollBar_ClipsLevel.Value * scrollH / (vScrollBar_ClipsLevel.Maximum - 9); y = -y; //»æÖÆËùÓÐÇпé for (int i = 0; i < form_MA.form_MTimeLine.focusFrame.Count(); i++) { MFrameUnit clip = form_MA.form_MTimeLine.focusFrame[i]; SizeF clipBox = clip.getLastTransformSize(); clip.GdiDisplay(gBuf, x + clipBox.Width / 2 + form_MA.LEVEL_GAP, y + clipBox.Height / 2 + form_MA.LEVEL_GAP, zoomLevel_ClipsLevel, Form_MTimeLine.timePosition); if (clip.isLocked) { GraphicsUtil.fillRect(gBuf, x + form_MA.LEVEL_GAP, y + form_MA.LEVEL_GAP, clipBox.Width, clipBox.Height, 0x00FF00, 0x44); } if (!clip.isVisible) { GraphicsUtil.fillRect(gBuf, x + form_MA.LEVEL_GAP, y + form_MA.LEVEL_GAP, clipBox.Width, clipBox.Height, Consts.colorRed, 0x44); if (form_MA.form_MFrameEdit.currentUnits.Contains(clip)) { GraphicsUtil.drawRect(gBuf, x + form_MA.LEVEL_GAP, y + form_MA.LEVEL_GAP, clipBox.Width, clipBox.Height, Consts.colorBlue); } } else if (form_MA.form_MFrameEdit.currentUnits.Contains(clip)) { GraphicsUtil.fillRect(gBuf, x + form_MA.LEVEL_GAP, y + form_MA.LEVEL_GAP, clipBox.Width, clipBox.Height, Consts.colorBlue, 0x44); GraphicsUtil.drawRect(gBuf, x + form_MA.LEVEL_GAP, y + form_MA.LEVEL_GAP, clipBox.Width, clipBox.Height, Consts.colorBlue); } else { GraphicsUtil.drawRect(gBuf, x + form_MA.LEVEL_GAP, y + form_MA.LEVEL_GAP, clipBox.Width, clipBox.Height, Consts.colorDarkGray); } y += clipBox.Height + form_MA.LEVEL_GAP; } } gBuf.Dispose(); //»æÖƵ½ÆÁÄ» if (pictureBox_clipsLevel.Image == null || !pictureBox_clipsLevel.Image.Equals(imgClipsLevelBuf)) { pictureBox_clipsLevel.Image = imgClipsLevelBuf; } else { pictureBox_clipsLevel.Refresh(); } }
public void addFocusClips(MFrameUnit clipElement, bool focusItsCenter, bool allowDel) { if (clipElement == null) { return; } if (!currentUnits.Contains(clipElement)) { currentUnits.Add(clipElement); } else if (allowDel) { currentUnits.Remove(clipElement); } if (focusItsCenter) { imgEditCenterPixelX = (int)clipElement.posX; imgEditCenterPixelY = (int)clipElement.posY; } rememberCurrentUnitsCoor(); form_MA.form_MFrameLevel.updateLevelEye(); form_MA.form_MFrameLevel.updateLevelLock(); form_MA.showInfor("共选中了" + currentUnits.Count + "个单元"); }
//将切片增加到为焦点切片集合 public void addFocusClips(MFrameUnit clipElement, bool focusItsCenter) { addFocusClips(clipElement, focusItsCenter, false); }