示例#1
0
        private void ReadPos()
        {
            try
            {
                if (rbGroupVarLength.Checked)
                {
                    m_PosList = PosCopy.ReadAllInSelection(sourceItems, false, PosCopy.PosGrouping.PosKeyDifferentMarker);
                }
                else
                {
                    m_PosList = PosCopy.ReadAllInSelection(sourceItems, false, PosCopy.PosGrouping.PosKeyDifferentMarkerVarLength);
                }

                m_DetachedPosList = new Dictionary <string, List <ObjectId> >();
                Database db = HostApplicationServices.WorkingDatabase;
                using (Transaction tr = db.TransactionManager.StartTransaction())
                {
                    foreach (ObjectId id in sourceItems)
                    {
                        RebarPos pos = tr.GetObject(id, OpenMode.ForRead) as RebarPos;
                        if (pos == null)
                        {
                            continue;
                        }
                        if (!pos.Detached)
                        {
                            continue;
                        }
                        if (string.IsNullOrEmpty(pos.Pos))
                        {
                            continue;
                        }

                        if (m_DetachedPosList.ContainsKey(pos.Pos))
                        {
                            m_DetachedPosList[pos.Pos].Add(id);
                        }
                        else
                        {
                            m_DetachedPosList.Add(pos.Pos, new List <ObjectId>()
                            {
                                id
                            });
                        }
                    }
                }

                AddMissing();
                SortDisplayList();
            }
            catch (System.Exception ex)
            {
                MessageBox.Show("Error: " + ex.Message, "RebarPos", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }
示例#2
0
        private bool DrawBOQ()
        {
            using (DrawBOQForm form = new DrawBOQForm())
            {
                // Pos error check
                PromptSelectionResult sel = DWGUtility.SelectAllPosUser();
                if (sel.Status != PromptStatus.OK)
                {
                    return(false);
                }
                ObjectId[] items = sel.Value.GetObjectIds();

                List <PosCheckResult> errors   = PosCheckResult.CheckAllInSelection(items, true, false);
                List <PosCheckResult> warnings = PosCheckResult.CheckAllInSelection(items, false, true);

                if (errors.Count != 0)
                {
                    PosCheckResult.ConsoleOut(errors);
                }
                if (warnings.Count != 0)
                {
                    PosCheckResult.ConsoleOut(warnings);
                }

                if (errors.Count != 0)
                {
                    Autodesk.AutoCAD.ApplicationServices.Application.DisplayTextScreen = true;
                    return(false);
                }

                // Pos similarity check
                if (warnings.Count != 0)
                {
                    Autodesk.AutoCAD.ApplicationServices.Application.DisplayTextScreen = true;
                    PromptKeywordOptions opts = new PromptKeywordOptions("\nMetraja devam edilsin mi? [Evet/Hayir]", "Yes No");
                    PromptResult         res  = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument.Editor.GetKeywords(opts);
                    if (res.Status != PromptStatus.OK || res.StringResult == "No")
                    {
                        return(true);
                    }
                }

                if (!form.Init())
                {
                    return(false);
                }

                if (Autodesk.AutoCAD.ApplicationServices.Application.ShowModalDialog(null, form, false) != System.Windows.Forms.DialogResult.OK)
                {
                    return(true);
                }

                List <PosCopy> posList = new List <PosCopy>();
                try
                {
                    posList = PosCopy.ReadAllInSelection(items, true, PosCopy.PosGrouping.PosMarker);
                }
                catch (System.Exception ex)
                {
                    MessageBox.Show("Error: " + ex.Message, "RebarPos", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    return(false);
                }

                if (posList.Count == 0)
                {
                    MessageBox.Show("Seçilen grupta poz mevcut değil.", "RebarPos", MessageBoxButtons.OK, MessageBoxIcon.Information);
                    return(false);
                }

                posList = RemoveEmpty(posList);
                if (!form.HideMissing)
                {
                    posList = AddMissing(posList);
                }
                posList = SortList(posList);

                PromptPointResult result = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument.Editor.GetPoint("Baz noktası: ");
                if (result.Status != PromptStatus.OK)
                {
                    return(true);
                }

                Database db = HostApplicationServices.WorkingDatabase;
                using (Transaction tr = db.TransactionManager.StartTransaction())
                {
                    try
                    {
                        BlockTableRecord btr = (BlockTableRecord)tr.GetObject(db.CurrentSpaceId, OpenMode.ForWrite);

                        BOQTable table = new BOQTable();
                        table.SuspendUpdate();

                        Point3d pt = result.Value;
                        table.TransformBy(Matrix3d.Displacement(pt.GetAsVector()));
                        table.TransformBy(Matrix3d.Scaling(form.TextHeight, pt));
                        table.Note    = form.TableNote;
                        table.Heading = form.TableHeader;
                        table.Footing = form.TableFooter;

                        table.DisplayUnit = form.DisplayUnit;
                        table.Precision   = form.Precision;

                        table.Multiplier = form.Multiplier;

                        BOQStyle style = form.TableStyle;
                        table.ColumnDef = style.Columns;

                        table.TextStyleId    = style.TextStyleId;
                        table.HeadingStyleId = style.HeadingStyleId;
                        table.FootingStyleId = style.FootingStyleId;

                        table.PosLabel               = style.PosLabel;
                        table.CountLabel             = style.CountLabel;
                        table.DiameterLabel          = style.DiameterLabel;
                        table.LengthLabel            = style.LengthLabel;
                        table.ShapeLabel             = style.ShapeLabel;
                        table.TotalLengthLabel       = style.TotalLengthLabel;
                        table.DiameterListLabel      = style.DiameterListLabel;
                        table.DiameterLengthLabel    = style.DiameterLengthLabel;
                        table.UnitWeightLabel        = style.UnitWeightLabel;
                        table.WeightLabel            = style.WeightLabel;
                        table.GrossWeightLabel       = style.GrossWeightLabel;
                        table.MultiplierHeadingLabel = style.MultiplierHeadingLabel;

                        table.MaxRows      = form.TableRows;
                        table.TableSpacing = form.TableMargin;

                        double lengthScale = 1.0;
                        switch (table.DisplayUnit)
                        {
                        case BOQTable.DrawingUnits.Millimeter:
                            lengthScale = 1.0;
                            break;

                        case BOQTable.DrawingUnits.Centimeter:
                            lengthScale = 0.1;
                            break;

                        case BOQTable.DrawingUnits.Decimeter:
                            lengthScale = 0.01;
                            break;

                        case BOQTable.DrawingUnits.Meter:
                            lengthScale = 0.001;
                            break;
                        }

                        // Add rows
                        foreach (PosCopy copy in posList)
                        {
                            if (copy.existing)
                            {
                                string a = string.Empty;
                                string b = string.Empty;
                                string c = string.Empty;
                                string d = string.Empty;
                                string e = string.Empty;
                                string f = string.Empty;

                                if (copy.isVarA)
                                {
                                    a = (copy.minA * lengthScale).ToString("F0") + "~" + (copy.maxA * lengthScale).ToString("F0");
                                }
                                else
                                {
                                    a = (copy.minA * lengthScale).ToString("F0");
                                }
                                if (copy.isVarB)
                                {
                                    b = (copy.minB * lengthScale).ToString("F0") + "~" + (copy.maxB * lengthScale).ToString("F0");
                                }
                                else
                                {
                                    b = (copy.minB * lengthScale).ToString("F0");
                                }
                                if (copy.isVarC)
                                {
                                    c = (copy.minC * lengthScale).ToString("F0") + "~" + (copy.maxC * lengthScale).ToString("F0");
                                }
                                else
                                {
                                    c = (copy.minC * lengthScale).ToString("F0");
                                }
                                if (copy.isVarD)
                                {
                                    d = (copy.minD * lengthScale).ToString("F0") + "~" + (copy.maxD * lengthScale).ToString("F0");
                                }
                                else
                                {
                                    d = (copy.minD * lengthScale).ToString("F0");
                                }
                                if (copy.isVarE)
                                {
                                    e = (copy.minE * lengthScale).ToString("F0") + "~" + (copy.maxE * lengthScale).ToString("F0");
                                }
                                else
                                {
                                    e = (copy.minE * lengthScale).ToString("F0");
                                }
                                if (copy.isVarF)
                                {
                                    f = (copy.minF * lengthScale).ToString("F0") + "~" + (copy.maxF * lengthScale).ToString("F0");
                                }
                                else
                                {
                                    f = (copy.minF * lengthScale).ToString("F0");
                                }

                                table.Items.Add(int.Parse(copy.pos), copy.count, double.Parse(copy.diameter), copy.length1, copy.length2, copy.isVarLength, copy.shapename, a, b, c, d, e, f);
                            }
                            else
                            {
                                table.Items.Add(int.Parse(copy.pos));
                            }
                        }

                        table.ResumeUpdate();

                        table.SetDatabaseDefaults(db);

                        btr.AppendEntity(table);
                        tr.AddNewlyCreatedDBObject(table, true);

                        tr.Commit();
                    }
                    catch (System.Exception ex)
                    {
                        MessageBox.Show("Error: " + ex.Message, "RebarPos", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    }
                }
            }

            return(true);
        }