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); }
}// 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
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); }
}// 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
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; }
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(); }
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"); } }
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"); } }
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"); } }
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); }
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); }
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"); } }
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); }
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个对象"); } }
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"); } }
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(); }
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
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); } }
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(); } }
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(); } } } }
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); }
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
} //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) }); }
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); }
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); }
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(); } }
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(); }
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); } }
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(); }
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"); } }
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; } }