예제 #1
0
        static void Scan(string dir, string dbName)
        {
            //Открыть папку, выбрать все файлы двг из нее
            string dataDir = @"c:\Data\";

            string[] dwgFiles = Directory.GetFiles(dir, "*.dwg", SearchOption.AllDirectories);
            DbMongo  db       = new DbMongo(dbName);

            foreach (string dwgFile in dwgFiles)
            {
                CrawlDocument cDoc = new CrawlDocument(dwgFile);
                FileCopy(dwgFile, Path.Combine(dataDir, cDoc.FileId + ".dwg"));
                db.InsertIntoFiles(cDoc);
            }

            /*
             * //Запуситить процессы по числу ядер процессоров каждый на своем ядре
             * int numCores = 4;
             * for (int i = 0; i < numCores; i++)
             * {
             *  //crawlinNano();
             *  //http://cplus.about.com/od/learnc/a/multi-threading-using-task-parallel-library.htm
             * Task.Factory.StartNew(() => crawlinNano());
             * //Процесс выбирает из базы случайным образом непросканированный файл и сканирует его в Json
             * //Это пока выполняется вручным запуском нанокадов
             * //Если файл изменился, то записывается его новый hash
             * }
             */
        }
예제 #2
0
        public void TestInsertIntoFiles()
        {
            db.Clear();
            string json1 = @"
            {
	            'ClassName': 'File',
	            'FileId': 'bc6a1669-51ce-444c-94c6-cfec71c0f44d',
	            'Hash': 'd520b80512f226e81dd72294037657fd',
	            'Path': '\\\\FILESERVER\\home\\#АРХИВ 2014\\Объекты\\МНОГОТОПЛИВНАЯ АЗС №15\\задание на фундаменты.dwg',
	            'Scanned': false,
	            '_id': {
		            '$oid': '55a49dfff80dc7180c8228d3'
	            }
            }";
            string json2 = @"
            {
	            'ClassName': 'File',
	            'FileId': '9e2769ff-678f-401b-8d10-e0581aa6bf98',
	            'Hash': '253ffb6063333c5bfc1109c5d7db1945',
	            'Path': '\\\\FILESERVER\\home\\#АРХИВ 2014\\Объекты\\МНОГОТОПЛИВНАЯ АЗС №15\\образец исх данные.dwg',
	            'Scanned': false,
	            '_id': {
		            '$oid': '55a49dfff80dc7180c8228d4'
	            }
            }
            ";

            db.InsertIntoFiles(json1);
            db.InsertIntoFiles(json2);

            Assert.IsTrue(db.HasFileHash("d520b80512f226e81dd72294037657fd"));
            Assert.IsTrue(db.HasFileId("bc6a1669-51ce-444c-94c6-cfec71c0f44d"));
            Assert.IsTrue(db.HasFileHash("253ffb6063333c5bfc1109c5d7db1945"));
            Assert.IsTrue(db.HasFileId("9e2769ff-678f-401b-8d10-e0581aa6bf98"));

            db.Clear();

            Crawl.CrawlDocument cdoc = new CrawlDocument(@"D:\Documents\Desktop\SingleFile\+b3826065-07d1-4d4a-8af4-35ebc3630117.dwg");

            db.InsertIntoFiles(cdoc);

            Assert.IsTrue(db.HasFileHash(cdoc.Hash));
            Assert.IsTrue(db.HasFileId(cdoc.FileId));
        }
예제 #3
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);
        }