Example #1
0
        protected override bool FilterItem(vdFigure item, vdFigure sampleMajor)
        {
            var itemFigure   = item as vdArc;
            var sampleFigure = sampleMajor as vdArc;

            if (itemFigure == null || sampleFigure == null)
            {
                return(false);
            }

            var radiusRange = sampleFigure.Radius * 0.1;

            if (radiusRange > 1)
            {
                radiusRange = 1;
            }
            if (Math.Abs(itemFigure.Radius - sampleFigure.Radius) > radiusRange)
            {
                return(false);
            }
            //使用圆弧面积进行比较
            if (Math.Abs(Math.Abs(itemFigure.Area()) - Math.Abs(sampleFigure.Area())) > radiusRange * radiusRange)
            {
                return(false);
            }
            return(true);
        }
        protected override bool FilterItem(vdFigure item, vdFigure sampleMajor)
        {
            var itemFigure   = item as vdCircle;
            var sampleFigure = sampleMajor as vdCircle;

            if (itemFigure == null || sampleFigure == null)
            {
                return(false);
            }

            if (itemFigure.Layer != sampleFigure.Layer)
            {
                return(false);
            }
            if (itemFigure.PenColor != sampleFigure.PenColor)
            {
                return(false);
            }
            if (Math.Abs(itemFigure.PenWidth - sampleFigure.PenWidth) > 0.1d)
            {
                return(false);
            }
            if (Math.Abs(itemFigure.Radius - sampleFigure.Radius) > 0.1d)
            {
                return(false);
            }
            return(true);
        }
Example #3
0
 public void ReadXml(XmlReader reader, vdDocument document)
 {
     while (reader.Read())
     {
         if (reader.NodeType == XmlNodeType.Element && reader.Name == nameof(Major))
         {
             var strMajor = reader.ReadString();
             Major = VdSqlUtil.GetFigureByHandle(document, ulong.Parse(strMajor));
         }
         if (reader.NodeType == XmlNodeType.Element && reader.Name == "Entity")
         {
             var strEntity = reader.ReadString();
             var entity    = VdSqlUtil.GetFigureByHandle(document, ulong.Parse(strEntity));
             if (entity == null)
             {
                 throw new XmlException($"找不到HandleId={strEntity}的图元");
             }
             _entities.Add(entity);
         }
         if (reader.NodeType == XmlNodeType.EndElement && reader.Name == nameof(FigureSet))
         {
             reader.Read();
             break;
         }
     }
     Entities = new ReadOnlyCollection <vdFigure>(_entities);
 }
Example #4
0
        private vdFigure FilterFigure(List <vdFigure> srcFigures, vdFigure srcMajor, vdFigure sampleFigure, vdFigure sampleMajor)
        {
            var sampleFigureType             = sampleFigure.GetType();
            var sampleFigureOffsetLenSquared = sampleFigure.BoundingBox.MidPoint.DistanceSquared(sampleMajor.BoundingBox.MidPoint);

            for (var i = 0; i < srcFigures.Count; i++)
            {
                var srcfigure = srcFigures[i];
                if (srcfigure == srcMajor)
                {
                    continue;
                }
                if (srcfigure.GetType() != sampleFigureType)
                {
                    continue;
                }

                var offset = srcfigure.BoundingBox.MidPoint - srcMajor.BoundingBox.MidPoint;
                if (Math.Abs(offset.x * offset.x + offset.y * offset.y - sampleFigureOffsetLenSquared) >= 2)
                {
                    continue;
                }

                var filter = FilterFactory.Get(sampleFigureType);
                if (filter != null)
                {
                    if (filter.IsMatchable(srcfigure, sampleFigure))
                    {
                        return(srcfigure);
                    }
                }
            }
            return(null);
        }
Example #5
0
        protected override bool FilterItem(vdFigure item, vdFigure sampleMajor)
        {
            var itemFigure   = item as vdLine;
            var sampleFigure = sampleMajor as vdLine;

            if (itemFigure == null || sampleFigure == null)
            {
                return(false);
            }

            if (itemFigure.Layer != sampleFigure.Layer)
            {
                return(false);
            }
            if (itemFigure.PenColor != sampleFigure.PenColor)
            {
                return(false);
            }
            if (Math.Abs(itemFigure.PenWidth - sampleFigure.PenWidth) > 0.1d)
            {
                return(false);
            }
            var sampleLen = sampleFigure.Length();

            if (Math.Abs(itemFigure.Length() - sampleLen) > sampleLen * 0.1d)
            {
                return(false);
            }
            return(true);
        }
        /// <summary>
        /// 在<see cref="srcFigures"/>中过滤出和<see cref="sampleFigure"/>匹配的所有图元
        /// </summary>
        /// <param name="srcFigures"></param>
        /// <param name="sampleFigure"></param>
        /// <returns></returns>
        public List <vdFigure> Filter(List <vdFigure> srcFigures, vdFigure sampleFigure)
        {
            if (srcFigures == null || srcFigures.Count == 0)
            {
                throw new ArgumentNullException(nameof(srcFigures));
            }
            if (sampleFigure == null)
            {
                throw new ArgumentNullException(nameof(sampleFigure));
            }

            var passedSet  = new List <vdFigure>();
            var sampleType = sampleFigure.GetType();

            foreach (vdFigure srcFigure in srcFigures)
            {
                if (srcFigure.GetType() != sampleType)
                {
                    continue;
                }
                if (srcFigure == sampleFigure)
                {
                    continue;
                }
                if (PreFilterFunc != null && !PreFilterFunc.Invoke(srcFigure, sampleFigure))
                {
                    continue;
                }
                if (FilterItem(srcFigure, sampleFigure))
                {
                    passedSet.Add(srcFigure);
                }
            }
            return(passedSet);
        }
Example #7
0
        public FigureSet(List <vdFigure> items, vdFigure major)
        {
            _entities.AddRange(items);
            _entities.Sort(new FigureMidPointComparer());
            Entities = new ReadOnlyCollection <vdFigure>(_entities);

            Major = major;
        }
Example #8
0
        protected override bool FilterItem(vdFigure item, vdFigure sampleMajor)
        {
            var itemString    = string.Empty;
            var sampleString  = string.Empty;
            var sampleVdText  = sampleMajor as vdText;
            var sampleVdMText = sampleMajor as vdMText;

            if (sampleVdText == null && sampleVdMText == null)
            {
                return(false);
            }
            if (sampleVdText != null)
            {
                var itemFigure = item as vdText;
                if (itemFigure != null)
                {
                    itemString = itemFigure.TextString;
                }
                else
                {
                    return(false);
                }
                sampleString = sampleVdText.TextString;
            }
            if (sampleVdMText != null)
            {
                var itemFigure = item as vdMText;
                if (itemFigure != null)
                {
                    itemString = itemFigure.TextString;
                }
                else
                {
                    return(false);
                }
                sampleString = sampleVdMText.TextString;
            }
            if (string.IsNullOrWhiteSpace(itemString) || string.IsNullOrWhiteSpace(sampleString))
            {
                return(false);
            }
            var count            = 0;
            var itemEnumerator   = itemString.GetEnumerator();
            var sampleEnumerator = sampleString.GetEnumerator();

            while (itemEnumerator.MoveNext() && sampleEnumerator.MoveNext())
            {
                if (itemEnumerator.Current == sampleEnumerator.Current)
                {
                    ++count;
                }
                else
                {
                    break;
                }
            }
            return(count >= 4 || count >= 2 && sampleString.Length == count);
        }
Example #9
0
        protected override bool FilterItem(vdFigure item, vdFigure sampleMajor)
        {
            var itemFigure   = item as vdPolyline;
            var sampleFigure = sampleMajor as vdPolyline;

            if (itemFigure == null || sampleFigure == null)
            {
                return(false);
            }
            if (itemFigure.Layer != sampleFigure.Layer)
            {
                return(false);
            }

            if (itemFigure.SPlineFlag != sampleFigure.SPlineFlag)
            {
                return(false);
            }

            if (itemFigure.PenColor != sampleFigure.PenColor)
            {
                return(false);
            }
            if (Math.Abs(itemFigure.PenWidth - sampleFigure.PenWidth) > 0.1d)
            {
                return(false);
            }

            if (ConsiderVertex)
            {
                if (itemFigure.VertexList.Count != sampleFigure.VertexList.Count)
                {
                    return(false);
                }

                if (sampleFigure.VertexList.Count >= 3)
                {
                    //如果多余两个顶点,则判断面积
                    if (Math.Abs(Math.Abs(itemFigure.Area()) - Math.Abs(sampleFigure.Area())) >= 0.001d)
                    {
                        return(false);
                    }
                }
                else
                {
                    //如果只有俩顶点则判断长度
                    if (Math.Abs(itemFigure.Length() - sampleFigure.Length()) >= 0.001d)
                    {
                        return(false);
                    }
                }
            }
            return(true);
        }
Example #10
0
        private void SetEntityLayer(vdFigure vdf, string layerName)
        {
            vdLayer layer = vDraw.ActiveDocument.Layers.FindName(layerName);

            if (layer == null)
            {
                layer = new vdLayer(vDraw.ActiveDocument, layerName);
                vDraw.ActiveDocument.Layers.Add(layer);
            }

            vdf.Layer = layer;
        }
Example #11
0
 /// <summary>
 /// 判断两个图元是否匹配
 /// </summary>
 /// <param name="figure1"></param>
 /// <param name="figure2"></param>
 /// <returns></returns>
 public bool IsMatchable(vdFigure figure1, vdFigure figure2)
 {
     if (figure1.GetType() != figure2.GetType())
     {
         return(false);
     }
     if (PreFilterFunc != null && !PreFilterFunc.Invoke(figure1, figure2))
     {
         return(false);
     }
     return(FilterItem(figure1, figure2));
 }
Example #12
0
        /// <summary>
        /// 找到对应的点和向量
        /// </summary>
        /// <param name="i32">定点数组</param>
        /// <param name="points">坐标数组</param>
        /// <param name="vdPf">父图形,里面存点和向量</param>
        /// <param name="orgin">输出找到的点</param>
        /// <param name="vector">输出找到的向量</param>
        /// <returns>是否找到</returns>
        ///
        bool FindPointVector(gPoints Points, vdPolyface vdp, vdFigure vdPf, ref gPoint orign, ref Vector vector)
        {
            int iii = 1;

            while (true)
            {
                string strName = "POINTVECTOR" + iii.ToString();
                iii++;
                vdXProperty vdx = vdPf.XProperties.FindName(strName);
                if (vdx != null)
                {
                    string   strValue = (string)vdx.PropValue;
                    string[] strs     = strValue.Split(new char[] { ',' });
                    orign  = new gPoint(double.Parse(strs[0]), double.Parse(strs[1]), double.Parse(strs[2]));
                    vector = new Vector(double.Parse(strs[3]), double.Parse(strs[4]), double.Parse(strs[5]));



                    double d    = -1.0;
                    gPoint gEnd = orign + vector;


                    int currenti = 0;
                    for (int i = 0; i < Points.Count; i++)
                    {
                        currenti = i;
                        gPoint gp = Points[i];
                        double dd = gp.DistanceFromLine(orign, gEnd);
                        if (d < 0)
                        {
                            d = dd;
                        }
                        else
                        {
                            if (Math.Abs(dd - d) > Globals.VD_ZERO5)
                            {
                                //MessageBox.Show("Error!");
                                break;
                            }
                        }
                    }
                    if (currenti == Points.Count - 1)
                    {
                        return(true);
                    }
                }
                else
                {
                    return(false);
                }
            }
        }
        protected override bool FilterItem(vdFigure item, vdFigure sampleMajor)
        {
            var itemFigure   = item as vdPolyhatch;
            var sampleFigure = sampleMajor as vdPolyhatch;

            if (itemFigure == null || sampleFigure == null)
            {
                return(false);
            }

            if (itemFigure.HatchProperties.FillMode != sampleFigure.HatchProperties.FillMode)
            {
                return(false);
            }
            if (itemFigure.PolyCurves.Count != sampleFigure.PolyCurves.Count)
            {
                return(false);
            }

            var sampleMidPt = sampleFigure.BoundingBox.MidPoint;
            var itemMidPt   = itemFigure.BoundingBox.MidPoint;

            for (var i = 0; i < sampleFigure.PolyCurves.Count; i++)
            {
                var itemCurves   = itemFigure.PolyCurves[i];
                var sampleCurves = sampleFigure.PolyCurves[i];
                if (itemCurves.Count != sampleCurves.Count)
                {
                    return(false);
                }

                for (var j = 0; j < sampleCurves.Count; j++)
                {
                    var itemCurve   = itemCurves[j];
                    var sampleCurve = sampleCurves[j];
                    if (itemCurve.GetType() != sampleCurve.GetType())
                    {
                        return(false);
                    }
                    var itemDistance   = gPoint.Distance2D(itemCurve.BoundingBox.MidPoint, itemMidPt);
                    var sampleDistance = gPoint.Distance2D(sampleCurve.BoundingBox.MidPoint, sampleMidPt);
                    if (Math.Abs(itemDistance - sampleDistance) > 1d)
                    {
                        return(false);
                    }
                }
            }
            return(true);
        }
Example #14
0
        public void Draw_Elements()
        {
            //Clear_All();
            ASTRADoc astdoc;

            //astdoc = new ASTRADoc(iACad.AstraDocument);
            astdoc = (iACad.AstraDocument);


            astdoc.Elements.Clear();

            for (int i = 0; i < DGV.Rows.Count; i++)
            {
                Element elm = new Element();
                DGV[0, i].Value = i + 1;

                //jn.NodeNo = MyList.StringToInt(DGV[0, i].Value.ToString(), 0);
                elm.ElementNo    = MyStrings.StringToInt(DGV[0, i].Value.ToString(), 0);
                elm.Node1.NodeNo = MyStrings.StringToInt(DGV[1, i].Value.ToString(), 0);
                elm.Node2.NodeNo = MyStrings.StringToInt(DGV[2, i].Value.ToString(), 0);
                elm.Node3.NodeNo = MyStrings.StringToInt(DGV[3, i].Value.ToString(), 0);
                elm.Node4.NodeNo = MyStrings.StringToInt(DGV[4, i].Value.ToString(), 0);

                astdoc.Elements.Add(elm);
            }
            //iACad.Document.ActiveLayOut.Entities.EraseAll();

            foreach (var item in iACad.Document.ActionLayout.Entities)
            {
                if (item is vdFigure)
                {
                    vdFigure vf = item as vdFigure;
                    if (vf.Layer.Name == "Elements")
                    {
                        vf.Deleted = true;
                    }
                }
            }
            iACad.Document.Redraw(true);

            astdoc.Elements.CopyCoordinates(astdoc.Joints);
            astdoc.Elements.DrawElements(iACad.Document);

            //iACad.AstraDocument = astdoc;

            //AST_DOC.Members.DrawMember(VDoc);
            //AST_DOC.Elements.DrawElements(VDoc);
            //AST_DOC.Supports.DrawSupport(VDoc);
        }
Example #15
0
        public FigureSet(List <vdFigure> items = null)
        {
            if (items == null)
            {
                return;
            }
            _entities.AddRange(items);
            _entities.Sort(new FigureMidPointComparer());
            Entities = new ReadOnlyCollection <vdFigure>(_entities);

            var list4Major = new List <vdFigure>(_entities);

            list4Major.Sort(new MajorFigureComparer());
            Major = list4Major[0];
        }
Example #16
0
        public void Draw_Joints()
        {
            //Clear_All();
            ASTRADoc astdoc;

            //astdoc = new ASTRADoc(iACad.AstraDocument);
            astdoc = (iACad.AstraDocument);


            astdoc.Joints.Clear();

            for (int i = 0; i < DGV.Rows.Count; i++)
            {
                JointCoordinate jn = new JointCoordinate();
                DGV[0, i].Value = i + 1;

                //jn.NodeNo = MyList.StringToInt(DGV[0, i].Value.ToString(), 0);
                jn.NodeNo  = MyStrings.StringToInt(DGV[0, i].Value.ToString(), 0);
                jn.Point.x = MyStrings.StringToDouble(DGV[1, i].Value.ToString(), 0.0);
                jn.Point.y = MyStrings.StringToDouble(DGV[2, i].Value.ToString(), 0.0);
                jn.Point.z = MyStrings.StringToDouble(DGV[3, i].Value.ToString(), 0.0);
                astdoc.Joints.Add(jn);
            }
            //iACad.Document.ActiveLayOut.Entities.EraseAll();

            foreach (var item in iACad.Document.ActionLayout.Entities)
            {
                if (item is vdFigure)
                {
                    vdFigure vf = item as vdFigure;
                    if (vf.Layer.Name == "Nodes")
                    {
                        vf.Deleted = true;
                    }
                }
            }
            iACad.Document.Redraw(true);

            astdoc.Joints.DrawJointsText(iACad.Document, 0.3);

            //iACad.AstraDocument = astdoc;

            //AST_DOC.Members.DrawMember(VDoc);
            //AST_DOC.Elements.DrawElements(VDoc);
            //AST_DOC.Supports.DrawSupport(VDoc);
        }
Example #17
0
        private static bool CATCHMENT_ProcessTerrainSurveyData(vdDocument vdoc)
        {
            vdoc.Prompt("Click Left and Right mouse button on River Centre Line Polyline :");

            vdSelection sel = vdoc.ActionUtility.getUserSelection();

            vdFigure vfig = sel[0];

            vdPolyline pline = vfig as vdPolyline;

            if (pline != null)
            {
                frm_Process_Terrain_Survey_data frm = new frm_Process_Terrain_Survey_data(pline);
                frm.txt_select_survey_data.Text = sample_data;
                frm.ShowDialog();
            }
            return(false);
        }
Example #18
0
        bool FindPointVector(Int32Array i32, gPoints Points, vdFigure vdPf, ref gPoint orign, ref Vector vector)
        {
            int iii = 1;

            while (true)
            {
                string strName = "POINTVECTOR" + iii.ToString();
                iii++;
                vdXProperty vdx = vdPf.XProperties.FindName(strName);
                if (vdx != null)
                {
                    string   strValue = (string)vdx.PropValue;
                    string[] strs     = strValue.Split(new char[] { ',' });
                    orign  = new gPoint(double.Parse(strs[0]), double.Parse(strs[1]), double.Parse(strs[2]));
                    vector = new Vector(double.Parse(strs[3]), double.Parse(strs[4]), double.Parse(strs[5]));
                    double d = -1.0;

                    for (int i = 0; i < i32.Count; i++)
                    {
                        gPoint gEnd = orign + vector;
                        gPoint gp   = Points[i32[i]];
                        double dd   = gp.DistanceFromLine(orign, gEnd);
                        if (d < 0)
                        {
                            d = dd;
                        }
                        else
                        {
                            if (Math.Abs(dd - d) > Globals.VD_ZERO5)
                            {
                                break;
                            }
                        }
                    }
                    return(true);
                }
                else
                {
                    return(false);
                }
            }
        }
Example #19
0
        private void timer1_Tick(object sender, EventArgs e)
        {
            timer1.Interval = Interval;

            for (int i = 0; i < list_index.Count; i++)
            {
                vdFigure al = doc.ActiveLayOut.Entities[list_index[i]];

                if (count == 0)
                {
                    al.visibility = vdFigure.VisibilityEnum.Invisible;
                }
                else
                {
                    al.visibility = vdFigure.VisibilityEnum.Visible;
                    count         = -1;
                }
            }
            count++;

            doc.Redraw(true);
        }
Example #20
0
        private vdBlock GetSphereBlk()
        {
            vdBlock blk = vDraw.ActiveDocument.Blocks.FindName("_PointMark");

            if (blk == null)
            {
                vDraw.ActiveDocument.ActivePenColor.ColorIndex = 9;
                vDraw.ActiveDocument.CommandAction.CmdSphere(new gPoint(0, 0, 0), 1.0, 10, 10);
                vdFigure vdf = vDraw.ActiveDocument.ActiveLayOut.Entities.Last;
                if (vdf is vdPolyface)
                {
                    (vdf as vdPolyface).SmoothAngle = 30;
                    blk = new vdBlock(vDraw.ActiveDocument, "_PointMark");
                    blk.Entities.Add(vdf.Clone(vDraw.ActiveDocument));
                    vDraw.ActiveDocument.Blocks.Add(blk);
                    vdf.Deleted = true;

                    return(blk);
                }
                return(null);
            }
            return(blk);
        }
Example #21
0
        public FigureSet MatchCore(List <vdFigure> srcFigures, vdFigure srcMajor, FigureSet sample)
        {
            if (srcFigures.Count < sample.Entities.Count)
            {
                return(null);
            }
            //后面对该集合进行改动
            srcFigures = new List <vdFigure>(srcFigures);

            var resultItemList = new List <vdFigure>();

            foreach (var sampleItem in sample.Entities)
            {
                if (sampleItem == sample.Major)
                {
                    resultItemList.Add(srcMajor);
                    continue;
                }
                var srcFigure = FilterFigure(srcFigures, srcMajor, sampleItem, sample.Major);
                if (srcFigure != null)
                {
                    resultItemList.Add(srcFigure);
                    srcFigures.Remove(srcFigure);
                }
                else
                {
                    return(null);
                }
            }

            if (resultItemList.Count == sample.Entities.Count)
            {
                return(new FigureSet(resultItemList, srcMajor));
            }
            return(null);
        }
Example #22
0
        public static void Merge(VectorDrawBaseControl v, FormProgress p)
        {
            p.Text = "合并面片...";

            int ii    = 0;
            int count = v.ActiveDocument.Blocks.Count;
            vdArray <vdBlock> blocks = new vdArray <vdBlock>();
            bool LargeNum            = false;

            foreach (vdBlock vdb in v.ActiveDocument.Blocks)
            {
                if (vdb.Entities.Count == 0)
                {
                    blocks.AddItem(vdb);
                }
                ii++;
                int value = (ii * 100) / count;
                Dictionary <string, vdPolyface> layFaces = new Dictionary <string, vdPolyface>();
                Dictionary <int, int>           ids      = new Dictionary <int, int>();
                int icount = 0;

                p.SetProgress(value);

                //if (vdb.Entities.Count > 5000)
                //{
                //    LargeNum = true;
                //}
                //else
                //{
                //    LargeNum = false;
                //}

                foreach (vdFigure vdf in vdb.Entities)
                {
                    if (vdf is vdPolyface)
                    {
                        vdPolyface vdp = vdf as vdPolyface;

                        if (!layFaces.ContainsKey(vdp.Layer.Name))
                        {
                            layFaces.Add(vdp.Layer.Name, vdp);
                            ids.Add(vdp.Id, vdp.Id);
                        }
                        else
                        {
                            layFaces[vdp.Layer.Name].MergePolyface1(vdp);
                        }

                        //if (LargeNum)
                        //{
                        //    icount++;
                        //}
                    }
                }

                icount = 0;
                for (int i = vdb.Entities.Count - 1; i >= 0; i--)
                {
                    vdFigure vdf = vdb.Entities[i];
                    if (vdf is vdPolyface && ids.ContainsKey(vdf.Id))
                    {
                        vdPolyface vdp1 = vdf as vdPolyface;
                        if (vdp1.FaceList.Count > 0)
                        {
                            vdp1.ClearVerticies1();
                        }
                        else
                        {
                            vdb.Entities.RemoveItem(vdf);
                            vdf.Dispose();
                            vdf = null;
                        }
                    }
                    else if (vdf is vdPolyface)
                    {
                        vdb.Entities.RemoveItem(vdf);
                        vdf.Dispose();
                        vdf = null;
                    }

                    //if (LargeNum)
                    //{
                    //    icount++;
                    //}
                }

                //vdb.Update();
            }
            foreach (vdBlock vdb in blocks)
            {
                v.ActiveDocument.Blocks.RemoveItem(vdb);
                vdb.Dispose();
                //vdb = null;
            }


            GC.Collect();
        }
Example #23
0
        /// <summary>
        /// 旧的合并方法,已经弃用
        /// </summary>
        /// <param name="v"></param>
        /// <param name="p"></param>
        public static void Merge1(VectorDrawBaseControl v, FormProgress p)
        {
            p.Text = "合并面片...";
            int ii    = 0;
            int count = v.ActiveDocument.Blocks.Count;

            vdArray <vdBlock> blocks = new vdArray <vdBlock>();

            foreach (vdBlock vdb in v.ActiveDocument.Blocks)
            {
                if (vdb.Entities.Count == 0)
                {
                    blocks.AddItem(vdb);
                }

                int percent = (int)((++ii * 1.0 / count) * 100);

                p.SetProgress(percent);

                Dictionary <string, vdPolyface> layFaces = new Dictionary <string, vdPolyface>();
                Dictionary <int, int>           ids      = new Dictionary <int, int>();
                foreach (vdFigure vdf in vdb.Entities)
                {
                    if (vdf is vdPolyface)
                    {
                        vdPolyface vdp = vdf as vdPolyface;

                        if (!layFaces.ContainsKey(vdp.Layer.Name))
                        {
                            layFaces.Add(vdp.Layer.Name, vdp);
                            ids.Add(vdp.Id, vdp.Id);
                        }
                        else
                        {
                            layFaces[vdp.Layer.Name].MergePolyface1(vdp);
                        }
                    }
                }
                for (int i = vdb.Entities.Count - 1; i >= 0; i--)
                {
                    vdFigure vdf = vdb.Entities[i];
                    if (vdf is vdPolyface && ids.ContainsKey(vdf.Id))
                    {
                        vdPolyface vdp1 = vdf as vdPolyface;
                        if (vdp1.FaceList.Count > 0)
                        {
                            vdp1.ClearVerticies();
                        }
                        else
                        {
                            vdb.Entities.RemoveItem(vdf);
                            vdf.Dispose();
                            vdf = null;
                        }
                    }
                    else if (vdf is vdPolyface)
                    {
                        vdb.Entities.RemoveItem(vdf);
                        vdf.Dispose();
                        vdf = null;
                    }
                }
            }
            foreach (vdBlock vdb in blocks)
            {
                v.ActiveDocument.Blocks.RemoveItem(vdb);
                vdb.Dispose();
                //vdb = null;
            }
            GC.Collect();
        }
Example #24
0
 protected abstract bool FilterItem(vdFigure item, vdFigure sampleMajor);
Example #25
0
 public void setQRCode(vdFigure qrCode)
 {
     this.qrCode = qrCode;
 }
Example #26
0
        /// <summary>
        /// /处理polyface
        /// </summary>
        //bool <param name="vdp"></param>
        bool GetVDPBorderLine(vdPolyface vdp, vdFigure vdPf)
        {
            vdPolyface vdpOut             = new vdPolyface();
            Dictionary <string, bool> kvs = new Dictionary <string, bool>();
            Int32Array iii32 = vdp.FaceList;

            for (int i = 0; i < iii32.Count; i++)
            {
                if (vdp.FaceList[i] < 0)
                {
                    if (i % 5 != 4)
                    {
                        vdp.FaceList[i] = -vdp.FaceList[i];
                    }
                }
            }
            iii32 = vdp.FaceList;
            for (int i = 0; i < iii32.Count; i = i + 5)
            {
                AddSide(kvs, iii32[i], iii32[i + 1]);
                AddSide(kvs, iii32[i + 1], iii32[i + 2]);
                AddSide(kvs, iii32[i + 2], iii32[i]);
            }
            //找到外边界
            Int32Array i32 = ParaseSide2List(kvs, vdp.VertexList.Count + 1);

            if (i32.Count < 5)
            {
                return(false);
            }

            //找到向量
            ///int iii = 1;
            gPoints Points = vdp.VertexList;

            Points.makeClosed();
            gPoints gps = new gPoints();// Points.Clone() as gPoints;

            foreach (int ii in i32)
            {
                gps.Add(Points[ii - 1]);
            }
            gps.RemoveEqualPoints(Globals.VD_ZERO5);

            //gps.RemoveInLinePoints();

            Int32Array ii32 = new Int32Array();
            gPoints    gpss = new gPoints();


            #region  延长线段到最长

            gpss.Add(gps[0]);


            for (int i = 0; i < gps.Count - 1; i++)
            {
                //if (i == 5)
                //{
                //    int j = 0;
                //}

                if (i != gps.Count - 2)
                {
                    double dd = Globals.distPointFromLine(gps[i + 2], gps[i], gps[i + 1]);
                    if (Globals.distPointFromLine(gps[i + 2], gps[i], gps[i + 1]) < 0.2)
                    {
                        continue;
                    }
                    else
                    {
                        gpss.Add(gps[i + 1]);
                    }
                }

                if (i == gps.Count - 2)
                {
                    if (Globals.distPointFromLine(gps[1], gps[i], gps[i + 1]) < 0.2)
                    {
                        gpss.RemoveAt(0);
                    }
                    else
                    {
                        gpss.Add(gps[i + 1]);
                    }
                }
            }

            #endregion
            gpss.makeClosed();
            gpss.RemoveLast();


            //找到四条边中符合圆柱体标准的。

            if (gpss.Count % 2 != 0 || gpss.Count < 10)
            {
                return(false);
            }

            int half = gpss.Count / 2;

            gPoints gEndSide1  = new gPoints();
            gPoints gEndSide2  = new gPoints();
            gPoints gParaSide1 = new gPoints();
            gPoints gParaSide2 = new gPoints();



            for (int i = 0; i < gpss.Count / 2; i++)
            {
                Vector v1 = new Vector(gpss[i], gpss[i + 1]);
                Vector v2 = new Vector(gpss[i + half], gpss[(half + i + 1) % gpss.Count]);
                v1.Cross(v2);
                if (v1.Length < Globals.VD_ZERO6)  //说明平行
                {
                    gEndSide1.RemoveAll();
                    gEndSide2.RemoveAll();
                    gParaSide1.RemoveAll();
                    gParaSide2.RemoveAll();

                    gParaSide1.Add(gpss[i]);
                    gParaSide1.Add(gpss[i + 1]);

                    gParaSide2.Add(gpss[i + half]);
                    gParaSide2.Add(gpss[(half + i + 1) % gpss.Count]);



                    for (int j = i + 1; j < i + half; j++)
                    {
                        gEndSide1.Add(gpss[j]);
                    }

                    for (int j = i + half + 1; j < i + 2 * half; j++)
                    {
                        gEndSide2.Add(gpss[j % gpss.Count]);
                    }

                    gPoint sp1    = new gPoint();
                    gPoint sp2    = new gPoint();
                    double radius = 0.0;

                    //判断是个边是否符合圆柱体标准
                    if (!IS4SideCyln(gEndSide1, gEndSide2, gParaSide1, gParaSide2, ref sp1, ref sp2, out radius))  //不符合圆柱体标准 ,直接返回错误
                    {
                        continue;
                    }
                    gpss.RemoveAll();


                    //这里可以进行圆柱简化



                    gpss.AddRange(gEndSide1);
                    gpss.AddRange(gParaSide2);
                    gpss.AddRange(gEndSide2);
                    gpss.AddRange(gParaSide1);


                    //是否齐头圆柱,即没有切过的圆柱,如果齐圆柱头,特殊处理,此处暂时不变,



                    //

                    half = gpss.Count / 2;

                    vdpOut.VertexList = gpss;
                    vdpOut.FaceList   = new Int32Array();

                    for (int ii = 1; ii < half; ii++)
                    {
                        vdpOut.FaceList.Add(ii);
                        vdpOut.FaceList.Add(ii + 1);
                        vdpOut.FaceList.Add(gpss.Count - (ii + 1) + 1);
                        vdpOut.FaceList.Add(gpss.Count - ii + 1);
                        vdpOut.FaceList.Add(-1);
                    }


                    vdp.FaceList   = vdpOut.FaceList;
                    vdp.VertexList = vdpOut.VertexList;
                    //vdp.Invalidate();
                    //vdp.Update();

                    break;
                }
            }


            //找到两个顶边,如果多个就扔掉了。

            //GetNonParaSide(vdp.VertexList, i32, orign, vector);
            return(true);
            //Int32Array side1=
        }
Example #27
0
        public void Draw_Members()
        {
            //Clear_All();
            ASTRADoc astdoc;

            //astdoc = new ASTRADoc(ACad.AstraDocument);
            astdoc = (iACad.AstraDocument);


            astdoc.Members.Clear();

            for (int i = 0; i < DGV.Rows.Count; i++)
            {
                MemberIncidence mbr = new MemberIncidence();

                DGV[0, i].Value = i + 1;

                mbr.MemberNo = MyStrings.StringToInt(DGV[0, i].Value.ToString(), 0);

                if (DGV[1, i].Value.ToString().StartsWith("C"))
                {
                    mbr.MemberType = MembType.CABLE;
                }
                else if (DGV[1, i].Value.ToString().StartsWith("T"))
                {
                    mbr.MemberType = MembType.TRUSS;
                }
                else
                {
                    mbr.MemberType = MembType.BEAM;
                }

                mbr.StartNode.NodeNo = MyStrings.StringToInt(DGV[2, i].Value.ToString(), 0);



                mbr.EndNode.NodeNo = MyStrings.StringToInt(DGV[3, i].Value.ToString(), 0);


                astdoc.Members.Add(mbr);
            }


            foreach (var item in iACad.Document.ActionLayout.Entities)
            {
                if (item is vdFigure)
                {
                    vdFigure vf = item as vdFigure;
                    if (vf.Layer.Name == "Members")
                    {
                        vf.Deleted = true;
                    }
                }
            }


            iACad.Document.Redraw(true);

            astdoc.Members.CopyJointCoordinates(astdoc.Joints);

            astdoc.MemberProperties.CopyMemberIncidence(astdoc.Members);

            astdoc.Members.DrawMember(iACad.Document, 0.3);
        }
Example #28
0
        void BaseControl_vdMouseDown(MouseEventArgs e, ref bool cancel)
        {
            Childform frm = this.ActiveMdiChild as Childform;

            if (frm == null)
            {
                return;
            }

            if (e.Button != MouseButtons.Left)
            {
                return;
            }
            if (frm.vdScrollableControl1.BaseControl.ActiveDocument.ActiveLayOut.OverAllActiveActions == null)
            {
                return;
            }
            if (frm.vdScrollableControl1.BaseControl.ActiveDocument.ActiveLayOut.OverAllActiveActions.Count > 1)
            {
                return;
            }

            if (frm.vdScrollableControl1.BaseControl.ActiveDocument.ActiveLayOut.ActiveAction is VectorDraw.Professional.CommandActions.ActionLine)
            {
                return;
            }
            vdSelection GripEntities = GetGripsCollection();
            gPoint      p1           = frm.vdScrollableControl1.BaseControl.ActiveDocument.ActiveLayOut.ActiveActionRender.World2Pixelmatrix.Transform(frm.vdScrollableControl1.BaseControl.ActiveDocument.ActiveLayOut.OverAllActiveAction.MouseLocation);
            gPoint      p1viewCS     = frm.vdScrollableControl1.BaseControl.ActiveDocument.ActiveLayOut.ActiveActionRender.CurrentMatrix.Transform(frm.vdScrollableControl1.BaseControl.ActiveDocument.ActiveLayOut.OverAllActiveAction.MouseLocation);
            Point       location     = new Point((int)p1.x, (int)p1.y);

            #region Grip Move Code
            if (System.Windows.Forms.Control.ModifierKeys == Keys.None)
            {
                Box box = new Box();
                box.AddPoint(p1viewCS);
                box.AddWidth(frm.vdScrollableControl1.BaseControl.ActiveDocument.ActiveLayOut.ActiveActionRender.GlobalProperties.GripSize * frm.vdScrollableControl1.BaseControl.ActiveDocument.ActiveLayOut.ActiveActionRender.PixelSize / 2.0d);

                vdSelection          selset       = new vdSelection();
                vdArray <Int32Array> indexesArray = new vdArray <Int32Array>();
                gPoint pt = frm.vdScrollableControl1.BaseControl.ActiveDocument.ActiveLayOut.Document.World2UserMatrix.Transform(frm.vdScrollableControl1.BaseControl.ActiveDocument.ActiveLayOut.OverAllActiveAction.MouseLocation);
                foreach (vdFigure fig in GripEntities)
                {
                    Int32Array indexes = frm.vdScrollableControl1.BaseControl.ActiveDocument.ActiveLayOut.getGripIndexes(fig, box);
                    if (indexes.Count != 0)
                    {
                        selset.AddItem(fig, false, vdSelection.AddItemCheck.Nochecking);
                        indexesArray.AddItem(indexes);
                    }
                }
                if (selset.Count > 0)
                {
                    VectorDraw.Professional.ActionUtilities.CmdMoveGripPoints MoveGrips = new VectorDraw.Professional.ActionUtilities.CmdMoveGripPoints(pt, frm.vdScrollableControl1.BaseControl.ActiveDocument.ActiveLayOut, selset, indexesArray);
                    frm.vdScrollableControl1.BaseControl.ActiveDocument.ActiveLayOut.ActionAdd(MoveGrips);
                    VectorDraw.Actions.StatusCode ret = MoveGrips.WaitToFinish();
                    cancel = true;
                    return;
                }
            }
            #endregion

            #region One by One implementation
            vdFigure Fig = null;
            Fig = frm.vdScrollableControl1.BaseControl.ActiveDocument.ActiveLayOut.GetEntityFromPoint(location, frm.vdScrollableControl1.BaseControl.ActiveDocument.ActiveLayOut.ActiveActionRender.GlobalProperties.PickSize, false, vdDocument.LockLayerMethodEnum.EnableGetObjectGrip);
            frm.vdScrollableControl1.BaseControl.ActiveDocument.ActiveLayOut.Document.LockLayerMethodStack.Push(vdDocument.LockLayerMethodEnum.DisableAll | ((frm.vdScrollableControl1.BaseControl.ActiveDocument.ActiveLayOut.Document.LockLayerMethod & vdDocument.LockLayerMethodEnum.EnableGetObjectGrip) != 0 ? vdDocument.LockLayerMethodEnum.EnableAddToSelections : 0));
            bool bShift = ((System.Windows.Forms.Control.ModifierKeys & Keys.Shift) == Keys.Shift);
            if (Fig != null)
            {
                ClearAllGrips(GripEntities);
                GripEntities.AddItem(Fig, true, vdSelection.AddItemCheck.RemoveInVisibleEntities);
                if (cancel)
                {
                    Fig.ShowGrips = false;
                }
                else
                {
                    Fig.ShowGrips = true;
                }
                frm.vdScrollableControl1.BaseControl.ActiveDocument.ActiveLayOut.RefreshGraphicsControl(frm.vdScrollableControl1.BaseControl.ActiveDocument.ActiveLayOut.ActiveActionRender.control);
                //  DrawGrips(GripEntities);
            }
            frm.vdScrollableControl1.BaseControl.ActiveDocument.ActiveLayOut.Document.LockLayerMethodStack.Pop();
            #endregion
        }
Example #29
0
        public void SetAlign()
        {
            vdFigure vdFig = null;
            vdLine   stln = null;
            vdLine   endln = null;
            object   ret = null;
            gPoint   EPT, SPT;
            gPoint   FSP; // First Start Point
            gPoint   FDP; // First Destination Point
            gPoint   SSP; // Second Start Point
            gPoint   SDP; // Second Destination Point

            vdSelection vdSel = null;

            document.Prompt("Select Entities:");
            ret = document.ActionUtility.getUserSelection();
            document.Prompt(null);
            if (ret == null || !(ret is vdSelection))
            {
                return;
            }
            vdSel = ret as vdSelection;

            document.Prompt("Enter First Source Point:");
            ret = document.ActionUtility.getUserPoint();
            document.Prompt(null);
            if (ret == null || !(ret is gPoint))
            {
                return;
            }
            FSP = ret as gPoint;

            document.Prompt("Enter First Destination Point:");
            ret = document.ActionUtility.getUserPoint();
            document.Prompt(null);
            if (ret == null || !(ret is gPoint))
            {
                return;
            }
            FDP = ret as gPoint;

            document.Prompt("Enter Second Source Point:");
            ret = document.ActionUtility.getUserPoint();
            document.Prompt(null);
            if (ret == null || !(ret is gPoint))
            {
                return;
            }
            SSP = ret as gPoint;

            document.Prompt("Enter Second Destination Point:");
            ret = document.ActionUtility.getUserPoint();
            document.Prompt(null);
            if (ret == null || !(ret is gPoint))
            {
                return;
            }
            SDP = ret as gPoint;

            //endln.StartPoint = FSP
            //stln.StartPoint = FDP
            //endln.EndPoint = SSP
            //stln.EndPoint = SDP


            FSP.z = 0.0;
            SSP.z = 0.0;
            FDP.z = 0.0;
            SDP.z = 0.0;

            stln  = new vdLine(FDP, SDP);
            endln = new vdLine(FSP, SSP);

            double scaleFactor = stln.Length() / endln.Length();

            document.CommandAction.CmdScale(vdSel, endln.StartPoint, scaleFactor);
            document.CommandAction.CmdMove(vdSel, endln.StartPoint, stln.StartPoint);
            double ang  = stln.StartPoint.GetAngle(stln.EndPoint);
            double ang1 = endln.StartPoint.GetAngle(endln.EndPoint);

            ang = ang - ang1;
            document.CommandAction.CmdRotate(vdSel, stln.StartPoint, ang);
        }