public static void Crawl(bool closeAfterComplete = true) { DbMongo sqlDB = new DbMongo("SingleFile"); //While Get random dwg from database that not scanned CrawlDocument crawlDoc = sqlDB.GetNewRandomUnscannedDocument(); while (crawlDoc != null) { crawlAcDbDocument cDoc = new crawlAcDbDocument(crawlDoc); cDoc.sqlDB = sqlDB; cDoc.ScanDocument(); crawlDoc = sqlDB.GetNewRandomUnscannedDocument(); } if (closeAfterComplete) { HostMgd.ApplicationServices.Application.Quit(); } }
public void ScanDocument() { //Если документ неправильно зачитался то выходим if (this.teighaDocument == null) { return; } using (Transaction tr = this.teighaDocument.TransactionManager.StartTransaction()) { PromptSelectionResult r = this.teighaDocument.Editor.SelectAll(); //Пробегаем по всем объектам в чертеже foreach (SelectedObject obj in r.Value) { string objId = obj.ObjectId.ToString(); string objectJson = jsonGetObjectData(obj.ObjectId); string objectClass = obj.ObjectId.ObjectClass.Name; if (!string.IsNullOrEmpty(objectJson)) { this.sqlDB.SaveObjectData(objectJson, this.FileId); } } //Пробегаем все определения блоков List <ObjectId> blocks = GetBlocks(this.teighaDocument); foreach (ObjectId btrId in blocks) { BlockTableRecord btr = (BlockTableRecord)btrId.GetObject(OpenMode.ForRead); DocumentFromBlockOrProxy(btrId, this.FileId); } //Пробегаем все определения слоев //http://forums.autodesk.com/t5/net/how-to-get-all-names-of-layers-in-a-drawing-by-traversal-layers/td-p/3371751 LayerTable lt = (LayerTable)this.teighaDocument.Database.LayerTableId.GetObject(OpenMode.ForRead); foreach (ObjectId ltr in lt) { string objId = ltr.ToString(); string objectClass = ltr.ObjectClass.Name; LayerTableRecord layerTblRec = (LayerTableRecord)ltr.GetObject(OpenMode.ForRead); crawlAcDbLayerTableRecord cltr = new crawlAcDbLayerTableRecord(layerTblRec); string objectJson = jsonHelper.To <crawlAcDbLayerTableRecord>(cltr); this.sqlDB.SaveObjectData(objectJson, this.FileId); } //Пробегаем внешние ссылки List <CrawlDocument> xrefs = GetXrefs(this.teighaDocument); foreach (CrawlDocument theXref in xrefs) { crawlAcDbDocument cDoc = new crawlAcDbDocument(theXref); sqlDB.InsertIntoFiles(theXref); cDoc.sqlDB = sqlDB; cDoc.ScanDocument(); } } this.teighaDocument.CloseAndDiscard(); sqlDB.SetDocumentScanned(this.FileId); }