private RazmCollection CalcRazm(Autodesk.AutoCAD.EditorInput.SelectionSet sset) { using (var trans = AcadApp.StartTransaction()) { try { //result ******************************************** RazmCollection result = new RazmCollection(); //*************************************************** foreach (Autodesk.AutoCAD.DatabaseServices.ObjectId id in sset.GetObjectIds()) { //подсчет длин и площадей для Polyline Line Arc Circle и штук для BlockReference Autodesk.AutoCAD.DatabaseServices.DBObject selOb; selOb = trans.GetObject(id, Autodesk.AutoCAD.DatabaseServices.OpenMode.ForRead); if (selOb.GetType().Name == "Polyline" || selOb.GetType().Name == "Line" || selOb.GetType().Name == "Arc" || selOb.GetType().Name == "Circle" || selOb.GetType().Name == "BlockReference") { foreach (var lineType in listOfTypes) { if ((lineType.EntityType == RazmType.typeOfEntity.Block) && (selOb.GetType().Name == "BlockReference")) { Autodesk.AutoCAD.DatabaseServices.BlockReference blr = selOb as Autodesk.AutoCAD.DatabaseServices.BlockReference; if (blr.Name == lineType.Type) { string area = ""; foreach (var paint in lineType.Paints) { area += paint.ShortTitle + ":" + paint.Amount + " "; } //For block references calculated only total amount and area inside RazmCollection into RazmData.NPP result.Add(new RazmData("1", lineType.Description, lineType.Type, "0.0", area, lineType.EntityType)); break; // lineType } }//BlockReference else if ((lineType.EntityType == RazmType.typeOfEntity.Area) && (selOb.GetType().Name != "BlockReference")) { Autodesk.AutoCAD.DatabaseServices.Curve cur = selOb as Autodesk.AutoCAD.DatabaseServices.Curve; if (cur.Linetype == lineType.LineTypeName) { string area = ""; foreach (var paint in lineType.Paints) { area += paint.ShortTitle + ":" + (paint.Amount * GetArea(selOb)).ToString() + " "; } //For the area type calculated only area result.Add(new RazmData("1", lineType.Description, lineType.Type, "0.0", area, lineType.EntityType)); } }//Area else if (((lineType.EntityType == RazmType.typeOfEntity.Line) || (lineType.EntityType == RazmType.typeOfEntity.DoubleLineCenter) || (lineType.EntityType == RazmType.typeOfEntity.DoubleLineSide)) && (selOb.GetType().Name != "BlockReference")) { Autodesk.AutoCAD.DatabaseServices.Curve cur = selOb as Autodesk.AutoCAD.DatabaseServices.Curve; if (cur.Linetype == lineType.LineTypeName) { string area = ""; foreach (var paint in lineType.Paints) { //This area without width. Width applayed in DisplayResult area += paint.ShortTitle + ":" + (paint.Amount * GetPaintedLength(GetLength(selOb), lineType)).ToString() + " "; } //For the line type calculated length and area result.Add(new RazmData("1", lineType.Description, lineType.Type, GetLength(selOb).ToString(), area, lineType.EntityType)); } }//Line }// Foreach in listOfTypes }//If allowed entity }// Foreach in ssget return result; } catch (System.Exception ex) { AcadApp.AcaEd.WriteMessage("ERROR: MarkingCalc().CalcRazm " + ex + "\n"); } }// using transaction return null; }
private void BtSolut_Click(object sender, EventArgs e) { try { BtSolut.Enabled = false; btClear_Click(sender, e);//For clearing current data if exist if (RbUser.Checked) { Autodesk.AutoCAD.EditorInput.PromptSelectionOptions edOpt = new Autodesk.AutoCAD.EditorInput.PromptSelectionOptions(); Autodesk.AutoCAD.EditorInput.PromptSelectionResult edRes; edOpt.MessageForAdding = "Выберите объекты"; edOpt.AllowDuplicates = false; Autodesk.AutoCAD.DatabaseServices.TypedValue[] selval; List<Autodesk.AutoCAD.DatabaseServices.TypedValue> selval_list = new List<Autodesk.AutoCAD.DatabaseServices.TypedValue>(); selval_list.Add(new Autodesk.AutoCAD.DatabaseServices.TypedValue((int)(Autodesk.AutoCAD.DatabaseServices.DxfCode.LayerName), cbLayerUse.Text)); selval = selval_list.ToArray(); edOpt.RejectPaperspaceViewport = true; edOpt.RejectObjectsFromNonCurrentSpace = true; Autodesk.AutoCAD.EditorInput.SelectionFilter ssfilter = new Autodesk.AutoCAD.EditorInput.SelectionFilter(selval); edRes = AcadApp.AcaEd.GetSelection(edOpt, ssfilter); Autodesk.AutoCAD.EditorInput.SelectionSet sset = edRes.Value; if (edRes.Status == Autodesk.AutoCAD.EditorInput.PromptStatus.OK) { this.rawData = CalcRazm(sset); DisplayResult(); } } else if (RbAll.Checked) { Autodesk.AutoCAD.EditorInput.PromptSelectionResult edRes; Autodesk.AutoCAD.DatabaseServices.TypedValue[] selval; List<Autodesk.AutoCAD.DatabaseServices.TypedValue> selval_list = new List<Autodesk.AutoCAD.DatabaseServices.TypedValue>(); selval_list.Add(new Autodesk.AutoCAD.DatabaseServices.TypedValue((int)(Autodesk.AutoCAD.DatabaseServices.DxfCode.LayerName), cbLayerUse.Text)); selval = selval_list.ToArray(); Autodesk.AutoCAD.EditorInput.SelectionFilter ssfilter = new Autodesk.AutoCAD.EditorInput.SelectionFilter(selval); edRes = AcadApp.AcaEd.SelectAll(ssfilter); Autodesk.AutoCAD.EditorInput.SelectionSet sset = edRes.Value; if (edRes.Status == Autodesk.AutoCAD.EditorInput.PromptStatus.OK) { this.rawData = CalcRazm(sset); DisplayResult(); } } btToExcel.Enabled = true; IsTableEmpty = false; } catch (System.Exception ex) { AcadApp.AcaEd.WriteMessage("ERROR: MarkingCalc().BtSolut_Click " + ex + "\n"); } finally { BtSolut.Enabled = true; } }