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

VectorDraw Developer Framework


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

答:尝试以空格式添加两个按钮和一个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:testhatches.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("rn error  hfig1 and or hfig2 are invalid hatches"); doc.Prompt(null);                    break;                case 0:                    doc.Prompt("rn hfig2 is completely inside hfig1"); doc.Prompt(null);                    break;                case 1:                    doc.Prompt("rn hfig2 is completely off hfig1"); doc.Prompt(null);                    break;                case 2:                    doc.Prompt("rn 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),可以联系在线客服>>咨询相关问题。

标签:

声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2021年1月9日
下一篇 2021年1月9日

相关推荐

发表回复

登录后才能评论