彩票走势图

VDF常见问题整理(六十五):如何检查2个影线之间的剪辑区域是否在内部

翻译|使用教程|编辑:李显亮|2021-01-12 10:19:42.217|阅读 104 次

概述:本系列教程整理了VectorDraw Developer Framework(VDF)最常见问题,教程整理的很齐全,非常适合新手学习。本文将会介绍如何检查2个影线之间的剪辑区域是否在内部。

# 慧都年终大促·界面/图表报表/文档/IDE等千款热门软控件火热促销中 >>

相关链接:

VectorDraw Developer Framework(VDF)是一个用于应用程序可视化的图形引擎库。有了VDF提供的功能,您可以轻松地创建、编辑、管理、输出、输入和打印2D和3D图形文件。该库还支持许多矢量和栅格输入和输出格式,包括本地PDF和SVG导出。

点击下载VectorDraw Developer Framework


问:如果一个舱口位于另一个舱口内,则如何测试两个舱口之间的剪辑区域?

答:尝试以空格式添加两个按钮和一个vdFramed控件,然后尝试以下代码:

using VectorDraw.Professional.vdObjects;
using VectorDraw.Geometry;
using VectorDraw.Generics;
using VectorDraw.Professional.vdPrimaries;

namespace WindowsFormsApplication1
{
    public partial class Form2 : Form
    {
        vdDocument doc;
        public Form2()
        {
            InitializeComponent();
        }

        private void Form2_Load(object sender, EventArgs e)
        {
            doc = vdFramedControl1.BaseControl.ActiveDocument;
        }
 
        private void button1_Click(object sender, EventArgs e)
        {
            doc.Open(@"C:\test\hatches.vdcl");
            doc.CommandAction.Zoom("E", 0, 0);
        }

        private void button2_Click(object sender, EventArgs e)
        {
            //Testing the method
            //NOTE: doc is a predefined vdDocument object
            IvdHatchFigure hfig1, hfig2;
            gPoint pt;
            vdFigure fig;

            doc.Prompt("Pick hatch 1");
            doc.ActionUtility.getUserEntity(out fig, out pt);
            doc.Prompt(null);
            hfig1 = fig as IvdHatchFigure;
            if (hfig1 == null) return;

            doc.Prompt("Pick hatch 2");
            doc.ActionUtility.getUserEntity(out fig, out pt);
            doc.Prompt(null);
            hfig2 = fig as IvdHatchFigure;
            if (hfig2 == null) return;

            // -1  error  hfig1 and or hfig2 are invalid hatches
            //  0 == hfig2 is Completely inside hfig1
            //  1 == hfig2 is Completely off the hfig1
            //  2 == hfig1 Clip somehow hfig2
            int ret = TestClipHatch(hfig1, hfig2);
            switch (ret)
            {
                case -1:
                    doc.Prompt("\r\n error  hfig1 and or hfig2 are invalid hatches"); doc.Prompt(null);
                    break;
                case 0:
                    doc.Prompt("\r\n hfig2 is completely inside hfig1"); doc.Prompt(null);
                    break;
                case 1:
                    doc.Prompt("\r\n hfig2 is completely off hfig1"); doc.Prompt(null);
                    break;
                case 2:
                    doc.Prompt("\r\n hfig2 is partial inside hfig1"); doc.Prompt(null);
                    break;
            }
        }

        // Test the clip area between 2 hatches and returns one of the following
        // -1  error  hfig1 and or hfig2 are invalid hatches
        //  0 == hfig2 is Completely inside hfig1
        //  1 == hfig2 is Completely off the hfig1
        //  2 == hfig1 Clip somehow hfig2
        int TestClipHatch(IvdHatchFigure hfig1, IvdHatchFigure hfig2)
        {
            vdHatchProperties h1 = hfig1.HatchProperties;
            vdHatchProperties h2 = hfig2.HatchProperties;
            if (h1 == null || h2 == null) return -1;
            VectorDraw.Generics.vdArrayarray1 = h1.GetFilledPolygons(0, 0);
            if (array1 == null) return -1;
            VectorDraw.Generics.vdArrayarray2 = h2.GetFilledPolygons(0, 0);
            if (array2 == null) return -1;

            vdArrayclips = new vdArray();
            vdArray opers = new vdArray(new VectorDraw.Geometry.GpcWrapper.ClippingOperation[] 
                  { VectorDraw.Geometry.GpcWrapper.ClippingOperation.Intersection, VectorDraw.Geometry.GpcWrapper.ClippingOperation.Intersection });
            for (int i = 0; i < array1.Count; i++) { for (int k = 0; k < array2.Count; k++) { vdArrayarr = new vdArray(new gPoints[] { array1[i], array2[k] });
                    vdArraypts = PolygonClipper.getCountours(PolygonClipper.getCountoursPolygonObject(arr, opers), arr);
                    if (pts != null && pts.Count > 0)
                        clips.AddRange(pts);
                }
            }
            if (clips == null || clips.Count == 0) return 1;
            VectorDraw.Generics.vdArrayarray = new vdArray();
            array.AddRange(array2);
            array.AddRange(clips);
            opers = new vdArray();
            for (int i = 0; i < array.Count; i++) opers.AddItem(VectorDraw.Geometry.GpcWrapper.ClippingOperation.XOr); vdArrayretpts = PolygonClipper.getCountours(PolygonClipper.getCountoursPolygonObject(array, opers), array);
            double area = 0.0;
            if (retpts != null && retpts.Count > 0)
            {
                foreach (gPoints item in retpts)
                {
                    area += Math.Abs(item.Area());
                }
            }
            if (Globals.AreEqual(area, 0.0, Globals.DefaultAreaEquality)) return 0;
            return 2;
        }

    }
}

=======================================================

如果您对想要购买正版授权VectorDraw Developer Framework(VDF),可以联系咨询相关问题。


标签:

本站文章除注明转载外,均为本站原创或翻译。欢迎任何形式的转载,但请务必注明出处、不得修改原文相关链接,如果存在内容上的异议请邮件反馈至chenjj@pclwef.cn


为你推荐

  • 推荐视频
  • 推荐活动
  • 推荐产品
  • 推荐文章
  • 慧都慧问
扫码咨询


添加微信 立即咨询

电话咨询

客服热线
023-68661681

TOP