1.線線之間夾角弧度值
dev_set_color ('green')
dev_set_line_width (1)
draw_line (3600, Row1, Column1, Row2, Column2)
gen_region_line (RegionLines, Row1, Column1, Row2, Column2)
draw_line (3600, Row11, Column11, Row21, Column21)
gen_region_line (RegionLines1, Row11, Column11, Row21, Column21)
angle_ll (Row1, Column1, Row2, Column2, Row11, Column11, Row21, Column21, Angle)
設置繪畫顏色和線條寬度
然后用draw_line繪畫第一條線
這里要知道繪畫的起點和終點
Row1,Column1–起點
Row2,Column2–終點
繪畫的第二條線的起點和終點如下
Row11,Column11–起點
Row21,Column21–終點
在使用angle_ll獲得兩線夾角的弧度值Angle
在由下面換算成角度
hv_Angle = 1.0 * Angle/3.14 *360;//角度與弧度換算
halcon中繪畫的第二條線與坐標正向橫軸的夾角弧度值
用以下算子計算
angle_lx (Row11, Column11, Row21, Column21, Angle1)
2.線線之間的交點
找到第一條線和第二條線的交點並且顯示出來
用紅色的十字叉顯示出來
intersection_ll (Row1, Column1, Row2, Column2, Row11, Column11, Row21, Column21, Row, Column, IsParallel)
dev_set_color ('red')
dev_set_line_width (5)
gen_cross_contour_xld (Cross, Row, Column, 100, 0.785398)
效果如下圖所示
3.點到線的距離
繪畫第三條直線,利用前面的交點通過算子計算
點到線的距離,並且打印出來
dev_set_color ('green')
dev_set_line_width (1)
draw_line (3600, Row12, Column12, Row22, Column22)
gen_region_line (RegionLines2, Row12, Column12, Row22, Column22)
distance_pl (Row, Column, Row12, Column12, Row22, Column22, Distance)
set_tposition (3600, Row, Column)
write_string (3600, Distance)
4.點到點之間的距離
求出第二條線和第三條線的交點2
與之前第一條線和第二條線的交點1
通過算子求點到點的距離
intersection_ll (Row11, Column11, Row21, Column21, Row12, Column12, Row22, Column22, Row2, Column2, IsParallel)
dev_set_color ('red')
dev_set_line_width (5)
gen_cross_contour_xld (Cross1, Row2, Column2, 100, 0.785398)
distance_pp (Row1, Column1, Row2, Column2, Distance1)
dev_set_color ('green')
dev_set_line_width (1)
set_tposition (3600, Row2, Column2)
write_string (3600, Distance1)
效果如下圖所示
以上算子較為常用,我們熟練即可。
5.halcon總操作代碼如下
dev_set_color ('green')
dev_set_line_width (1)
draw_line (3600, Row1, Column1, Row2, Column2)
gen_region_line (RegionLines, Row1, Column1, Row2, Column2)
draw_line (3600, Row11, Column11, Row21, Column21)
gen_region_line (RegionLines1, Row11, Column11, Row21, Column21)
angle_ll (Row1, Column1, Row2, Column2, Row11, Column11, Row21, Column21, Angle)
angle_lx (Row11, Column11, Row21, Column21, Angle1)
intersection_ll (Row1, Column1, Row2, Column2, Row11, Column11, Row21, Column21, Row, Column, IsParallel)
dev_set_color ('red')
dev_set_line_width (5)
gen_cross_contour_xld (Cross, Row, Column, 100, 0.785398)
dev_set_color ('green')
dev_set_line_width (1)
draw_line (3600, Row12, Column12, Row22, Column22)
gen_region_line (RegionLines2, Row12, Column12, Row22, Column22)
distance_pl (Row, Column, Row12, Column12, Row22, Column22, Distance)
set_tposition (3600, Row, Column)
write_string (3600, Distance)
intersection_ll (Row11, Column11, Row21, Column21, Row12, Column12, Row22, Column22, Row2, Column2, IsParallel)
dev_set_color ('red')
dev_set_line_width (5)
gen_cross_contour_xld (Cross1, Row2, Column2, 100, 0.785398)
distance_pp (Row1, Column1, Row2, Column2, Distance1)
dev_set_color ('green')
dev_set_line_width (1)
set_tposition (3600, Row2, Column2)
write_string (3600, Distance1)
6.轉換成C#的代碼
private void action()
{
// Local iconic variables
HObject ho_RegionLines, ho_RegionLines1, ho_Cross;
HObject ho_RegionLines2, ho_Cross1;
// Local control variables
HTuple hv_Row1 = null, hv_Column1 = null, hv_Row2 = null;
HTuple hv_Column2 = null, hv_Row11 = null, hv_Column11 = null;
HTuple hv_Row21 = null, hv_Column21 = null, hv_Angle = null;
HTuple hv_Angle1 = null, hv_Row = null, hv_Column = null;
HTuple hv_IsParallel = null, hv_Row12 = null, hv_Column12 = null;
HTuple hv_Row22 = null, hv_Column22 = null, hv_Distance = null;
HTuple hv_Distance1 = null;
// Initialize local and output iconic variables
HOperatorSet.GenEmptyObj(out ho_RegionLines);
HOperatorSet.GenEmptyObj(out ho_RegionLines1);
HOperatorSet.GenEmptyObj(out ho_Cross);
HOperatorSet.GenEmptyObj(out ho_RegionLines2);
HOperatorSet.GenEmptyObj(out ho_Cross1);
if (HDevWindowStack.IsOpen())
{
HOperatorSet.SetColor(HDevWindowStack.GetActive(), "green");
}
if (HDevWindowStack.IsOpen())
{
HOperatorSet.SetLineWidth(HDevWindowStack.GetActive(), 1);
}
HOperatorSet.DrawLine(3600, out hv_Row1, out hv_Column1, out hv_Row2, out hv_Column2);
ho_RegionLines.Dispose();
HOperatorSet.GenRegionLine(out ho_RegionLines, hv_Row1, hv_Column1, hv_Row2,
hv_Column2);
HOperatorSet.DrawLine(3600, out hv_Row11, out hv_Column11, out hv_Row21, out hv_Column21);
ho_RegionLines1.Dispose();
HOperatorSet.GenRegionLine(out ho_RegionLines1, hv_Row11, hv_Column11, hv_Row21,
hv_Column21);
HOperatorSet.AngleLl(hv_Row1, hv_Column1, hv_Row2, hv_Column2, hv_Row11, hv_Column11,
hv_Row21, hv_Column21, out hv_Angle);
HOperatorSet.AngleLx(hv_Row11, hv_Column11, hv_Row21, hv_Column21, out hv_Angle1);
HOperatorSet.IntersectionLl(hv_Row1, hv_Column1, hv_Row2, hv_Column2, hv_Row11,
hv_Column11, hv_Row21, hv_Column21, out hv_Row, out hv_Column, out hv_IsParallel);
if (HDevWindowStack.IsOpen())
{
HOperatorSet.SetColor(HDevWindowStack.GetActive(), "red");
}
if (HDevWindowStack.IsOpen())
{
HOperatorSet.SetLineWidth(HDevWindowStack.GetActive(), 5);
}
ho_Cross.Dispose();
HOperatorSet.GenCrossContourXld(out ho_Cross, hv_Row, hv_Column, 100, 0.785398);
if (HDevWindowStack.IsOpen())
{
HOperatorSet.SetColor(HDevWindowStack.GetActive(), "green");
}
if (HDevWindowStack.IsOpen())
{
HOperatorSet.SetLineWidth(HDevWindowStack.GetActive(), 1);
}
HOperatorSet.DrawLine(3600, out hv_Row12, out hv_Column12, out hv_Row22, out hv_Column22);
ho_RegionLines2.Dispose();
HOperatorSet.GenRegionLine(out ho_RegionLines2, hv_Row12, hv_Column12, hv_Row22,
hv_Column22);
HOperatorSet.DistancePl(hv_Row, hv_Column, hv_Row12, hv_Column12, hv_Row22, hv_Column22,
out hv_Distance);
HOperatorSet.SetTposition(3600, hv_Row, hv_Column);
HOperatorSet.WriteString(3600, hv_Distance);
HOperatorSet.IntersectionLl(hv_Row11, hv_Column11, hv_Row21, hv_Column21, hv_Row12,
hv_Column12, hv_Row22, hv_Column22, out hv_Row2, out hv_Column2, out hv_IsParallel);
if (HDevWindowStack.IsOpen())
{
HOperatorSet.SetColor(HDevWindowStack.GetActive(), "red");
}
if (HDevWindowStack.IsOpen())
{
HOperatorSet.SetLineWidth(HDevWindowStack.GetActive(), 5);
}
ho_Cross1.Dispose();
HOperatorSet.GenCrossContourXld(out ho_Cross1, hv_Row2, hv_Column2, 100, 0.785398);
HOperatorSet.DistancePp(hv_Row1, hv_Column1, hv_Row2, hv_Column2, out hv_Distance1);
if (HDevWindowStack.IsOpen())
{
HOperatorSet.SetColor(HDevWindowStack.GetActive(), "green");
}
if (HDevWindowStack.IsOpen())
{
HOperatorSet.SetLineWidth(HDevWindowStack.GetActive(), 1);
}
HOperatorSet.SetTposition(3600, hv_Row2, hv_Column2);
HOperatorSet.WriteString(3600, hv_Distance1);
ho_RegionLines.Dispose();
ho_RegionLines1.Dispose();
ho_Cross.Dispose();
ho_RegionLines2.Dispose();
ho_Cross1.Dispose();
}