static public void CornerRecordData() { var doc = Application.DocumentManager.MdiActiveDocument; var ed = doc.Editor; try { var acDB = doc.Database; using (var trans = acDB.TransactionManager.StartTransaction()) { DBDictionary layoutPages = (DBDictionary)trans.GetObject(acDB.LayoutDictionaryId, OpenMode.ForRead); // Handle Corner Record meta data dictionary extracted from Properties and Content Dictionary <String, object> cornerRecordForms = new Dictionary <string, object>(); CivilDB.CogoPointCollection cogoPointsColl = CivilDB.CogoPointCollection.GetCogoPoints(doc.Database); var cogoPointCollected = CogoPointJson.geolocationCapture(cogoPointsColl); List <string> layoutNamesList = new List <string>(); foreach (DBDictionaryEntry layoutPage in layoutPages) { var crFormItems = layoutPage.Value.GetObject(OpenMode.ForRead) as Layout; var isModelSpace = crFormItems.ModelType; ObjectIdCollection textObjCollection = new ObjectIdCollection(); // Formatted Dictionary to create JSON output Dictionary <string, object> textObjResults = new Dictionary <string, object>(); if (isModelSpace != true) { BlockTableRecord blkTblRec = trans.GetObject(crFormItems.BlockTableRecordId, OpenMode.ForRead) as BlockTableRecord; layoutNamesList.Add(crFormItems.LayoutName.Trim().ToString().ToLower().Replace(" ", "")); foreach (ObjectId btrId in blkTblRec) { if (btrId.ObjectClass.DxfName.Contains("TEXT") || btrId.ObjectClass.DxfName.Contains("MTEXT")) { textObjCollection.Add(btrId); } } // List of the Dictionary txtProps List <object> crFormElements = new List <object>(); List <object> crFormInputs = new List <object>(); List <ObjectId> crFormInputId = new List <ObjectId>(); foreach (ObjectId txtItem in textObjCollection) { // Dictionary to collect Contents of the Corner Records Sheet Dictionary <string, object> txtProps = new Dictionary <string, object>(); var txtItemName = trans.GetObject(txtItem, OpenMode.ForRead) as Entity; if (txtItemName.Layer == "-SHEET") { if (txtItem.ObjectClass.DxfName == "MTEXT") { var mtextValues = trans.GetObject(txtItem, OpenMode.ForRead) as MText; //txtProps.Add("Class Type", "MTEXT"); //txtProps.Add("Layer Name", mtextValues.Layer); txtProps.Add("Content", mtextValues.Text); //txtProps.Add("X", mtextValues.Location.X); //txtProps.Add("Y", mtextValues.Location.Y); crFormElements.Add(txtProps); } else if (txtItem.ObjectClass.DxfName == "TEXT") { //Capture Brief Legal Description here var textValues = trans.GetObject(txtItem, OpenMode.ForRead) as DBText; //txtProps.Add("Class Type", "TEXT"); //txtProps.Add("Layer Name", textValues.Layer); txtProps.Add("Content", textValues.TextString); //txtProps.Add("X", textValues.Position.X); //txtProps.Add("Y", textValues.Position.Y); crFormElements.Add(txtProps); } } else if (txtItemName.Layer == "$--SHT-ANNO") { if (txtItem.ObjectClass.DxfName == "MTEXT") { var mtextValues = trans.GetObject(txtItem, OpenMode.ForRead) as MText; //txtProps.Add("Class Type", "MTEXT"); //txtProps.Add("Layer Name", mtextValues.Layer); txtProps.Add("Content", mtextValues.Text); //txtProps.Add("X", mtextValues.Location.X); //txtProps.Add("Y", mtextValues.Location.Y); crFormInputs.Add(txtProps); crFormInputId.Add(txtItem); } else if (txtItem.ObjectClass.DxfName == "TEXT") { var textValues = trans.GetObject(txtItem, OpenMode.ForRead) as DBText; //txtProps.Add("Class Type", "TEXT"); //txtProps.Add("Layer Name", textValues.Layer); txtProps.Add("Content", textValues.TextString); //txtProps.Add("X", textValues.Position.X); //txtProps.Add("Y", textValues.Position.Y); crFormInputs.Add(txtProps); crFormInputId.Add(txtItem); } } } var briefLegalCollected = BriefLegalDescription.briefLegalCapture(textObjCollection, crFormInputId); textObjResults.Add("Legal_Description_c", briefLegalCollected); //textObjResults.Add("Form Inputs", crFormInputs); //textObjResults.Add("Form Elements", crFormElements); cornerRecordForms.Add(crFormItems.LayoutName.Trim().ToString().ToLower().Replace(" ", ""), textObjResults); } } // Checks to see whether the points from the cogo point collection exist within // the layout by searching for the correct collection key and layout name List <string> cogoPointCollectedCheck = cogoPointCollected.Keys.ToList(); List <bool> boolCheckResults = new List <bool>(); IEnumerable <string> cogoPointNameCheck = layoutNamesList.Except(cogoPointCollectedCheck); List <string> cogoPointNameCheckResults = cogoPointNameCheck.ToList(); var layoutNameChecker = new Regex("^(\\s*cr\\s*\\d\\d*)$"); if (!cogoPointNameCheckResults.Where(f => layoutNameChecker.IsMatch(f)).ToList().Any()) { boolCheckResults.Add(true); } else { foreach (string cogoPointNameResultItem in cogoPointNameCheckResults) { Match layoutNameMatch = Regex.Match(cogoPointNameResultItem, "^(\\s*cr\\s*\\d\\d*)$", RegexOptions.IgnoreCase); if (layoutNameMatch.Success) { string layoutNameX = layoutNameMatch.Value; ed.WriteMessage("\nLayout Named {0} does not have an associated cogo point", layoutNameX); } } boolCheckResults.Add(false); } IEnumerable <string> layoutNameCheck = cogoPointCollectedCheck.Except(layoutNamesList); List <string> layoutNameCheckResults = layoutNameCheck.ToList(); var cogoNameChecker = new Regex("^(\\s*cr\\s*\\d\\d*)$"); // If the layout name has any value other than CR == PASS // If CR point exists and does not match then throw an error for user to fix if (!layoutNameCheckResults.Where(f => cogoNameChecker.IsMatch(f)).ToList().Any()) { boolCheckResults.Add(true); } else // Found a CR point that DID NOT match a layout name { foreach (string layoutNameCheckResultItem in layoutNameCheckResults) { Match cogoNameMatch = Regex.Match(layoutNameCheckResultItem, "^(\\s*cr\\s*\\d\\d*)$", RegexOptions.IgnoreCase); if (cogoNameMatch.Success) { string cogoNameX = cogoNameMatch.Value; ed.WriteMessage("\nCorner Record point named {0} does not have an associated Layout", cogoNameX); } } boolCheckResults.Add(false); } // Output JSON file to BIN folder // IF there are two true booleans in the list then add the data to the corresponding keys (cr1 => cr1) if ((boolCheckResults.Count(v => v == true)) == 2) { foreach (string cornerRecordFormKey in cornerRecordForms.Keys) { if (cogoPointCollected.ContainsKey(cornerRecordFormKey)) { //ed.WriteMessage("THIS SHIT FINALLY WORKS FOR {0}", cornerRecordFormKey); var cogoFinal = (Dictionary <string, object>)cornerRecordForms[cornerRecordFormKey]; var cogoFinalType = ((Dictionary <string, object>)cogoPointCollected[cornerRecordFormKey]) ["Corner_Type_c"]; var cogoFinalLong = ((Dictionary <string, object>)cogoPointCollected[cornerRecordFormKey]) ["Geolocation_Longitude_s"]; var cogoFinalLat = ((Dictionary <string, object>)cogoPointCollected[cornerRecordFormKey]) ["Geolocation_Latitude_s"]; cogoFinal.Add("Corner_Type_c", cogoFinalType); cogoFinal.Add("Geolocation_Longitude_s", cogoFinalLong); cogoFinal.Add("Geolocation_Latitude_s", cogoFinalLat); } } using (var writer = File.CreateText("CornerRecordForms.json")) { string strResultJson = JsonConvert.SerializeObject(cornerRecordForms, Formatting.Indented); writer.WriteLine(strResultJson); } } trans.Commit(); } } catch (System.Exception ex) { ed.WriteMessage("Error: {0}", ex); } }
public void ListAttributes() { var ed = Application.DocumentManager.MdiActiveDocument.Editor; var doc = Application.DocumentManager.MdiActiveDocument; try { var acDB = doc.Database; using (var trans = acDB.TransactionManager.StartTransaction()) { DBDictionary layoutPages = (DBDictionary)trans.GetObject(acDB.LayoutDictionaryId, OpenMode.ForRead); // Handle Corner Record meta data dictionary extracted from Properties and Content Dictionary <String, object> cornerRecordForms = new Dictionary <string, object>(); CivilDB.CogoPointCollection cogoPointsColl = CivilDB.CogoPointCollection.GetCogoPoints(doc.Database); var cogoPointCollected = CogoPointJson.geolocationCapture(cogoPointsColl); List <string> layoutNamesList = new List <string>(); foreach (DBDictionaryEntry layoutPage in layoutPages) { var crFormItems = layoutPage.Value.GetObject(OpenMode.ForRead) as Layout; var isModelSpace = crFormItems.ModelType; ObjectIdCollection textObjCollection = new ObjectIdCollection(); Dictionary <String, String> crAttributes = new Dictionary <String, String>(); if (isModelSpace != true) { BlockTableRecord blkTblRec = trans.GetObject(crFormItems.BlockTableRecordId, OpenMode.ForRead) as BlockTableRecord; layoutNamesList.Add(crFormItems.LayoutName.Trim().ToString().ToLower().Replace(" ", "")); foreach (ObjectId blkId in blkTblRec) { textObjCollection.Add(blkId); var blkRef = trans.GetObject(blkId, OpenMode.ForRead) as BlockReference; if (blkRef != null && blkRef.IsDynamicBlock) { //ed.WriteMessage("\nBlock: " + blkRef.Name); //btr.Dispose(); AttributeCollection attCol = blkRef.AttributeCollection; foreach (ObjectId attId in attCol) { AttributeReference attRef = (AttributeReference)trans.GetObject(attId, OpenMode.ForRead); //ed.WriteMessage("\nAttribute Tag: {0} \nAttribute String: {1}", attRef.Tag.ToString(), attRef.TextString.ToString()); if (attRef.Tag.ToString() == "CITY_NAME") { crAttributes.Add("CRCity_c", attRef.TextString.ToString()); } else if (attRef.Tag.ToString() == "LEGAL_DESCRIPTION") { crAttributes.Add("Corner_Type_c", "Lot"); crAttributes.Add("Legal_Description_c", attRef.TextString.ToString()); } } } } // Build Final JSON File with LayoutName and Attributes cornerRecordForms.Add(crFormItems.LayoutName.Trim().ToString().ToLower().Replace(" ", ""), crAttributes); } } // Checks to see whether the points from the cogo point collection exist within // the layout by searching for the correct collection key and layout name List <string> cogoPointCollectedCheck = cogoPointCollected.Keys.ToList(); List <bool> boolCheckResults = new List <bool>(); IEnumerable <string> cogoPointNameCheck = layoutNamesList.Except(cogoPointCollectedCheck); List <string> cogoPointNameCheckResults = cogoPointNameCheck.ToList(); var layoutNameChecker = new Regex("^(\\s*cr\\s*\\d\\d*)$"); if (!cogoPointNameCheckResults.Where(f => layoutNameChecker.IsMatch(f)).ToList().Any()) { boolCheckResults.Add(true); } else { foreach (string cogoPointNameResultItem in cogoPointNameCheckResults) { Match layoutNameMatch = Regex.Match(cogoPointNameResultItem, "^(\\s*cr\\s*\\d\\d*)$", RegexOptions.IgnoreCase); if (layoutNameMatch.Success) { string layoutNameX = layoutNameMatch.Value; ed.WriteMessage("\nLayout Named {0} does not have an associated cogo point", layoutNameX); } } boolCheckResults.Add(false); } IEnumerable <string> layoutNameCheck = cogoPointCollectedCheck.Except(layoutNamesList); List <string> layoutNameCheckResults = layoutNameCheck.ToList(); var cogoNameChecker = new Regex("^(\\s*cr\\s*\\d\\d*)$"); // If the layout name has any value other than CR == PASS // If CR point exists and does not match then throw an error for user to fix if (!layoutNameCheckResults.Where(f => cogoNameChecker.IsMatch(f)).ToList().Any()) { boolCheckResults.Add(true); } else // Found a CR point that DID NOT match a layout name { foreach (string layoutNameCheckResultItem in layoutNameCheckResults) { Match cogoNameMatch = Regex.Match(layoutNameCheckResultItem, "^(\\s*cr\\s*\\d\\d*)$", RegexOptions.IgnoreCase); if (cogoNameMatch.Success) { string cogoNameX = cogoNameMatch.Value; ed.WriteMessage("\nCorner Record point named {0} does not have an associated Layout", cogoNameX); } } boolCheckResults.Add(false); } // Output JSON file to BIN folder // IF there are two true booleans in the list then add the data to the corresponding keys (cr1 => cr1) if ((boolCheckResults.Count(v => v == true)) == 2) { foreach (string cornerRecordFormKey in cornerRecordForms.Keys) { if (cogoPointCollected.ContainsKey(cornerRecordFormKey)) { //ed.WriteMessage("WORKS FOR {0}", cornerRecordFormKey); var cogoFinal = (Dictionary <string, string>)cornerRecordForms[cornerRecordFormKey]; //var cogoFinalType = ((Dictionary<string, string>)cogoPointCollected[cornerRecordFormKey])["Corner_Type_c"]; var cogoFinalLong = ((Dictionary <string, object>)cogoPointCollected[cornerRecordFormKey]) ["Geolocation_Longitude_s"]; var cogoFinalLat = ((Dictionary <string, object>)cogoPointCollected[cornerRecordFormKey]) ["Geolocation_Latitude_s"]; //cogoFinal.Add("Corner_Type_c", cogoFinalType); cogoFinal.Add("Geolocation_Longitude_s", cogoFinalLong.ToString()); cogoFinal.Add("Geolocation_Latitude_s", cogoFinalLat.ToString()); } } using (var writer = File.CreateText("CornerRecordForms.json")) { string strResultJson = JsonConvert.SerializeObject(cornerRecordForms, Formatting.Indented); writer.WriteLine(strResultJson); } } trans.Commit(); } } catch (Autodesk.AutoCAD.Runtime.Exception ex) { ed.WriteMessage(("Exception: " + ex.Message)); } }