Creating Various Types of Image ROIs by Drawing Lines, Rectangles or Eclipses
先前研究
C# 在PictureBox 畫線: 虛線, 點線, 點虛線
目前可以做到
1. 透過滑鼠兩點(button down and button up), 任意拉出一條 實線/虛線/點線 { L_i } where i=1,2,..,N
2. 線段可以設定粗細,顏色
3. 可以點選任意一組線段L_i, 進行整條線段拖拉動作
3. 可以修改任意一組L_i線段的標籤位置
4. 可刪除任意一組L_i
-----------------------------------------------------------------------------------
接下來, 想要做到以下新增功能:
1. 線段/ 矩形/ 圓形, 這三種都可以透過滑鼠兩點(button down and button up)來繪製
1.1 線段: 起點, 終點, 這兩個端點皆以正方形結尾, 方便之後用滑鼠拖拉修改長度
1.2 矩形: 左上角點, 右下角點
矩形邊上有八個控制點
1.3 圓形(橢圓形): 最小包覆圓的矩形之左上角點, 右下角點
-----------------------------------------------------------------------------------
2 移動物件
定義物件拖拉狀態 DragHandle,
其中NoHandle未點選, Inside 在矩形範圍內, OnLine在線上
public enum DragHandle
{
NoHandle = 0,
Inside = 1,
North = 2,
East = 3,
South = 4,
West = 5,
NorthWest = 6,
SouthWest = 7,
NorthEast = 8,
SouthEast = 9,
OnLine = 10
}
2.1 移動線段: 當滑鼠移動時, 停在線上但不在端點(起點或終點), 滑鼠變成十字箭頭表示可移動
滑鼠變成手勢表示移動中
2.2 移動矩形: 當滑鼠停在矩形邊上, 但不在8個端點上時(東西南北和左上/右上/左下/右下), 滑鼠變成十字箭頭表示可移動
2.3 移動圓形: 當滑鼠停在圓形邊上, 但不在8個端點上時(東西南北和左上/右上/左下/右下), 滑鼠變成十字箭頭表示可移動
-----------------------------------------------------------------------------------
3. 修改尺寸功能
3.1 線段: 當滑鼠在端點(起點或終點), 若靠近起點, 則以目前滑鼠位置變化量去更新起點; 反之更新終點
3.2 矩形: 8方位的點定義如下
當滑鼠在東方向點, 以滑鼠變化量更新紅色圈圈座標
當滑鼠在西方向點, 以滑鼠變化量更新紅色圈圈座標
當滑鼠在北方向點, 以滑鼠變化量更新紅色圈圈座標
當滑鼠在南方向點, 以滑鼠變化量更新紅色圈圈座標
當滑鼠在右上角點, 以滑鼠變化量更新紅色圈圈座標
調整大小時須注意
1 左邊和右邊上的端點不可以互相交換
2. 上面和下面的端點亦不可以交換
3. 一旦左邊和右邊上的端點重疊, 允許往左拖拉(左邊上的點)
4. 一旦上面和下面邊線的端點重疊, 允許往上托拉(上面邊線上的點)
-----------------------------------------------------------------------------------
下圖有上下圖層概念, 目前不打算加入這功能
註: 有圖層有個好處, 檢查滑鼠在圖形內, 可以從最上層開始檢查,
一旦符合就可以跳開, 不用檢查全部物件
留言列表