パタン編集オーバレイクラス

Namespace: FVIL.GDI
Assembly: FVILbasic (in FVILbasic.dll) Version: 3.1.0.0 (3.1.0.17)

Syntax

C#
[SerializableAttribute]
public sealed class CFviDrawPatternModify : CFviOverlay
Visual Basic
<SerializableAttribute>
Public NotInheritable Class CFviDrawPatternModify
	Inherits CFviOverlay

Remarks

パタン画像のマスク値をマウス操作で編集する為のオーバレイです。 表示対象画像が CFviPattern の時のみ有効です。



初期値と範囲:
プロパティ初期値範囲備考
Activefalsefalse/true マウス操作活性化属性です。 パタン画像のマスク編集を行う際は true です。 表示のみ行う際は false です。
Enablefalsefalse/true 可視属性です。 編集領域を表す矩形の表示のみを行う際に、上位側のアプリケーションで true に設定してください。
Scalingtruetrue のみ 伸縮属性です。 編集領域を表す矩形を画像座標で描画しています。 false にする事は想定していません。
ScalingModeFVIL.GDI.ScalingMode.CenterCenter のみ サブピクセル計算に影響します。 変更するとアクセス違反を起こす可能性がありますので変更しないでください。
MaskBitFVIL.Data.Pattern.MASK 以下のいずれか
0x01: MASK
0x02: ESSENTIAL
0x03: ALL
編集対象のマスクビットを示します。
MaskCursorModeFVIL.GDI.MaskCursorMode.WriteWrite/Erase マウスが左クリックされた時に MaskBit に示された値を書き込むか消去するかを示します。 マウスの右クリックで動作が反転します。
MaskCursorSize1,1Width,Height がそれぞれ1 以上 マスク編集領域を示す矩形のサイズです。 マウスカーソル位置を含む ±MaskCursorSize の範囲が編集対象になります。
ColorMask赤(R=0xFF, G=0x00, B=0x00)有効な色 マスク部分の編集時のカーソル色を表します。 CFviDisplay クラスの OverlayPatternModify から使用する場合は、 MaskColor と連動します。
ColorEssential緑(R=0x00, G=0xFF, B=0x00)有効な色 不可欠部分の編集時のカーソル色を表します。 CFviDisplay クラスの OverlayPatternModify から使用する場合は、 EssentialMaskColor と連動します。

このオーバレイで描画される図形は、 下記のように Figures 配列に格納されていますが、 将来的に配列の内容は変更される可能性があります。 この初期化内容に依存したプログラムを作らないようにしてください。 また、この配列をクリアされることを想定していません。

配列の初期化内容:
プロパティ初期値範囲備考
Figures[0]CFviGdiRectangle※インスタンスの差し替えは想定していません。登録位置の矩形を表す図形です。
Figures[1]CFviGdiPoint※インスタンスの差し替えは想定していません。基準点を表す図形です。

Examples

スクリーンショット:



フォームに貼り付けた CFviImageView を介してパタン編集を行う例を示します。
上図左側の PropertyGrid コントロールには、 CFviImageViewDisplay プロパティから取得した CFviDisplay クラスのインスタンスを表示していますが この処理は任意です。



マスクと不可欠部分の可視属性の設定:
下記サンプルコードの OnLoad 内で、 CFviDisplay クラスの MaskEnableEssentialMaskEnabletrue を設定して、 現在表示中のパタン画像のマスクビットを可視化しています。 上図の赤い塗りつぶしがマスク部分、緑の塗りつぶしが不可欠部分です。 これらの色は、 CFviDisplay クラスの MaskColorEssentialMaskColor で変更できます。



パタン編集オーバレイ表示切替:
下記サンプルコードの toolPatternModify_Click 関数内で、このオーバレイの表示切り替えを行っています。 上図のように赤い矩形の枠が表示されます。



パタン編集対象ビット設定:
マウスがクリックされたときに ON/OFF するパタン画像のマスク値を設定します。 下記サンプルコードの以下の関数の処理をご参照ください。

  • toolModeMask_Click
  • toolModeEssential_Click
  • toolModeAll_Click
マスク部分を編集する場合は MaskBitFVIL.Data.Pattern.MaskBit.MASK を設定し、 不可欠部分を編集する場合は MaskBitFVIL.Data.Pattern.MaskBit.ESSENTIAL を設定します。 両方同時に編集する場合は MaskBit に 論理和( FVIL.Data.Pattern.MaskBit.MASK|FVIL.Data.Pattern.MaskBit.ESSENTIAL )を設定します。 現在のところマスク部分と不可欠部分のみですので、 FVIL.Data.Pattern.MaskBit.ALL を設定した場合と同様です。



カーソルサイズの設定:
下記サンプルコードの toolCursorSize_SelectedIndexChanged 関数内で編集領域(上図の赤い矩形の枠)のサイズを設定しています。 マウス位置±MaskCursorSize の範囲が編集対象になります。



カーソル色の設定:
サンプルコードには示していませんが ColorMaskColorEssential で変更できます。 但し、Display プロパティを介して使用する場合は、 MaskColorEssentialMaskColor を設定したときに上書きされます。




ソースコード:
C# Copy imageCopy
// $Revision: 1.2 $

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.IO;

namespace User.SampleCode.GDI
{
    public partial class PatternModifyForm : Form
    {
        /// <summary>
        /// コンストラクタ.
        /// </summary>
        public PatternModifyForm()
        {
            InitializeComponent();
        }

        /// <summary>
        /// フォームロード時の初期化処理.
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void OnLoad(object sender, EventArgs e)
        {
            // (任意) ImageView.Display プロパティの表示/編集用.
            propertyGrid1.SelectedObject = ImageView.Display;

            // 編集対象パタンの読み込み.
            FVIL.Data.CFviPattern pattern = new FVIL.Data.CFviPattern(
                Path.Combine(Program.DataDir, "fvc06_UC8_parts.pat")
                );

            // 編集対象パタンの設定.
            ImageView.Image = pattern;

            // マスクと不可欠部分の可視属性. (※デザイン時設定も可能)
            ImageView.Display.MaskEnable = true;
            ImageView.Display.EssentialMaskEnable = true;

            // その他の処理.
            toolCursorSize.SelectedIndex = 0;
        }

        /// <summary>
        /// パタン編集オーバレイ表示切替.
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void toolPatternModify_Click(object sender, EventArgs e)
        {
            ImageView.Display.OverlayPatternModify.Active = true;
            ImageView.Refresh();
        }

        /// <summary>
        /// パタン編集対象ビット設定 (マスク部分)
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void toolModeMask_Click(object sender, EventArgs e)
        {
            ImageView.Display.OverlayPatternModify.MaskBit =
                FVIL.Data.Pattern.MaskBit.MASK;
            ImageView.Refresh();
        }

        /// <summary>
        /// パタン編集対象ビット設定 (不可欠部分)
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void toolModeEssential_Click(object sender, EventArgs e)
        {
            ImageView.Display.OverlayPatternModify.MaskBit =
                FVIL.Data.Pattern.MaskBit.ESSENTIAL;
            ImageView.Refresh();
        }

        /// <summary>
        /// パタン編集対象ビット設定 (マスク部分と不可欠部分)
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void toolModeAll_Click(object sender, EventArgs e)
        {
            ImageView.Display.OverlayPatternModify.MaskBit =
                FVIL.Data.Pattern.MaskBit.MASK|
                FVIL.Data.Pattern.MaskBit.ESSENTIAL;
            ImageView.Refresh();
        }

        /// <summary>
        /// カーソルサイズの設定.
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void toolCursorSize_SelectedIndexChanged(object sender, EventArgs e)
        {
            try
            {
                string[] values = toolCursorSize.SelectedItem.ToString().Split(new char[] { ',' }, 2);
                Size size = new Size(int.Parse(values[0]), int.Parse(values[1]));
                ImageView.Display.OverlayPatternModify.MaskCursorSize = size;
                ImageView.Refresh();
            }
            catch (System.Exception)
            {
            }
        }

        /// <summary>
        /// (任意) 画像ビューの表示更新時の処理.
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void ImageView_Paint(object sender, PaintEventArgs e)
        {
            // プロパティグリッドを更新します.
            propertyGrid1.Refresh();
        }

        /// <summary>
        /// (任意) プロパティグリッドの値変更時の処理.
        /// </summary>
        /// <param name="s"></param>
        /// <param name="e"></param>
        private void propertyGrid1_PropertyValueChanged(object s, PropertyValueChangedEventArgs e)
        {
            // 画像ビューを表示更新します.
            ImageView.Refresh();
        }
    }
}


Visual Basic Copy imageCopy
' $Revision: 1.1 $

Imports System.Collections.Generic
Imports System.ComponentModel
Imports System.Data
Imports System.Drawing
Imports System.Text
Imports System.Windows.Forms
Imports System.IO

Namespace SampleCode.GDI
    Public Partial Class PatternModifyForm
        Inherits Form
        ''' <summary>
        ''' コンストラクタ.
        ''' </summary>
        Public Sub New()
            InitializeComponent()
        End Sub

        ''' <summary>
        ''' フォームロード時の初期化処理.
        ''' </summary>
        ''' <param name="sender"></param>
        ''' <param name="e"></param>
        Private Overloads Sub OnLoad(sender As Object, e As EventArgs)
            ' (任意) ImageView.Display プロパティの表示/編集用.
            propertyGrid1.SelectedObject = ImageView.Display

            ' 編集対象パタンの読み込み.
            Dim pattern As New FVIL.Data.CFviPattern(Path.Combine(Program.DataDir, "fvc06_UC8_parts.pat"))

            ' 編集対象パタンの設定.
            ImageView.Image = pattern

            ' マスクと不可欠部分の可視属性. (※デザイン時設定も可能)
            ImageView.Display.MaskEnable = True
            ImageView.Display.EssentialMaskEnable = True

            ' その他の処理.
            toolCursorSize.SelectedIndex = 0
        End Sub

        ''' <summary>
        ''' パタン編集オーバレイ表示切替.
        ''' </summary>
        ''' <param name="sender"></param>
        ''' <param name="e"></param>
        Private Sub toolPatternModify_Click(sender As Object, e As EventArgs)
            ImageView.Display.OverlayPatternModify.Active = True
            ImageView.Refresh()
        End Sub

        ''' <summary>
        ''' パタン編集対象ビット設定 (マスク部分)
        ''' </summary>
        ''' <param name="sender"></param>
        ''' <param name="e"></param>
        Private Sub toolModeMask_Click(sender As Object, e As EventArgs)
            ImageView.Display.OverlayPatternModify.MaskBit = FVIL.Data.Pattern.MaskBit.MASK
            ImageView.Refresh()
        End Sub

        ''' <summary>
        ''' パタン編集対象ビット設定 (不可欠部分)
        ''' </summary>
        ''' <param name="sender"></param>
        ''' <param name="e"></param>
        Private Sub toolModeEssential_Click(sender As Object, e As EventArgs)
            ImageView.Display.OverlayPatternModify.MaskBit = FVIL.Data.Pattern.MaskBit.ESSENTIAL
            ImageView.Refresh()
        End Sub

        ''' <summary>
        ''' パタン編集対象ビット設定 (マスク部分と不可欠部分)
        ''' </summary>
        ''' <param name="sender"></param>
        ''' <param name="e"></param>
        Private Sub toolModeAll_Click(sender As Object, e As EventArgs)
            ImageView.Display.OverlayPatternModify.MaskBit = FVIL.Data.Pattern.MaskBit.MASK Or FVIL.Data.Pattern.MaskBit.ESSENTIAL
            ImageView.Refresh()
        End Sub

        ''' <summary>
        ''' カーソルサイズの設定.
        ''' </summary>
        ''' <param name="sender"></param>
        ''' <param name="e"></param>
        Private Sub toolCursorSize_SelectedIndexChanged(sender As Object, e As EventArgs)
            Try
                Dim values As String() = toolCursorSize.SelectedItem.ToString().Split(New Char() {","C}, 2)
                Dim size As New Size(Integer.Parse(values(0)), Integer.Parse(values(1)))
                ImageView.Display.OverlayPatternModify.MaskCursorSize = size
                ImageView.Refresh()
            Catch generatedExceptionName As System.Exception
            End Try
        End Sub

        ''' <summary>
        ''' (任意) 画像ビューの表示更新時の処理.
        ''' </summary>
        ''' <param name="sender"></param>
        ''' <param name="e"></param>
        Private Sub ImageView_Paint(sender As Object, e As PaintEventArgs)
            ' プロパティグリッドを更新します.
            propertyGrid1.Refresh()
        End Sub

        ''' <summary>
        ''' (任意) プロパティグリッドの値変更時の処理.
        ''' </summary>
        ''' <param name="s"></param>
        ''' <param name="e"></param>
        Private Sub propertyGrid1_PropertyValueChanged(s As Object, e As PropertyValueChangedEventArgs)
            ' 画像ビューを表示更新します.
            ImageView.Refresh()
        End Sub
    End Class
End Namespace

Inheritance Hierarchy

System..::..Object
FVIL..::..CFviObject
FVIL.GDI..::..CFviOverlay
FVIL.GDI..::..CFviDrawPatternModify

See Also