Example #1
0
        public void cmdCLKSS()
        {
            Editor ed = BaseObjs._editor;

            TypedValue[] tvs = new TypedValue[5];
            SelectionSet ss  = null;

            tvs.SetValue(new TypedValue((int)DxfCode.Start, "INSERT"), 0);
            tvs.SetValue(new TypedValue((int)DxfCode.Operator, "<OR"), 1);
            tvs.SetValue(new TypedValue((int)DxfCode.BlockName, "GradeTag"), 2);
            tvs.SetValue(new TypedValue((int)DxfCode.BlockName, "FlTag"), 3);
            tvs.SetValue(new TypedValue((int)DxfCode.Operator, "OR>"), 4);

            SelectionFilter        sf  = new SelectionFilter(tvs);
            PromptSelectionOptions pso = new PromptSelectionOptions();

            pso.MessageForAdding = "Select callout blocks to link: ";

            PromptSelectionResult psr = ed.GetSelection(pso, sf);

            if (psr.Status == PromptStatus.OK)
            {
                ss = psr.Value;
            }
            else
            {
                return;
            }

            App.executeCLKS(ss);
        }
Example #2
0
        }// activateLdr

        public static void deactivateLdr(string nameLayer, Leader ldr = null)
        {
            using (BaseObjs._acadDoc.LockDocument()) {
                using (Transaction TR = BaseObjs.startTransactionDb()) {
                    if (ldr == null)
                    {
                        TypedValue[] TVs = new TypedValue[2];
                        TVs.SetValue(new TypedValue((int)DxfCode.Start, "LEADER"), 0);
                        TVs.SetValue(new TypedValue((int)DxfCode.LayerName, nameLayer), 1);

                        SelectionSet SS = Select.buildSSet(TVs);
                        foreach (SelectedObject OBJ in SS)
                        {
                            if (OBJ != null)
                            {
                                ldr           = (Leader)TR.GetObject(OBJ.ObjectId, OpenMode.ForWrite);
                                ldr.Modified -= new EventHandler(Ldr_Modified);
                                ldrs.Remove(ldr.ObjectId); ldrs.TrimExcess();
                            }
                        }
                    }
                    else
                    {
                        ldr           = (Leader)ldr.ObjectId.GetObject(OpenMode.ForWrite);
                        ldr.Modified += new EventHandler(Ldr_Modified);
                        ldrs.Remove(ldr.ObjectId); ldrs.TrimExcess();
                    }
                    TR.Commit();
                }
            }
        }// deactivateLdr
Example #3
0
        selectMTextForMoving(string layer, out bool escape)
        {
            escape = true;
            ObjectId id = ObjectId.Null;

            TypedValue[] TVs = new TypedValue[2];

            TVs.SetValue(new TypedValue((int)DxfCode.Start, "MTEXT"), 0);
            TVs.SetValue(new TypedValue((int)DxfCode.LayerName, layer), 1);

            SelectionFilter filter = new SelectionFilter(TVs);

            PromptSelectionOptions pso = new PromptSelectionOptions();

            pso.MessageForAdding = "Select MText to Move";

            PromptSelectionResult PSR = BaseObjs._editor.GetSelection(pso, filter);

            if (PSR.Status == PromptStatus.OK)
            {
                id     = PSR.Value.GetObjectIds()[0];
                escape = false;
            }
            return(id);
        }
Example #4
0
        }// activateMText

        public static void deactivateMText(string nameLayer, MText mTxt = null)
        {
            using (BaseObjs._acadDoc.LockDocument()) {
                using (Transaction TR = BaseObjs.startTransactionDb()) {
                    if (mTxt == null)
                    {
                        TypedValue[] TVs = new TypedValue[2];
                        TVs.SetValue(new TypedValue((int)DxfCode.Start, "MTEXT"), 0);
                        TVs.SetValue(new TypedValue((int)DxfCode.LayerName, nameLayer), 1);
                        SelectionSet SS = Select.buildSSet(TVs);

                        foreach (SelectedObject OBJ in SS)
                        {
                            if (OBJ != null)
                            {
                                mTxt           = (MText)TR.GetObject(OBJ.ObjectId, OpenMode.ForWrite);
                                mTxt.Modified -= new EventHandler(mTxt_Modified);
                                mTxt.Erased   -= new ObjectErasedEventHandler(mTxt_Erased);
                                mTxts.Remove(mTxt.ObjectId); mTxts.TrimExcess();
                            }
                        }
                    }
                    else
                    {
                        mTxt           = (MText)mTxt.ObjectId.GetObject(OpenMode.ForWrite);
                        mTxt.Modified += new EventHandler(mTxt_Modified);
                        mTxt.Erased   += new ObjectErasedEventHandler(mTxt_Erased);
                        mTxts.Remove(mTxt.ObjectId); mTxts.TrimExcess();
                    }
                }
            }
        }// deactivateMText
Example #5
0
        public void TestSelectFilterXdata()
        {
            //获取当前文档编辑器
            Editor ed = Application.DocumentManager.MdiActiveDocument.Editor;

            TypedValue[] tValue = new TypedValue[2];
            //tValue.SetValue(new TypedValue((int)DxfCode.Start, "circle"), 0);
            tValue.SetValue(new TypedValue((int)DxfCode.Start, "LWPOLYLINE"), 0);
            //tValue.SetValue(new TypedValue((int)DxfCode.ExtendedDataRegAppName, "psw"), 1);
            tValue.SetValue(new TypedValue((int)DxfCode.ExtendedDataReal, 20.00), 1);
            //将过滤条件赋给 SelectionFilter 对象
            SelectionFilter sFilter = new SelectionFilter(tValue);
            //请求在图形区域选择对象
            PromptSelectionResult psr;

            psr = ed.SelectAll(sFilter);
            ObjectIdCollection objCollection = new ObjectIdCollection();

            //如果提示状态 OK,说明已选对象
            if (psr.Status == PromptStatus.OK)
            {
                SelectionSet ss = psr.Value;
                Application.ShowAlertDialog("Number of objects selected: " +
                                            ss.Count.ToString());
            }
            else
            {
                ed.WriteMessage("已选择0000个对象");
            }
            //return objCollection;
        }
Example #6
0
        deletePntFromProfile(string strLayer, int lngPntNum)
        {
            TypedValue[] tvs = new TypedValue[3];
            tvs.SetValue(new TypedValue((int)DxfCode.Start, "MTEXT"), 0);
            tvs.SetValue(new TypedValue((int)DxfCode.Text, lngPntNum.ToString()), 1);
            tvs.SetValue(new TypedValue((int)DxfCode.LayerName, strLayer), 2);

            SelectionSet ss = Select.buildSSet(tvs);

            ObjectId[] ids = ss.GetObjectIds();

            ResultBuffer rb = ids[0].getXData("LEADER");

            if (rb == null)
            {
                return;
            }
            tvs = rb.AsArray();

            ids[0].delete();

            ObjectId idLeader = tvs.getObjectId(1);

            idLeader.delete();
        }
Example #7
0
File: Ldr.cs Project: 15831944/EM
        updateLdrXData(ObjectId idLdr)
        {
            ResultBuffer rbLdr = idLdr.getXData(apps.lnkBubsLdrEndPnt);

            TypedValue[] tvs = rbLdr.AsArray();
            Handle       h   = tvs[3].Value.ToString().stringToHandle();

            Point3d pnt3dEnd = idLdr.getEndPnt();

            TypedValue[] tvsLDR = new TypedValue[4];
            tvsLDR.SetValue(new TypedValue(1001, apps.lnkBubsLdrEndPnt), 0);
            tvsLDR.SetValue(new TypedValue(1040, pnt3dEnd.X), 1);
            tvsLDR.SetValue(new TypedValue(1040, pnt3dEnd.Y), 2);
            tvsLDR.SetValue(new TypedValue(1005, h), 3);

            try
            {
                using (BaseObjs._acadDoc.LockDocument())
                {
                    idLdr.setXData(tvsLDR, apps.lnkBubsLdrEndPnt);
                }
            }
            catch (System.Exception ex)
            {
                BaseObjs.writeDebug(ex.Message + " Ldr.cs: line: 299");
            }
        }
Example #8
0
File: xData.cs Project: 15831944/EM
 replaceHandleInXdata(this ObjectId id, string nameApp, Handle hAdd, Handle hDel)
 {
     TypedValue[] tvsNew = null;
     try
     {
         using (Transaction tr = BaseObjs.startTransactionDb())
         {
             ResultBuffer rb = id.getXData(nameApp);
             if (rb == null)
             {
                 return;
             }
             List <Handle> handles = rb.rb_handles();
             int           x       = handles.IndexOf(hDel);
             handles.Insert(x, hAdd);
             handles.Remove(hDel);
             tvsNew = new TypedValue[handles.Count + 1];
             tvsNew.SetValue(new TypedValue(1001, nameApp), 0);
             for (int i = 0; i < handles.Count; i++)
             {
                 tvsNew.SetValue(new TypedValue(1005, handles[i]), i + 1);
             }
             id.clearXData(nameApp);
             id.setXData(tvsNew, nameApp);
             tr.Commit();
         }
     }
     catch (System.Exception ex)
     {
         BaseObjs.writeDebug(ex.Message + " xData.cs: line: 603");
     }
 }
Example #9
0
        public void calc_Area()
        {
            // get current database
            //Document acDoc = Application.DocumentManager.MdiActiveDocument;
            //Database acDb = acDoc.Database;
            Editor acEd = Application.DocumentManager.MdiActiveDocument.Editor;

            // select only polyline
            TypedValue[] acTypValAr = new TypedValue[4];
            acTypValAr.SetValue(new TypedValue((int)DxfCode.Operator, "<or"), 0);
            acTypValAr.SetValue(new TypedValue((int)DxfCode.Start, "LWPOLYLINE"), 1);
            acTypValAr.SetValue(new TypedValue((int)DxfCode.Start, "LINE"), 2);
            acTypValAr.SetValue(new TypedValue((int)DxfCode.Operator, "or>"), 3);
            // Assign the filter criteria to selection filter object
            SelectionFilter acSelFilter = new SelectionFilter(acTypValAr);

            // request for objects to be selectd in drawing area
            PromptSelectionResult acSSPrompt;

            acSSPrompt = acEd.GetSelection(acSelFilter);
            if (acSSPrompt.Status == PromptStatus.OK)
            {
                SelectionSet acSSet = acSSPrompt.Value;
                Application.ShowAlertDialog("Number of objects selected  :" + acSSet.Count.ToString());
            }
            else
            {
                Application.ShowAlertDialog("Number of objects selected  :  0");
            }
        }
Example #10
0
File: Ldr.cs Project: 15831944/EM
        setLdrXData(Point3d pnt3dEnd, ObjectId idLdr, ObjectId idSM)
        {
            bool success = false;

            TypedValue[] tvsLDR = new TypedValue[4];
            tvsLDR.SetValue(new TypedValue(1001, apps.lnkBubsLdrEndPnt), 0);
            tvsLDR.SetValue(new TypedValue(1040, pnt3dEnd.X), 1);
            tvsLDR.SetValue(new TypedValue(1040, pnt3dEnd.Y), 2);
            if (idSM.IsValid)
            {
                tvsLDR.SetValue(new TypedValue(1005, idSM.getHandle()), 3);
            }
            else
            {
                tvsLDR.SetValue(new TypedValue(1005, "0000".stringToHandle()), 3);
            }
            try
            {
                using (BaseObjs._acadDoc.LockDocument())
                {
                    idLdr.setXData(tvsLDR, apps.lnkBubsLdrEndPnt);
                    success = true;
                }
            }
            catch (System.Exception ex)
            {
                BaseObjs.writeDebug(ex.Message + " Ldr.cs: line: 266");
            }
            return(success);
        }
Example #11
0
        getEntityatPoint(Point3d pnt3d, Type type, string layer, double offset = 0.0)
        {
            List <ObjectId> ids = new List <ObjectId>();

            TypedValue[] tvs = new TypedValue[2];

            tvs.SetValue(new TypedValue((int)DxfCode.Start, RXClass.GetClass(type).DxfName), 0);
            tvs.SetValue(new TypedValue((int)DxfCode.LayerName, layer), 1);

            SelectionFilter filter = new SelectionFilter(tvs);
            Point3d         pnt3d1 = new Point3d(pnt3d.X - offset, pnt3d.Y - offset, 0.0);
            Point3d         pnt3d2 = new Point3d(pnt3d.X + offset, pnt3d.Y + offset, 0.0);

            //Draw.addLine(pnt3d1, pnt3d2);

            PromptSelectionResult psr = BaseObjs._editor.SelectCrossingWindow(pnt3d2, pnt3d1, filter);

            if (psr.Status == PromptStatus.OK)
            {
                ObjectId[] idss = psr.Value.GetObjectIds();
                foreach (ObjectId id in idss)
                {
                    ids.Add(id);
                }
            }
            return(ids);
        }
Example #12
0
        updatePntXData(CogoPoint cogoPnt, ObjectId idPoly3d)
        {
            try {
                checkPointXDataXNodes(cogoPnt, apps.lnkBrks);
                ResultBuffer RB0     = cogoPnt.ObjectId.getXData(apps.lnkBrks);
                Handle       hPoly3d = idPoly3d.getHandle();

                if (RB0 != null)
                {
                    List <Handle> handles = RB0.rb_handles();
                    handles.Add(hPoly3d);
                    cogoPnt.ObjectId.clearXData(apps.lnkBrks);
                    cogoPnt.ObjectId.setXData(handles.handles_RB(apps.lnkBrks), apps.lnkBrks);
                }
                else
                {
                    TypedValue[] tvs = new TypedValue[2];
                    tvs.SetValue(new TypedValue(1001, apps.lnkBrks), 0);
                    tvs.SetValue(new TypedValue(1005, hPoly3d), 1);

                    ResultBuffer RBX = new ResultBuffer(tvs);
                    cogoPnt.ObjectId.setXData(tvs, apps.lnkBrks);
                }
            }
            catch (System.Exception ex) {
                BaseObjs.writeDebug(ex.Message + " Grading_xData.cs: line: 192");
            }
        }
Example #13
0
        getEntityatPoint(Point3d pnt3d, List <Type> types, string layer, double offset = 0.0)
        {
            int k = types.Count;

            TypedValue[] TVs = new TypedValue[k + 3];

            TVs.SetValue(new TypedValue((int)DxfCode.Operator, "<OR"), 0);

            for (int i = 0; i < types.Count; i++)
            {
                TVs.SetValue(new TypedValue((int)DxfCode.Start, RXClass.GetClass(types[i]).DxfName), i + 1);
            }

            TVs.SetValue(new TypedValue((int)DxfCode.Operator, "OR>"), k + 1);
            TVs.SetValue(new TypedValue((int)DxfCode.LayerName, layer), k + 2);

            SelectionFilter FILTER = new SelectionFilter(TVs);

            Point3d pnt3d1 = new Point3d(pnt3d.X - offset, pnt3d.Y - offset, 0.0);
            Point3d pnt3d2 = new Point3d(pnt3d.X + offset, pnt3d.Y + offset, 0.0);

            PromptSelectionResult PSR = BaseObjs._editor.SelectCrossingWindow(pnt3d1, pnt3d2, FILTER);

            if (PSR.Status == PromptStatus.OK)
            {
                return(PSR.Value.GetObjectIds());
            }
            return(null);
        }
Example #14
0
        public void TestIntersectWith()
        {
            //获取当前文档编辑器
            Editor ed = Application.DocumentManager.MdiActiveDocument.Editor;

            TypedValue[] tValue = new TypedValue[2];
            tValue.SetValue(new TypedValue((int)DxfCode.Start, "LWPOLYLINE"), 0);
            tValue.SetValue(new TypedValue((int)DxfCode.ExtendedDataReal, 20.00), 1);
            //将过滤条件赋给 SelectionFilter 对象
            SelectionFilter sFilter = new SelectionFilter(tValue);
            //请求在图形区域选择对象
            PromptSelectionResult psr           = ed.SelectAll(sFilter);
            ObjectIdCollection    objCollection = new ObjectIdCollection();

            //如果提示状态 OK,说明已选对象
            if (psr.Status == PromptStatus.OK)
            {
                SelectionSet ss = psr.Value;
                Application.ShowAlertDialog("Number of objects selected: " +
                                            ss.Count.ToString());

                PromptEntityResult per = ed.GetEntity("请选择直线实体");
                ObjectId           lineId;
                if (per.Status != PromptStatus.OK)
                {
                    return;
                }
                lineId = per.ObjectId;
                int      count = 1;
                Database db    = HostApplicationServices.WorkingDatabase;
                using (Transaction trans = db.TransactionManager.StartTransaction())
                {
                    using (Line lineEntity = trans.GetObject(lineId, OpenMode.ForRead) as Line)
                    {
                        foreach (ObjectId id in ss.GetObjectIds())
                        {
                            using (Polyline pline = trans.GetObject(id, OpenMode.ForRead) as Polyline)
                            {
                                Point3dCollection pt3d = new Point3dCollection();
                                lineEntity.IntersectWith(pline, Intersect.OnBothOperands, new Plane(), pt3d, IntPtr.Zero, IntPtr.Zero);
                                if (pt3d.Count > 0)
                                {
                                    ed.WriteMessage("与多段线" + count + ":" + id + "有交点\n");
                                }
                                else
                                {
                                    ed.WriteMessage("与多段线" + count + ":" + id + "没有交点\n");
                                }
                            }
                            count++;
                        }
                    }
                    trans.Commit();
                }
            }
            else
            {
                ed.WriteMessage("已选择0000个对象");
            }
        }
Example #15
0
File: xData.cs Project: 15831944/EM
        updatePntXData(this ObjectId idCgPnt, ObjectId idPoly3d, string nameApp)
        {
            try
            {
                checkPointXDataXNodes(idCgPnt, nameApp);
                Handle hPoly3d = idPoly3d.getHandle();

                ResultBuffer rbo = idCgPnt.getXData(nameApp);

                if (rbo != null)
                {
                    List <Handle> handles = rbo.rb_handles();
                    handles.Add(hPoly3d);
                    idCgPnt.clearXData(nameApp);
                    idCgPnt.setXData(handles, nameApp);
                }
                else
                {
                    TypedValue[] TVs = new TypedValue[2];
                    TVs.SetValue(new TypedValue(1001, nameApp), 0);
                    TVs.SetValue(new TypedValue(1005, hPoly3d), 1);

                    idCgPnt.setXData(TVs, nameApp);
                }
            }
            catch (System.Exception ex)
            {
                BaseObjs.writeDebug(ex.Message + " xData.cs: line: 677");
            }
        }
Example #16
0
        private void Button1_Click(object sender, EventArgs e)
        {
            var doc     = Application.DocumentManager.MdiActiveDocument;
            var db      = doc.Database;
            var ed      = doc.Editor;
            int nfilter = 1;

            if (cbo_linetype.Text != "ALL")
            {
                nfilter = 2;
            }
            TypedValue[] acTypValAr = new TypedValue[nfilter];
            acTypValAr.SetValue(new TypedValue((int)DxfCode.LayerName, comboBox1.Text), 0);
            if (cbo_linetype.Text != "ALL")
            {
                acTypValAr.SetValue(new TypedValue((int)DxfCode.Start, cbo_linetype.Text), 1);
            }

            SelectionFilter filter = new SelectionFilter(acTypValAr);

            var selection = ed.GetSelection(filter);

            if (selection.Status != PromptStatus.OK)
            {
                return;
            }

            if (txt_tl.Text != "" & comboBox1.Text != "")
            {
                int tl = Convert.ToInt32(txt_tl.Text);
                using (var tr = db.TransactionManager.StartTransaction())
                {
                    // use Linq queries to get lengths by type in a dictionary
                    var lengthes = selection.Value
                                   .Cast <SelectedObject>()
                                   .Select(so => (Curve)tr.GetObject(so.ObjectId, OpenMode.ForRead))
                                   .ToLookup(curve => curve.GetType().Name, curve => curve.GetDistanceAtParameter(curve.EndParam) * tl)
                                   .ToDictionary(group => group.Key, group => group.Sum());

                    // print results
                    foreach (var entry in lengthes)
                    {
                        ed.WriteMessage($"\n{entry.Key,-12} = {entry.Value}");
                        string[] row = { comboBox1.Text, Math.Round((entry.Value), 2).ToString() };
                        dgv.Rows.Add(row);
                    }

                    ed.WriteMessage($"\nTotal Length = {lengthes.Values.Sum()}");
                    sum_lenght = lengthes.Values.Sum();
                    tr.Commit();
                }
                Application.DisplayTextScreen = true;
            }
            else
            {
                MessageBox.Show("Bạn phải nhập tỉ lệ bản vẽ!");
            }

            txt_toolstrip.Text = "SUM = " + sum_lenght.ToString();
        }
Example #17
0
        selectBlkRefs(string strBlkName, bool selectAll = true)
        {
            TypedValue[] TVs = new TypedValue[2];
            TVs.SetValue(new TypedValue((int)DxfCode.Start, "INSERT"), 0);
            TVs.SetValue(new TypedValue((int)DxfCode.BlockName, strBlkName), 1);

            return(buildSSetBase(TVs, selectAll));
        }// selectBlkRefs
Example #18
0
        updateSTAKE_PNTS(ObjectId idDictSTAKE_PNTS)
        {
            List <uint>   lngPntNums     = new List <uint>();
            List <Handle> strAlignHandle = new List <Handle>();
            int           k = 0;

            using (Transaction tr = BaseObjs.startTransactionDb())
            {
                DBDictionary objDictSTAKE_PNTS = (DBDictionary)idDictSTAKE_PNTS.GetObject(OpenMode.ForRead);

                if (objDictSTAKE_PNTS.Count == 0)
                {
                    return;
                }

                k = objDictSTAKE_PNTS.Count;

                for (int i = 0; i < k; i++)
                {
                    List <DBDictionaryEntry> entries = Dict.getEntries(idDictSTAKE_PNTS);
                    foreach (DBDictionaryEntry entry in entries)
                    {
                        ResultBuffer rb = Dict.getXRec(idDictSTAKE_PNTS, entry.Key);
                        if (rb == null)
                        {
                            continue;
                        }
                        TypedValue[] tvs = rb.AsArray();
                        lngPntNums.Add(uint.Parse(tvs[0].Value.ToString()));
                        strAlignHandle.Add(tvs[1].Value.ToString().stringToHandle());
                    }
                }
                idDictSTAKE_PNTS.delete();
                tr.Commit();
            }

            bool exists = false;

            idDictSTAKE_PNTS = Dict.getNamedDictionary("STAKE_PNTS", out exists);  //returns id of new dictionary

            Autodesk.Civil.ApplicationServices.CivilDocument civDoc =
                (Autodesk.Civil.ApplicationServices.CivilDocument)Autodesk.Civil.ApplicationServices.CivilApplication.ActiveDocument;

            for (int i = 0; i < k; i++)
            {
                ObjectId idCgPnt = civDoc.CogoPoints.GetPointByPointNumber((uint)lngPntNums[i]);
                if (!idCgPnt.IsValid)
                {
                    continue;
                }

                TypedValue[] tv = new TypedValue[2];
                tv.SetValue(new TypedValue((int)DxfCode.Int32, lngPntNums[i]), 0);
                tv.SetValue(new TypedValue(1005, strAlignHandle[i]), 1);

                Dict.addXRec(idDictSTAKE_PNTS, idCgPnt.ToString(), tv);
            }
        }
Example #19
0
        AVG(ObjectId idPoly, Point3d pnt3dCEN, double dblSlope, double dblPadElev, bool boolSetPointAtCenter, Point3d pnt3dTAR)
        {
            ObjectIdCollection idsPoly3d = new ObjectIdCollection();

            double   dblDist = 0.0;
            uint     pntNum;
            ObjectId idPoly3d = ObjectId.Null;

            switch (boolSetPointAtCenter)
            {
            case true:
                pnt3dCEN.setPoint(out pntNum, "CPNT-ON");
                break;

            case false:

                pnt3dCEN = new Point3d(pnt3dCEN.X, pnt3dCEN.Y, dblPadElev);

                if (pnt3dTAR != Pub.pnt3dO)
                {
                    dblDist = pnt3dCEN.getDistance(pnt3dTAR);
                }

                using (BaseObjs._acadDoc.LockDocument())
                {
                    pnt3dCEN.setPoint(out pntNum, "CPNT-ON");

                    if (pnt3dTAR != Pub.pnt3dO)
                    {
                        pnt3dTAR = new Point3d(pnt3dTAR.X, pnt3dTAR.Y, pnt3dCEN.Z + dblDist * dblSlope);
                        pnt3dTAR.setPoint(out pntNum, "CPNT-ON");
                    }

                    idsPoly3d = DrawFloorSlab.build3dPolyFloorSlab(idPoly, pnt3dCEN, pnt3dTAR, dblSlope, "CPNT-ON", "CPNT-BRKLINE", "AVG");

                    int numBldg = updateDictGRADEDOCK(idsPoly3d[0].getHandle(), dblSlope, pnt3dCEN, pnt3dTAR);

                    modSurface("CPNT-ON", "Finish Surface", idsPoly3d, true);

                    TypedValue[] tvs = new TypedValue[3];
                    tvs.SetValue(new TypedValue(1001, "AVG"), 0);
                    tvs.SetValue(new TypedValue(1000, "BLDG"), 1);
                    tvs.SetValue(new TypedValue(1070, numBldg), 2);           //Number assigned; to building

                    foreach (ObjectId id in idsPoly3d)
                    {
                        id.setXData(tvs, "AVG");
                    }
                }
                break;
            }

            using (BaseObjs._acadDoc.LockDocument())
            {
                BaseObjs.regen();
            }
        }
Example #20
0
        public void TextBatchAlign()
        {
            Database db = HostApplicationServices.WorkingDatabase;
            Editor   ed = Application.DocumentManager.MdiActiveDocument.Editor;

            ed.WriteMessage("\n 欢迎使用文字批量对齐程序!!!");

            // 选择一个基准点
            Point3d point = this.SelectPoint("\n>>>>请选择基准点!!");

            // 创建一个 TypedValue 数组来定义过滤器条件
            //TypedValue[] typeValue = new TypedValue[1];
            TypedValue[] typeValue = new TypedValue[2];
            // 过滤条件 只选择单行文本
            typeValue.SetValue(new TypedValue(0, "TEXT"), 0);
            typeValue.SetValue(new TypedValue((int)DxfCode.Text, "数据智能笔记A"), 1);
            // 选择集 区域手动选择方式
            SelectionSet sSet = this.SelectSsGet("GetSelection", null, typeValue);

            // 判断选择集是否为空
            if (sSet != null)
            {
                // 如果选择集不为空 遍历选择图元对象
                foreach (SelectedObject sSetObj in sSet)
                {
                    // 开启事务处理
                    using (Transaction trans = db.TransactionManager.StartTransaction())
                    {
                        // 单行文本对象 打开方式为写
                        DBText dbText = trans.GetObject(sSetObj.ObjectId, OpenMode.ForWrite) as DBText;
                        // 垂直方向左对齐
                        dbText.HorizontalMode = TextHorizontalMode.TextLeft;
                        // 判断对齐方式是否是左对齐
                        if (dbText.HorizontalMode != TextHorizontalMode.TextLeft)
                        {
                            // 对齐点
                            Point3d aliPoint = dbText.AlignmentPoint;
                            ed.WriteMessage("\n" + aliPoint.ToString());
                            // 位置点
                            Point3d position = dbText.Position;
                            dbText.AlignmentPoint = new Point3d(point.X, position.Y, 0);
                        }
                        // 如果是左对齐只需要调整插入点
                        else
                        {
                            Point3d position = dbText.Position;
                            dbText.Position = new Point3d(point.X, position.Y, 0);
                        }
                        trans.Commit();
                    }
                }
            }
        }
        private void button2_Click(object sender, EventArgs e)
        {
            ed.WriteMessage("\n欢迎使用单行文本批量对齐程序!!!");

            // 选择基准点
            Point3d point = this.SelectPoint("\n>>>>>>>>>>请选择文本对齐基准点!");

            // 设置选择集过滤条件
            TypedValue[] typedValue = new TypedValue[2];

            typedValue.SetValue(new TypedValue(0, "TEXT"), 0);
            typedValue.SetValue(new TypedValue((int)DxfCode.Text, "数据智能笔记"), 1);// 只选择特定文本 可以相应更改

            // 选择集选择方式
            SelectionSet sSet = this.SelectSsGet("GetSelection", null, typedValue);

            // 判断选择集是否有效
            if (sSet != null)
            {
                // 遍历选取图元对象
                foreach (SelectedObject sSetObj in sSet)
                {
                    // 开启事务处理
                    using (Transaction trans = db.TransactionManager.StartTransaction())
                    {
                        // 单行文本对象 打开方式为写
                        DBText dbText = trans.GetObject(sSetObj.ObjectId, OpenMode.ForWrite) as DBText;
                        // 垂直方向左对齐
                        dbText.HorizontalMode = TextHorizontalMode.TextLeft;
                        // 判断对齐方式是否是左对齐
                        if (dbText.HorizontalMode != TextHorizontalMode.TextLeft)
                        {
                            // 对齐点
                            Point3d aliPoint = dbText.AlignmentPoint;
                            ed.WriteMessage("\n" + aliPoint.ToString());

                            // 位置点
                            Point3d position = dbText.Position;
                            dbText.AlignmentPoint = new Point3d(point.X, position.Y, 0);
                        }

                        else
                        {
                            Point3d position = dbText.Position;
                            dbText.Position = new Point3d(point.X, position.Y, 0);
                        }

                        trans.Commit();
                    }
                }
            }
        }
Example #22
0
        createGridAlign()
        {
            string strLayerName = null;

            ObjectId idPoly = Stake_Grid.createBldgPoly();

            if ((idPoly == ObjectId.Null))
            {
                return(ObjectId.Null);
            }

            int i = idPoly.getLayer().IndexOf("GRID");

            string strAlignName = idPoly.getLayer().Substring(i);

            strLayerName = "STAKE" + "-" + strAlignName;
            Alignment objAlign = null;

            try
            {
                objAlign = Align.addAlignmentFromPoly(strAlignName, strLayerName, idPoly, "STAKE", "STAKE", false);
            }
            catch (System.Exception)
            {
                objAlign = Align.addAlignmentFromPoly(strAlignName, strLayerName, idPoly, "Standard", "Standard", false);
            }

            objAlign.ReferencePointStation = 100;

            fStake.ACTIVEALIGN = objAlign;
            fStake.HandleAlign = objAlign.Handle;
            fStake.objectID    = objAlign.ObjectId;

            TypedValue[] tvs = new TypedValue[2];
            tvs.SetValue(new TypedValue(1001, "CLASS"), 0);
            tvs.SetValue(new TypedValue(1000, fStake.ClassObj), 1);

            objAlign.ObjectId.setXData(tvs, "CLASS");

            ResultBuffer rb = idPoly.getXData("GRID");

            tvs = rb.AsArray();

            objAlign.ObjectId.setXData(tvs, "GRID");

            idPoly.delete();

            return(objAlign.ObjectId);
        }
Example #23
0
        public SelectionSet selectPoints(string message)
        {
            Document DOC = Application.DocumentManager.MdiActiveDocument;
            Database DB  = DOC.Database;
            Editor   ED  = Application.DocumentManager.MdiActiveDocument.Editor;

            TypedValue[] TVs = new TypedValue[1];
            TVs.SetValue(new TypedValue((int)DxfCode.Start, "AECC_COGO_POINT"), 0);

            SelectionFilter        FILTER = new SelectionFilter(TVs);
            PromptSelectionOptions PSO    = new PromptSelectionOptions();

            PSO.MessageForAdding = message;

            PromptSelectionResult PSR = null;

            using (Transaction TR = DB.TransactionManager.StartTransaction())
            {
                try
                {
                    PSR = ED.GetSelection(PSO, FILTER);
                }
                catch (System.Exception ex) {
                    Application.ShowAlertDialog(ex.Message + " DragLabel.cs: line: 73");
                    BaseObjs.writeDebug(ex.Message + " DragLabel.cs: line: 73");
                }
                if (PSR.Status == PromptStatus.OK)
                {
                    return(PSR.Value);
                }
            }
            return(null);
        } // selectPoints
Example #24
0
        }     //eof

        private SelectionFilter getSelectionFilter()
        {
            TypedValue[] typedValue = new TypedValue[1];
            typedValue.SetValue(new TypedValue((int)DxfCode.Start, "*TEXT"), 0);

            return(new SelectionFilter(typedValue));
        }//eof
        public void DLJS()
        {
            Document doc = Application.DocumentManager.MdiActiveDocument;
            Database db  = doc.Database;
            Editor   ed  = doc.Editor;

            PubVal.zongdianliang = 0;
            double val;

            using (Transaction trans = db.TransactionManager.StartTransaction())
            {
                TypedValue[] typeval = new TypedValue[1];
                typeval.SetValue(new TypedValue((int)DxfCode.Start, "TEXT"), 0);

                SelectionFilter sf = new SelectionFilter(typeval);

                PromptSelectionResult psr = ed.GetSelection(sf);
                if (psr.Status == PromptStatus.OK)
                {
                    SelectionSet ss = psr.Value;

                    foreach (ObjectId id in ss.GetObjectIds())
                    {
                        DBText dBText = trans.GetObject(id, OpenMode.ForRead) as DBText;
                        val = double.Parse(Tools.IntegerString(dBText.TextString)) / 1000;
                        PubVal.zongdianliang += val;
                    }
                }
                trans.Commit();
            }

            DLJSForm f1 = new DLJSForm();

            f1.ShowDialog();
        }
        public static bool create(this ObjVerEx objVerEx, int typeId, int?createdby_mfuserid = null)
        {
            try {
                ObjectVersionAndProperties objVerAndProps =
                    objVerEx.Vault.ObjectOperations.CreateNewObjectEx(typeId, objVerEx.Properties, null, false, createdby_mfuserid == null);

                int objVerID   = objVerAndProps.ObjVer.ID;
                int objVersion = objVerAndProps.ObjVer.Version;

                if (createdby_mfuserid != null)
                {
                    TypedValue created_by = new TypedValue();
                    created_by.SetValue(MFDataType.MFDatatypeLookup, createdby_mfuserid.Value);
                    objVerAndProps = objVerEx.Vault.ObjectPropertyOperations.SetCreationInfoAdmin(objVerAndProps.ObjVer, true, created_by, false, null);
                    ObjectVersion objver = objVerEx.Vault.ObjectOperations.CheckIn(objVerAndProps.ObjVer);
                    objVerID   = objver.ObjVer.ID;
                    objVersion = objver.ObjVer.Version;
                }
                objVerEx.ObjVer.ID      = objVerID;
                objVerEx.ObjVer.Version = objVersion;
                objVerEx.ObjVer.Type    = objVerAndProps.ObjVer.Type;

                return(true);
            } catch (Exception exception) {
                throw exception;
            }
        }
        public static OT_Document create_multifile_doc(this OT_Document doc, int?createdby_mfuserid = null, params string[] files)
        {
            Vault             vault       = doc.objVerEx.Vault;
            ObjVerEx          version     = doc.objVerEx;
            SourceObjectFiles sourceFiles = new SourceObjectFiles();

            foreach (string file in files)
            {
                FileInfo fi = new FileInfo(file);
                sourceFiles.AddFile(fi.Name.Replace(fi.Extension, ""), fi.Extension.Replace(".", ""), fi.FullName);
            }
            ObjectVersionAndProperties obj = vault.ObjectOperations.CreateNewObjectEx(OT_Document.TypeID, version.Properties, sourceFiles, false,
                                                                                      createdby_mfuserid == null);

            if (createdby_mfuserid != null)
            {
                TypedValue created_by = new TypedValue();
                created_by.SetValue(MFDataType.MFDatatypeLookup, createdby_mfuserid.Value);
                obj = doc.objVerEx.Vault.ObjectPropertyOperations.SetCreationInfoAdmin(obj.ObjVer, true, created_by, false, null);
                doc.objVerEx.Vault.ObjectOperations.CheckIn(obj.ObjVer);
            }

            return(new OT_Document()
            {
                objVerEx = new ObjVerEx(obj.Vault, obj)
            });
        }
Example #28
0
        checkForEntityatPoint(Point3d pnt3d, ObjectId idObj, Type type)
        {
            bool match = false;

            TypedValue[] TVs = new TypedValue[1];
            TVs.SetValue(new TypedValue((int)DxfCode.Start, RXClass.GetClass(type).DxfName), 0);
            SelectionFilter FILTER = new SelectionFilter(TVs);

            PromptSelectionResult PSR = BaseObjs._editor.SelectCrossingWindow(pnt3d, pnt3d, FILTER);

            if (PSR.Status == PromptStatus.OK)
            {
                ObjectId[] ids = PSR.Value.GetObjectIds();

                foreach (ObjectId id in ids)
                {
                    if (id == idObj)
                    {
                        match = true;
                        break;
                    }
                }
            }
            return(match);
        }
Example #29
0
        public void HandleWorkflowOneFinalState(StateEnvironment env)
        {
            // Update the local collection of property values to
            // move it to the next workflow.
            // NOTE: SetProperty only updates the in-memory copy, not the server. The subsequent call to SaveProperties actually updates the object.
            // NOTE: Using SaveProperty instead would update the version on the server immediately. Multiple calls to SaveProperty can slow your code down.
            env.ObjVerEx.SetProperty((int)MFBuiltInPropertyDef.MFBuiltInPropertyDefWorkflow,
                                     MFDataType.MFDatatypeLookup,
                                     this.config.WorkflowTwo);

            // Update the local collection of property values to
            // move it to the correct workflow state.
            // NOTE: SetProperty only updates the in-memory copy, not the server. The subsequent call to SaveProperties actually updates the object.
            // NOTE: Using SaveProperty instead would update the version on the server immediately. Multiple calls to SaveProperty can slow your code down.
            env.ObjVerEx.SetProperty((int)MFBuiltInPropertyDef.MFBuiltInPropertyDefState,
                                     MFDataType.MFDatatypeLookup,
                                     this.config.WorkflowTwoStateInitial);

            // Save the properties.
            // NOTE: Needed because of the SetProperty calls above.
            env.ObjVerEx.SaveProperties();

            // Ensure the last modified is correct.
            // NOTE: If this was not called then the object would show last modifed by "(M-Files Server)".
            var lastModifiedBy = new TypedValue();

            lastModifiedBy.SetValue(MFDataType.MFDatatypeLookup, env.CurrentUserID);
            env.Vault.ObjectPropertyOperations.SetLastModificationInfoAdmin(env.ObjVer,
                                                                            UpdateLastModifiedBy: true,
                                                                            LastModifiedBy: lastModifiedBy,
                                                                            UpdateLastModified: false,
                                                                            LastModifiedUtc: null);
        }
        public static SelectionSet Aecc_Material(string message)
        {
            Document acDoc   = Application.DocumentManager.MdiActiveDocument;
            Database acCurDb = acDoc.Database;
            Editor   ed      = acDoc.Editor;

            ed.WriteMessage(message);

            TypedValue[] acTypValAr = new TypedValue[1];
            acTypValAr.SetValue(new TypedValue((int)DxfCode.Start, "AECC_QUANTITY_TAKEOFF_MATERIAL_SECTION"), 0);

            // Assign the filter criteria to a SelectionFilter object
            SelectionFilter acSelFtr = new SelectionFilter(acTypValAr);

            // Request for objects to be selected in the drawing area
            PromptSelectionResult acSSPrompt;

            acSSPrompt = ed.GetSelection(acSelFtr);

            // If the prompt status is OK, objects were selected
            if (acSSPrompt.Status == PromptStatus.OK)
            {
                SelectionSet acSSet = acSSPrompt.Value;
                //Application.ShowAlertDialog("Number of objects selected: " + acSSet.Count.ToString());
                return(acSSet);
            }
            else
            {
                Application.ShowAlertDialog("Number of objects selected: 0");
            }
            return(null);
        }
Example #31
0
 public void AddLinesToGroup()
 {
     Editor editor = dwg.Editor;
     using (Transaction acadTrans = CurrentDatabase.TransactionManager.StartTransaction())
     {
         GroupsInformation groupsEntities = new GroupsInformation(acadTrans, CurrentDatabase);
         //Спрашиваем имя группы
         string GroupName = AskForGroup(true, groupsEntities.GroupList);
         if (GroupName != null)
         {
             // Готовим опции для запроса элементов группы
             PromptSelectionOptions acadSelectionOptions = new PromptSelectionOptions();
             acadSelectionOptions.MessageForAdding = "\nУкажите объекты группы " + GroupName;
             //Выделять будем только линии и полилинии. Создаем фильтр
             TypedValue[] acadFilterValues = new TypedValue[4];
             acadFilterValues.SetValue(new TypedValue((int)DxfCode.Operator, "<OR"),0);
             acadFilterValues.SetValue(new TypedValue((int)DxfCode.Start, "LINE"),1);
             acadFilterValues.SetValue(new TypedValue((int)DxfCode.Start, "LWPOLYLINE"),2);
             acadFilterValues.SetValue(new TypedValue((int)DxfCode.Operator, "OR>"),3);
             SelectionFilter acadSelFilter = new SelectionFilter(acadFilterValues);
             //Используем фильтр для выделения
             PromptSelectionResult acadSelSetPrompt = dwg.Editor.GetSelection(acadSelectionOptions, acadSelFilter);
             //Если выбраны объекты - едем дальше
             if (acadSelSetPrompt.Status == PromptStatus.OK)
             {
                 // Формируем коллекцию выделенных объектов
                 SelectionSet acadSelectedObjects = acadSelSetPrompt.Value;
                 // Проходим по каждому объекту в выделении
                 foreach (SelectedObject selectedObj in acadSelectedObjects)
                 {
                     if (selectedObj!=null)
                     {
                         groupsEntities.AppendGroupToObject(selectedObj.ObjectId, GroupName);
                     }
                 }
             }
         }
         acadTrans.Commit();
     }
 }
Example #32
0
        public static void SelectTables(string msg)
        {
            Document acDoc = Application.DocumentManager.MdiActiveDocument; //Текущий документ.
            Editor acDocEd = acDoc.Editor; // Editor текущего документа.
            Database acDocDb = acDoc.Database; // Database текущего документа.

            Dictionary<string, string> globalVolumesNamesAndUnits = new Dictionary<string, string>(); //Наименования объемов и единиц измерения
            Dictionary<double, ObjectId> globalPKsAndObjectIds = new Dictionary<double, ObjectId>(); //ПК для подсчета объемов и соответвующие им идентификаторы определений блоков с таблицами

            using (acDoc.LockDocument()) // блокировка документа
            {
                using (Transaction acTrans = acDocDb.TransactionManager.StartTransaction()) // Начало Транзакции.
                {
                    //открываем таблицу блоков чертежа для чтения
                    BlockTable acDocDbBlockTable = (BlockTable)acTrans.GetObject(acDocDb.BlockTableId, OpenMode.ForRead);

                    // Создание TypedValue array для определение параметров фильтра.
                    var acTypedValueArray = new TypedValue[2];
                    acTypedValueArray.SetValue(new TypedValue((int)DxfCode.Start, "INSERT"), 0); // Параметр фильтра под номером 0.
                    acTypedValueArray.SetValue(new TypedValue((int)DxfCode.LayerName, "acVlm_*"), 1); // Параметр фильтра под номером 1.

                    // Assign the filter criteria to a SelectionFilter object
                    var acSelectionFilterObject = new SelectionFilter(acTypedValueArray);

                    // Задание опций выбора объектов.
                    var acSelectionSetOptions = new PromptSelectionOptions
                    {
                        AllowDuplicates = false,
                        RejectObjectsOnLockedLayers = true,
                        //SingleOnly = true,
                        MessageForAdding = msg
                    };

                    // Выбор объектов
                    var acSelectionSetPrompt = acDocEd.GetSelection(acSelectionSetOptions, acSelectionFilterObject);

                    if (acSelectionSetPrompt.Status == PromptStatus.OK)
                    {
                        var acSelectionSet = acSelectionSetPrompt.Value;
                        //MessageBox.Show("Количество выбранных объектов = " + acSelectionSet.Count.ToString(), myCommands.msgBoxCaption_acVolume);
                        // ReSharper disable once LoopCanBeConvertedToQuery

                        //Перебираем объекты и определяем количество наименований объемов, а так же количество пикетов для посчета объемов

                        foreach (SelectedObject acSelectedObject in acSelectionSet)
                        {
                            if (acSelectedObject != null)
                            {
                                Entity acEnt = acTrans.GetObject(acSelectedObject.ObjectId, OpenMode.ForWrite) as Entity;

                                if (acEnt != null)
                                {
                                    BlockReference objBlockReference = (BlockReference)acEnt;
                                    if (objBlockReference.Layer.Contains("acVlm_")) // проверяем, принадлежит ли выбранный блок к нужному слою
                                    {
                                        ObjectId btrObjectId = acDocDbBlockTable[objBlockReference.Name]; //получаем ObjectId определения блока по имени его вхождения (objBlockReference.Name)
                                        BlockTableRecord objBlockTableRecord = (BlockTableRecord)btrObjectId.GetObject(OpenMode.ForRead); //Конвертируем объект в определние блока objBlockTableRecord

                                        //определяем количество таблиц с валидными пикетами
                                        foreach (ObjectId objObjectId in objBlockReference.AttributeCollection) //для каждого объекта в коллекции атрибутов objBlockReference.AttributeCollection
                                        {
                                            AttributeReference objAttributeReference = (AttributeReference)acTrans.GetObject(objObjectId, OpenMode.ForRead); //конвертируем объект в AttributeReference
                                            if (objAttributeReference != null)
                                            {
                                                if (objAttributeReference.Tag == "ПК" & ConvertStringToDouble(objAttributeReference.TextString) >= 0) // для каждого атрибута с Тэгом="ПК" и значением >= 0
                                                {
                                                    if (!globalPKsAndObjectIds.ContainsKey(ConvertStringToDouble(objAttributeReference.TextString.Trim())))
                                                    {
                                                        globalPKsAndObjectIds.Add(ConvertStringToDouble(objAttributeReference.TextString.Trim()), btrObjectId);
                                                    }
                                                    else
                                                    {
                                                        MessageBox.Show(
                                                            "Обнаружены таблицы объемов с одиниковым значением ПК.\nВозможны ошибки в подсчете объемов.\nУдалите дублирующиеся таблицы.",
                                                            "acVolume", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                                                    }
                                                    //MessageBox.Show("BlockReference.Name: " + objBlockReference.Name + "\nПК = " + objAttributeReference.TextString);
                                                }
                                            }
                                        }

                                        foreach (ObjectId objObjectIdInBtr in objBlockTableRecord) //перебираем объекты в определении блока
                                        {
                                            try //ловим таблицу
                                            {
                                                Table objTable = (Table)objObjectIdInBtr.GetObject(OpenMode.ForRead);
                                                for (int rowIndex = 1; rowIndex < objTable.Rows.Count; rowIndex++)
                                                {
                                                    string volumeName = objTable.Cells[rowIndex, 0].TextString.Trim();
                                                    string volumeUnit = objTable.Cells[rowIndex, 1].TextString.Trim();

                                                    if (!globalVolumesNamesAndUnits.ContainsKey(volumeName))
                                                    {
                                                        globalVolumesNamesAndUnits.Add(volumeName, volumeUnit);
                                                    }
                                                }
                                                //MessageBox.Show(objTable.Cells[0, 0].TextString);
                                            }
                                            catch
                                            { //throw;
                                            }

                                            //try //ловим атрибут
                                            //{
                                            //    AttributeDefinition objAttributeDefinition = (AttributeDefinition)objObjectIdInBTR.GetObject(OpenMode.ForRead);
                                            //    //MessageBox.Show(objAttributeDefinition.Tag);
                                            //}
                                            //catch
                                            //{ //throw; 
                                            //}
                                        }
                                    }
                                }
                            }
                        }
                        // определяем количество строк и столбцов в string[,] globalVolumesTable - будующей попикетной ведомости
                        int globalRowCount = 2 + (globalPKsAndObjectIds.Count - 1) * 2 + 1 + 1; // Заголовок + (Количество ПК - 1)*2 + строка с последним ПК + строка суммы
                        int globalColumnCount = 2 + globalVolumesNamesAndUnits.Count * 2; // (столбцы ПК и Длина участка) + столбцы собъемами * 2
                        string[,] globalVolumesTable = new string[globalRowCount, globalColumnCount];

                        //Заполняем заголовки и ПК в string[,] globalVolumesTable - будующей попикетной ведомости
                        globalVolumesTable[0, 0] = "ПК+";
                        globalVolumesTable[0, 1] = "Длина участка, м";
                        globalVolumesTable[globalRowCount - 1, 0] = "ВСЕГО:";
                        //Заполняем наименования объемов и единицы измерения
                        for (int i = 0; i < globalVolumesNamesAndUnits.Count; i++)
                        {
                            globalVolumesTable[0, 2 + i * 2] = globalVolumesNamesAndUnits.ElementAt(i).Key;
                            globalVolumesTable[1, 2 + i * 2] = globalVolumesNamesAndUnits.ElementAt(i).Value;
                            switch (globalVolumesNamesAndUnits.ElementAt(i).Value)
                            {
                                case "м":
                                    globalVolumesTable[1, 2 + i * 2 + 1] = "м2";
                                    break;

                                case "м2":
                                    globalVolumesTable[1, 2 + i * 2 + 1] = "м3";
                                    break;
                            }
                        }
                        //Сортируем ПК в порядке убывания
                        globalPKsAndObjectIds = globalPKsAndObjectIds.OrderBy(pair => pair.Key).ToDictionary(pair => pair.Key, pair => pair.Value);
                        // Заполняем пикеты
                        for (int i = 0; i < globalPKsAndObjectIds.Count; i++)
                        {
                            globalVolumesTable[2 + i * 2, 0] = Convert.ToString(Math.Round(globalPKsAndObjectIds.ElementAt(i).Key, 2), CultureInfo.InvariantCulture);
                        }

                        //Получаем из Dictionary globalVolumesNamesAndUnits список List<string> globalVolumesNames
                        List<string> globalVolumesNames = globalVolumesNamesAndUnits.Select(itm => itm.Key).ToList();
                        //List<double> globalPKs = globalPKsAndObjectIds.Select(itm => itm.Key).ToList();
                        List<ObjectId> globalObjectIds = globalPKsAndObjectIds.Select(itm => itm.Value).ToList();

                        //Перебираем таблицы и добавляем объемы в string[,] globalVolumesTable
                        for (int i = 0; i < globalPKsAndObjectIds.Count; i++)
                        {
                            ObjectId btrObjectId = globalPKsAndObjectIds.ElementAt(i).Value; //получаем ObjectId
                            BlockTableRecord objBlockTableRecord =
                                (BlockTableRecord)btrObjectId.GetObject(OpenMode.ForRead);
                            //Конвертируем объект в определние блока objBlockTableRecord
                            foreach (ObjectId objObjectIdInBtr in objBlockTableRecord) //перебираем объекты в определении блока
                            {
                                try //ловим таблицу
                                {
                                    Table objTable = (Table)objObjectIdInBtr.GetObject(OpenMode.ForRead);
                                    for (int rowIndex = 1; rowIndex < objTable.Rows.Count; rowIndex++)
                                    {
                                        string volumeName = objTable.Cells[rowIndex, 0].TextString.Trim();
                                        if (globalVolumesNames.Contains(volumeName) & globalPKsAndObjectIds.ContainsValue(btrObjectId))
                                        {
                                            int volumeColumn = 2 + globalVolumesNames.IndexOf(volumeName) * 2;
                                            int volumeRow = 2 + globalObjectIds.IndexOf(btrObjectId) * 2;
                                            globalVolumesTable[volumeRow, volumeColumn] = objTable.Cells[rowIndex, 2].Value.ToString();
                                        }
                                    }
                                    //MessageBox.Show(objTable.Cells[0, 0].TextString);
                                }
                                catch
                                {
                                    // ignored }
                                }
                            }
                        }

                        //считаем расстояния для предпросмотра в DataGrid

                        for (int rowIndex = 3; rowIndex < globalVolumesTable.GetLength(0) - 2; rowIndex = rowIndex + 2)
                        {
                            double nextItem = ConvertStringToDouble(globalVolumesTable[rowIndex + 1, 0]);
                            double previousItem = ConvertStringToDouble(globalVolumesTable[rowIndex - 1, 0]);
                            double lengthItem = nextItem - previousItem;
                            globalVolumesTable[rowIndex, 1] = Convert.ToString(Math.Round(lengthItem, 2), CultureInfo.InvariantCulture);
                        }

                        //считаем объемы между поперечниками для предпросмотра в DataGrid

                        for (int columnIndex = 3; columnIndex < globalVolumesTable.GetLength(1); columnIndex = columnIndex + 2)
                        {
                            for (int rowIndex = 3; rowIndex < globalVolumesTable.GetLength(0) - 2; rowIndex = rowIndex + 2)
                            {
                                double nextItem = ConvertStringToDouble(globalVolumesTable[rowIndex + 1, columnIndex - 1]);
                                double previousItem = ConvertStringToDouble(globalVolumesTable[rowIndex - 1, columnIndex - 1]);
                                double volume = (nextItem + previousItem) / 2.0d * ConvertStringToDouble(globalVolumesTable[rowIndex, 1]);
                                globalVolumesTable[rowIndex, columnIndex] = Convert.ToString(Math.Round(volume, 2), CultureInfo.InvariantCulture);
                            }
                        }

                        //считаем итоги
                        for (int columnIndex = 3; columnIndex < globalVolumesTable.GetLength(1); columnIndex = columnIndex + 2)
                        {
                            double columnVolume = 0.0d;
                            for (int rowIndex = 3; rowIndex < globalVolumesTable.GetLength(0) - 2; rowIndex = rowIndex + 2)
                            {
                                columnVolume = columnVolume + ConvertStringToDouble(globalVolumesTable[rowIndex, columnIndex]);
                            }
                            globalVolumesTable[globalVolumesTable.GetLength(0) - 1, columnIndex] = Convert.ToString(Math.Round(columnVolume, 2), CultureInfo.InvariantCulture);
                        }

                        //Отладочные сообщения
                        //MessageBox.Show("Выбрано блоков " + acSelectionSet.Count + ".\nИз них таблиц с пикетажем " + globalPKsAndObjectIds.Count);
                        //string str1 = "Перечень ПК и ObjectIds:\n";
                        //for (int i = 0; i < globalPKsAndObjectIds.Count; i++)
                        //{
                        //    str1 = str1 + "ПК " + globalPKsAndObjectIds.ElementAt(i).Key + ", " + "ObjectId: " + globalPKsAndObjectIds.ElementAt(i).Value + "\r";
                        //}
                        //MessageBox.Show(str1);
                        //string str = "Перечень наименований объемов:\n";
                        //for (int i = 0; i < globalVolumesNamesAndUnits.Count; i++)
                        //{
                        //    str = str + globalVolumesNamesAndUnits.ElementAt(i).Key + ", " + globalVolumesNamesAndUnits.ElementAt(i).Value + "\r";
                        //}
                        //MessageBox.Show(str);

                        //AcVolShowGlobalvolumesForm();

                        //Заполнение DataGrid
                        //DataGridFilling(globalVolumesTable, _globalVolumesForm.dataGridView1);

                        //Экспорт в Excel
                        ExportToExcel(globalVolumesTable);
                        
                    }
                    acTrans.Commit();
                }
            }
            AcVolShowForm();
        }
Example #33
0
        public void ConvertTable()
        {
            List<DwgLine> linelst = new List<DwgLine>();
            List<TableText> LstTableText = new List<TableText>();
            List<DwgLine> UniqueLineLSt = new List<DwgLine>();
            List<TableText> UniqueTableText = new List<TableText>();

            linelst.Clear();
            LstTableText.Clear();

            //Создание фильтров выборки элементов с экрана
            TypedValue[] FilterLine = new TypedValue[9];
            FilterLine.SetValue(new TypedValue((int)DxfCode.Operator, "<or"), 0);
            FilterLine.SetValue(new TypedValue((int)DxfCode.Start, "Line"), 1);
            FilterLine.SetValue(new TypedValue((int)DxfCode.Start, "POLYLINE"), 2);
            FilterLine.SetValue(new TypedValue((int)DxfCode.Start, "LWPOLYLINE"), 3);
            FilterLine.SetValue(new TypedValue((int)DxfCode.Start, "2DPOPYLINE"), 4);
            FilterLine.SetValue(new TypedValue((int)DxfCode.Start, "3DPOLYLINE"), 5);
            FilterLine.SetValue(new TypedValue((int)DxfCode.Start, "MText"), 6);
            FilterLine.SetValue(new TypedValue((int)DxfCode.Start, "Text"), 7);
            FilterLine.SetValue(new TypedValue((int)DxfCode.Operator, "or>"), 8);
            SelectionFilter filter = new SelectionFilter(FilterLine);
            PromptSelectionResult result;
            result = ed.GetSelection(filter);

            if (result.Status == PromptStatus.OK)
            {
                ed.WriteMessage("После проверки статуса выбора");
                using (Transaction trs = dwg.TransactionManager.StartTransaction())
                {
                    try
                    {
                       ObjectId[] objects = result.Value.GetObjectIds();
                        foreach (ObjectId ObjId in objects)
                        {
                            DBObject obj = trs.GetObject(ObjId, OpenMode.ForRead);
                            Entity ent = obj as Entity;

                            if (ent.GetType() == typeof(acLine))
                            {
                                acLine acl = (acLine)ent;
                                linelst.Add(new DwgLine((int)acl.StartPoint.X, (int)acl.StartPoint.Y, (int)acl.EndPoint.X, (int)acl.EndPoint.Y));

                            }
                            else if (ent.GetType() == typeof(Polyline2d))
                            {
                                Polyline2d pl2d = (Polyline2d)ent;
                                linelst.Add(new DwgLine((int)pl2d.StartPoint.X, (int)pl2d.StartPoint.Y, (int)pl2d.EndPoint.X, (int)pl2d.EndPoint.Y));

                            }
                            else if (ent.GetType() == typeof(Polyline3d))
                            {
                                Polyline3d pl3d = (Polyline3d)ent;
                                linelst.Add(new DwgLine((int)pl3d.StartPoint.X, (int)pl3d.StartPoint.Y, (int)pl3d.EndPoint.X, (int)pl3d.EndPoint.Y));
                            }
                            else if (ent.GetType() == typeof(Polyline))
                            {
                                Polyline pl = (Polyline)ent;
                                if (pl.NumberOfVertices > 2)
                                {
                                    for (int i = 0; i <= pl.NumberOfVertices - 2; i++)
                                    {
                                        var PlSegment = pl.GetLineSegmentAt(i);
                                        linelst.Add(new DwgLine((int)PlSegment.StartPoint.X, (int)PlSegment.StartPoint.Y, (int)PlSegment.EndPoint.X, (int)PlSegment.EndPoint.Y));
                                    }
                                }
                                else
                                {
                                    linelst.Add(new DwgLine((int)pl.StartPoint.X, (int)pl.StartPoint.Y, (int)pl.EndPoint.X, (int)pl.EndPoint.Y));
                                }
                            }
                            else if (ent.GetType() == typeof(MText))
                            {
                                MText mtx = (MText)ent;
                                LstTableText.Add(new TableText(mtx.Text, (int)mtx.Location.X, (int)mtx.Location.Y));
                            }
                            else if (ent.GetType() == typeof(DBText))
                            {
                                DBText dbtxt = (DBText)ent;
                                LstTableText.Add(new TableText(dbtxt.TextString, (int)dbtxt.Position.X, (int)dbtxt.Position.Y));
                            }
                            else
                            {
                                ed.WriteMessage("Выбраны неверные типы данных");
                            }
                       }
                    }
                    catch (Autodesk.AutoCAD.Runtime.Exception ex)
                    {
                        ed.WriteMessage(ex.Message);
                        trs.Abort();
                    }

                    UniqueLineLSt = linelst.Distinct().ToList();
                    UniqueTableText = LstTableText.Distinct().ToList();
                    GetListOfLine(UniqueLineLSt);
                    trs.Commit();
                }
                CreateTable(UniqueLineLSt, UniqueTableText);
            }
        }
Example #34
0
        private static string SelectPk(string msg) //Указание ПК поперечного профиля
        {
            DBText acDbText = new DBText();

            Document acDoc = Application.DocumentManager.MdiActiveDocument; //Текущий документ.
            Editor acDocEd = acDoc.Editor; // Editor текущего документа.
            Database acDocDb = acDoc.Database; // Database текущего документа.

            using (Transaction acTrans = acDocDb.TransactionManager.StartTransaction()) // Начало Транзакции.
            {
            ReturnIfNullOrEmpty:
                
                // Создание TypedValue array для определение параметров фильтра.
                var acTypedValueArray = new TypedValue[1];
                acTypedValueArray.SetValue(new TypedValue((int)DxfCode.Start, "TEXT"), 0); // Параметр фильтра под номером 0.
                
                // Assign the filter criteria to a SelectionFilter object
                var acSelectionFilterObject = new SelectionFilter(acTypedValueArray);

                // Задание опций выбора объектов.
                var acSelectionSetOptions = new PromptSelectionOptions
                {
                    AllowDuplicates = false,
                    RejectObjectsOnLockedLayers = true,
                    SingleOnly = true,
                    MessageForAdding = msg
                };



                // Выбор объектов
                var acSelectionSetPrompt = acDocEd.GetSelection(acSelectionSetOptions, acSelectionFilterObject);

                if (acSelectionSetPrompt.Status == PromptStatus.OK)
                {
                    var acSelectionSet = acSelectionSetPrompt.Value;
                    foreach (SelectedObject acSelectedObject in acSelectionSet)
                    {
                        if (acSelectedObject != null)
                        {
                            var acEnt = acTrans.GetObject(acSelectedObject.ObjectId, OpenMode.ForWrite) as Entity;

                            if (acEnt != null)
                            {
                                acDbText = (DBText)acEnt;
                            }
                        }
                    }
                }

                if (acSelectionSetPrompt.Status == PromptStatus.Error)
                {
                     MessageBox.Show("ПК не выбран, повторите попытку!", myCommands.msgBoxCaption_acVolume, MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                     goto ReturnIfNullOrEmpty;
                }

                if (acSelectionSetPrompt.Status == PromptStatus.Cancel)
                {
                    //MessageBox.Show("Статус Cancel");
                    //MessageBox.Show("Выбор пикета отменен!\nТаблица объемов не будет привязана к пикету и не будет учитываться при экспорте объемов в Excel.", "acVolume", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                    acTrans.Commit();
                    return "-1";
                }
                acTrans.Commit();
            }

            //MessageBox.Show("acDBText = " + acDBText.TextString.Trim());
            return acDbText.TextString.Trim();
        }
Example #35
0
        public static void FilterSelectionSet()
        {

            Editor acDocEd = AcadApp.Application.DocumentManager.MdiActiveDocument.Editor;

            //使用选择过滤器定义选择集规则

            //选择过滤器由TypedValue形式的一对参数构成。TypedValue的第一个参数表明过滤器的类型(例如对象),第二个参数为要过滤的值(例如圆)。过滤器类型是一个DXF组码,用来指定使用哪种过滤器。一些常用过滤器类型列表如下。


            //选择过滤器可以包含过滤多个属性或对象的条件。可以通过声明一个包含足够数量元素的数组来定义总的过滤条件,数组的每个元素代表一个过滤条件。

            TypedValue[] acTypValAr = new TypedValue[1]; // 创建一个TypedValue数组来定义过滤器条件

            acTypValAr.SetValue(new TypedValue((int)DxfCode.Start, "CIRCLE"), 0);

            //**************
            // 创建TypedValue数组定义过滤条件

            //TypedValue[] acTypValAr = new TypedValue[3];

            //acTypValAr.SetValue(new TypedValue((int)DxfCode.Color, 5), 0);

            //acTypValAr.SetValue(new TypedValue((int)DxfCode.Start, "CIRCLE"), 1);

            //acTypValAr.SetValue(new TypedValue((int)DxfCode.LayerName, "0"), 2);
            //**************


            // 将过滤器条件赋值给SelectionFilter对象

            SelectionFilter acSelFtr = new SelectionFilter(acTypValAr);

            PromptSelectionResult acSSPrompt;

            acSSPrompt = acDocEd.GetSelection(acSelFtr);

            // 提示状态OK,表示用户已选完

            if (acSSPrompt.Status == PromptStatus.OK)
            {
                SelectionSet acSSet = acSSPrompt.Value;

                AcadApp.Application.ShowAlertDialog("Number of objects selected: " + acSSet.Count.ToString());
            }

            else
            {

                AcadApp.Application.ShowAlertDialog("Numberof objects selected: 0");

            }

        }
Example #36
0
        public static decimal[] CommandAcVol() // Выбор объектов и возврат массива объемов согласно списку слоев в listBoxLayers
        {
            try
            {
                Document acDoc = Application.DocumentManager.MdiActiveDocument; //Текущий документ.
                Editor acDocEd = acDoc.Editor; // Editor текущего документа.
                Database acDocDb = acDoc.Database; // Database текущего документа.

                //int layersCount = _form.listBoxLayers.Items.Count;
                decimal[] decVolumesArray = new decimal[_form.listBoxLayers.Items.Count];

                using (acDoc.LockDocument()) // блокировка документа
                {
                    using (Transaction acTrans = acDocDb.TransactionManager.StartTransaction()) // Начало Транзакции.
                    {

                        // Создание TypedValue array для определение параметров фильтра.
                        var acTypedValueArray = new TypedValue[2];
                        acTypedValueArray.SetValue(new TypedValue((int)DxfCode.Start, "*POLYLINE"), 0); // Параметр фильтра под номером 0.
                        acTypedValueArray.SetValue(new TypedValue((int)DxfCode.LayerName, "acVlm_*"), 1); // Параметр фильтра под номером 1.
                        // Assign the filter criteria to a SelectionFilter object
                        var acSelectionFilterObject = new SelectionFilter(acTypedValueArray);

                        // Задание опций выбора объектов.
                        var acSelectionSetOptions = new PromptSelectionOptions
                        {
                            AllowDuplicates = false,
                            RejectObjectsOnLockedLayers = true,
                            MessageForAdding = "Выберите контуры для подсчета объемов:"
                        };


                        var acSelectionSetPrompt = acDocEd.GetSelection(acSelectionSetOptions, acSelectionFilterObject);

                        if (acSelectionSetPrompt.Status == PromptStatus.OK)
                        {
                            var acSelectionSet = acSelectionSetPrompt.Value;
                            //int polylineCount = 0;

                            double sclFactor = 0.0;
                            switch (_form.comboBoxScale.SelectedIndex)
                            {
                                case 0:
                                    sclFactor = 10.0;
                                    break;
                                case 1:
                                    sclFactor = 5.0;
                                    break;
                            }

                            foreach (SelectedObject acSelectedObject in acSelectionSet)
                            {
                                if (acSelectedObject != null)
                                {
                                    var acEnt = acTrans.GetObject(acSelectedObject.ObjectId, OpenMode.ForWrite) as Entity;

                                    if (acEnt != null)
                                    {
                                        var acPolyLine = (Polyline)acEnt;
                                        for (int layerNumber = 0; layerNumber < _form.listBoxLayers.Items.Count; layerNumber++)
                                        {

                                            string layerPostfix = "";
                                            switch ((string)_form.listBoxLayersUnits.Items[layerNumber])
                                            {
                                                case "м2":
                                                    layerPostfix = "_msrA";
                                                    break;
                                                case "м":
                                                    layerPostfix = "_msrL";
                                                    break;
                                            }

                                            if (acPolyLine.Layer == "acVlm_" + _form.listBoxLayers.Items[layerNumber] + layerPostfix)
                                            {
                                                if ((string)_form.listBoxLayersUnits.Items[layerNumber] == "м2")
                                                {
                                                    decVolumesArray[layerNumber] = decVolumesArray[layerNumber] + (decimal)(acPolyLine.Area / (sclFactor * sclFactor));
                                                }
                                                if ((string)_form.listBoxLayersUnits.Items[layerNumber] == "м")
                                                {
                                                    decVolumesArray[layerNumber] = decVolumesArray[layerNumber] + (decimal)(acPolyLine.Length / sclFactor);
                                                }
                                            }
                                        }
                                    }
                                }
                            }
                        }

                        else
                        {
                            acTrans.Abort();
                            AcVolShowForm();
                            return null;
                        }
                        acTrans.Commit();
                        return decVolumesArray;
                    }
                }
            }

            catch (NullReferenceException)
            {
                return null;
            }
        }