コード例 #1
0
ファイル: Commands.cs プロジェクト: 15831944/dwg-crawl
        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();
            }
        }
コード例 #2
0
        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);
        }