四角形の中心座標の検出
Namespace: FVIL.CaliperAssembly: FVILbasic (in FVILbasic.dll) Version: 3.1.0.0 (3.1.0.17)
Syntax
C# |
---|
public static CFviCaliperRectangle Rectangle( CFviLine lineAB, CFviLine lineBC, CFviLine lineCD, CFviLine lineDA ) |
Visual Basic |
---|
Public Shared Function Rectangle ( lineAB As CFviLine, lineBC As CFviLine, lineCD As CFviLine, lineDA As CFviLine ) As CFviCaliperRectangle |
Parameters
- lineAB
- Type: FVIL.Data..::..CFviLine
辺ABの直線
- lineBC
- Type: FVIL.Data..::..CFviLine
辺BCの直線
- lineCD
- Type: FVIL.Data..::..CFviLine
辺CDの直線
- lineDA
- Type: FVIL.Data..::..CFviLine
辺DAの直線
Return Value
Type: CFviCaliperRectangle4つの直線が作る四角形の中心座標と長辺・短辺の長さを求めます。
■ 戻り値(CFviCaliperRectangle)の各メンバ
長辺と短辺を格納する Long1 と Short1 は、 四角形の辺ABと辺BCの長さを比較して長い方が Long1 に格納され、短い方は Short1 に格納されます。 また、Long2 と Short2 については Long1 に辺ABが入った場合には Long2 は 辺CD、 Short2 には辺DAのように辺ABと辺CD、辺BCと辺DAの向かい合う辺が対応して Long と Short に格納されます。
Long1 | 四角形の辺ABと辺BCの長さを比較して長い方 |
Short1 | 四角形の辺ABと辺BCの長さを比較して短い方 |
Long2 | Long1 と向かい合う辺 |
Short2 | Short1 と向かい合う辺 |
Center | 長方形の中心座標 |
正常に実行できなかった場合は例外を発行します。 例外の原因と発生位置を特定するには、発行された例外クラスの ErrorCode メンバと Function メンバを参照してください。
エラーコード:
値 | ErrorCode メンバ | 内容 |
---|---|---|
51 | FVIL.ErrorCode.LICENSE_ERROR | ライセンスキーが見つからない為、実行できません。 または、 FVIL._SetUp.InitVisionLibrary が実行されていません。 |
11 | FVIL.ErrorCode.INVALID_PARAMETER | パラメータに誤りがあります。 |
29 | FVIL.ErrorCode.NOT_CALCULABLE | 計算不可能です。 |
Examples
C# | Copy |
---|---|
// $Revision: 1.3 $ using System; using System.Collections.Generic; using System.Text; using System.Drawing; using fvalgcli; // FvPluginXXXX attribute requires fvalgcli namespace User.SampleCode { public partial class Caliper { /// <summary> /// 四角形の中心座標の検出の測定. /// </summary> /// <remarks> /// FVIL.Caliper.Function.Rectangle(FVIL.Data.CFviLine,FVIL.Data.CFviLine,FVIL.Data.CFviLine,FVIL.Data.CFviLine) /// </remarks> [FvPluginExecute] public void Rectangle_linex4() { // 1) 4つの直線の生成. FVIL.Data.CFviLine line1 = new FVIL.Data.CFviLine( 0.3, 1.0, -100); FVIL.Data.CFviLine line2 = new FVIL.Data.CFviLine(-0.5, 1.0, 10); FVIL.Data.CFviLine line3 = new FVIL.Data.CFviLine( 0.5, 1.0, -280); FVIL.Data.CFviLine line4 = new FVIL.Data.CFviLine(-0.7, 1.0, -30); // 2) 計測実行. FVIL.Caliper.CFviCaliperRectangle rect1 = FVIL.Caliper.Function.Rectangle(line1, line2, line3, line4); // 確認用. { // 画像、描画表示クラス、オーバーレイのインスタンスの生成. FVIL.Data.CFviImage image = new FVIL.Data.CFviImage(320, 240, FVIL.ImageType.UC8, 1); FVIL.GDI.CFviDisplay display = new FVIL.GDI.CFviDisplay(); FVIL.GDI.CFviOverlay overlay = new FVIL.GDI.CFviOverlay(); { // 描画図形の生成. // 補助線(四角形の各辺の線分) FVIL.Data.CFviLineSegment ls_bottom, ls_top, ls_right, ls_left; { FVIL.Data.CFviPoint cp_12 = FVIL.Caliper.Function.CrossPoint(line1, line2); FVIL.Data.CFviPoint cp_14 = FVIL.Caliper.Function.CrossPoint(line1, line4); FVIL.Data.CFviPoint cp_32 = FVIL.Caliper.Function.CrossPoint(line3, line2); FVIL.Data.CFviPoint cp_34 = FVIL.Caliper.Function.CrossPoint(line3, line4); ls_bottom = new FVIL.Data.CFviLineSegment(cp_32, cp_34); ls_top = new FVIL.Data.CFviLineSegment(cp_12, cp_14); ls_right = new FVIL.Data.CFviLineSegment(cp_12, cp_32); ls_left = new FVIL.Data.CFviLineSegment(cp_14, cp_34); } System.Collections.Generic.List<FVIL.GDI.CFviGdiLineSegment> glinesegs = new List<FVIL.GDI.CFviGdiLineSegment>(); glinesegs.Add(new FVIL.GDI.CFviGdiLineSegment(ls_bottom)); glinesegs.Add(new FVIL.GDI.CFviGdiLineSegment(ls_top)); glinesegs.Add(new FVIL.GDI.CFviGdiLineSegment(ls_right)); glinesegs.Add(new FVIL.GDI.CFviGdiLineSegment(ls_left)); foreach (FVIL.GDI.CFviGdiLineSegment glineseg in glinesegs) { glineseg.Pen.Color = Color.Red; glineseg.Pen.Style = FVIL.GDI.PenStyle.Solid; glineseg.Pen.Width = 1; } // 結果点. FVIL.GDI.CFviGdiPoint gcenter = new FVIL.GDI.CFviGdiPoint(rect1.Center); gcenter.Pen.Color = Color.Red; gcenter.Pen.Width = 4; // 入力線. System.Collections.Generic.List<FVIL.GDI.CFviGdiLine> glines = new List<FVIL.GDI.CFviGdiLine>(); glines.Add(new FVIL.GDI.CFviGdiLine(line1)); glines.Add(new FVIL.GDI.CFviGdiLine(line2)); glines.Add(new FVIL.GDI.CFviGdiLine(line3)); glines.Add(new FVIL.GDI.CFviGdiLine(line4)); foreach (FVIL.GDI.CFviGdiLine gline in glines) { gline.Pen.Color = Color.Green; gline.Pen.Style = FVIL.GDI.PenStyle.Dot; gline.Pen.Width = 1; } // 描画図形の追加. overlay.Figures.Add(gcenter); foreach (FVIL.GDI.CFviGdiLineSegment glineseg in glinesegs) { overlay.Figures.Add(glineseg); } foreach (FVIL.GDI.CFviGdiLine gline in glines) { overlay.Figures.Add(gline); } overlay.Enable = true; } // 画像表示クラスへの追加. display.Overlays.Add(overlay); display.Image = image; display.DisplayRect = image.Window; // 描画イメージの保存. FVIL.Data.CFviImage dstimage = new FVIL.Data.CFviImage(); display.SaveImage(dstimage); FVIL.File.Function.SaveImageFile(Defs.ResultDir + "/Caliper.Rectangle_linex4.png", dstimage); } } } } |
Visual Basic | Copy |
---|---|
' $Revision: 1.1 $ Imports System.Collections.Generic Imports System.Text Imports System.Drawing Imports fvalgcli ' FvPluginXXXX attribute requires fvalgcli Namespace SampleCode Public Partial Class Caliper ''' <summary> ''' 四角形の中心座標の検出の測定. ''' </summary> ''' <remarks> ''' FVIL.Caliper.Function.Rectangle(FVIL.Data.CFviLine,FVIL.Data.CFviLine,FVIL.Data.CFviLine,FVIL.Data.CFviLine) ''' </remarks> <FvPluginExecute> _ Public Sub Rectangle_linex4() ' 1) 4つの直線の生成. Dim line1 As New FVIL.Data.CFviLine(0.3, 1.0, -100) Dim line2 As New FVIL.Data.CFviLine(-0.5, 1.0, 10) Dim line3 As New FVIL.Data.CFviLine(0.5, 1.0, -280) Dim line4 As New FVIL.Data.CFviLine(-0.7, 1.0, -30) ' 2) 計測実行. Dim rect1 As FVIL.Caliper.CFviCaliperRectangle = FVIL.Caliper.[Function].Rectangle(line1, line2, line3, line4) ' 確認用. If True Then ' 画像、描画表示クラス、オーバーレイのインスタンスの生成. Dim image As New FVIL.Data.CFviImage(320, 240, FVIL.ImageType.UC8, 1) Dim display As New FVIL.GDI.CFviDisplay() Dim overlay As New FVIL.GDI.CFviOverlay() If True Then ' 描画図形の生成. ' 補助線(四角形の各辺の線分) Dim ls_bottom As FVIL.Data.CFviLineSegment, ls_top As FVIL.Data.CFviLineSegment, ls_right As FVIL.Data.CFviLineSegment, ls_left As FVIL.Data.CFviLineSegment If True Then Dim cp_12 As FVIL.Data.CFviPoint = FVIL.Caliper.[Function].CrossPoint(line1, line2) Dim cp_14 As FVIL.Data.CFviPoint = FVIL.Caliper.[Function].CrossPoint(line1, line4) Dim cp_32 As FVIL.Data.CFviPoint = FVIL.Caliper.[Function].CrossPoint(line3, line2) Dim cp_34 As FVIL.Data.CFviPoint = FVIL.Caliper.[Function].CrossPoint(line3, line4) ls_bottom = New FVIL.Data.CFviLineSegment(cp_32, cp_34) ls_top = New FVIL.Data.CFviLineSegment(cp_12, cp_14) ls_right = New FVIL.Data.CFviLineSegment(cp_12, cp_32) ls_left = New FVIL.Data.CFviLineSegment(cp_14, cp_34) End If Dim glinesegs As System.Collections.Generic.List(Of FVIL.GDI.CFviGdiLineSegment) = New List(Of FVIL.GDI.CFviGdiLineSegment)() glinesegs.Add(New FVIL.GDI.CFviGdiLineSegment(ls_bottom)) glinesegs.Add(New FVIL.GDI.CFviGdiLineSegment(ls_top)) glinesegs.Add(New FVIL.GDI.CFviGdiLineSegment(ls_right)) glinesegs.Add(New FVIL.GDI.CFviGdiLineSegment(ls_left)) For Each glineseg As FVIL.GDI.CFviGdiLineSegment In glinesegs glineseg.Pen.Color = Color.Red glineseg.Pen.Style = FVIL.GDI.PenStyle.Solid glineseg.Pen.Width = 1 Next ' 結果点. Dim gcenter As New FVIL.GDI.CFviGdiPoint(rect1.Center) gcenter.Pen.Color = Color.Red gcenter.Pen.Width = 4 ' 入力線. Dim glines As System.Collections.Generic.List(Of FVIL.GDI.CFviGdiLine) = New List(Of FVIL.GDI.CFviGdiLine)() glines.Add(New FVIL.GDI.CFviGdiLine(line1)) glines.Add(New FVIL.GDI.CFviGdiLine(line2)) glines.Add(New FVIL.GDI.CFviGdiLine(line3)) glines.Add(New FVIL.GDI.CFviGdiLine(line4)) For Each gline As FVIL.GDI.CFviGdiLine In glines gline.Pen.Color = Color.Green gline.Pen.Style = FVIL.GDI.PenStyle.Dot gline.Pen.Width = 1 Next ' 描画図形の追加. overlay.Figures.Add(gcenter) For Each glineseg As FVIL.GDI.CFviGdiLineSegment In glinesegs overlay.Figures.Add(glineseg) Next For Each gline As FVIL.GDI.CFviGdiLine In glines overlay.Figures.Add(gline) Next overlay.Enable = True End If ' 画像表示クラスへの追加. display.Overlays.Add(overlay) display.Image = image display.DisplayRect = image.Window ' 描画イメージの保存. Dim dstimage As New FVIL.Data.CFviImage() display.SaveImage(dstimage) FVIL.File.[Function].SaveImageFile(Defs.ResultDir & "/Caliper.Rectangle_linex4.png", dstimage) End If End Sub End Class End Namespace |
Exceptions
Exception | Condition |
---|---|
FVIL..::..CFviException | この例外の原因については、上記のエラーコード表をご参照ください。 |