8 Jul 22:15 avatar

Примеры кода

habrahabr.ru/post/249015/

habrahabr.ru/post/259303/

through-the-interface.typepad.com/through_the_interface/2006/09/working_with_sp.html

arxdummies.blogspot.ru/2005/02/class-2-autocads-database.html

sites.google.com/site/bushmansnetlaboratory/translate-manual/sozdanie-i-redaktirovanie-obektov-autocad/rabota-s-vybrannymi-naborami

Доступ к базе данных открытого документа и итерирование по пространству модели с выводом в консоль типов всех объектов




			//// Open the model space block table record.
			////
			AcDbBlockTable *pBlkTbl;
			acdbHostApplicationServices()->workingDatabase()->getBlockTable(pBlkTbl, AcDb::kForRead);

			AcDbBlockTableRecord *pBlkTblRcd;
			pBlkTbl->getAt(ACDB_MODEL_SPACE, pBlkTblRcd,
				AcDb::kForRead);
			pBlkTbl->close();

			AcDbBlockTableRecordIterator *pBlkTblRcdItr;
			pBlkTblRcd->newIterator(pBlkTblRcdItr);

			AcDbEntity *pEnt;
			for (pBlkTblRcdItr->start(); !pBlkTblRcdItr->done(); pBlkTblRcdItr->step())
			{
				pBlkTblRcdItr->getEntity(pEnt,
					AcDb::kForRead);
				acutPrintf(L"\n--  %s", 
					(pEnt->isA())->name());
				pEnt->close();
			}
			pBlkTblRcd->close();
			delete pBlkTblRcdItr;
			
			acedRetVoid();	





public void CreateSolidsAndCheckIntersect() // This method can have any name 
        {

            Document doc = Application.DocumentManager.MdiActiveDocument;
            Database db = doc.Database;
            Editor ed = doc.Editor;

        
            bool intersect = false;



            Transaction tr =
              db.TransactionManager.StartTransaction();
            using (tr)
            {
                // Create the solid and set the history flag

                Solid3d sol = new Solid3d();
          

                // ранее здесь находился код создания цилиндра
                sol1.CreateBox(100.0, 500.0, 35.0);

         

                // Add the Solid3d to the modelspace

                BlockTable bt = (BlockTable)tr.GetObject(
                    db.BlockTableId,
                    OpenMode.ForRead
                  );

                BlockTableRecord ms = (BlockTableRecord)tr.GetObject(
                    bt[BlockTableRecord.ModelSpace],
                    OpenMode.ForWrite
                  );

                ms.AppendEntity(sol1);
   

                tr.AddNewlyCreatedDBObject(sol1, true);

                // And transform it to the selected point
                // основной метод для перемещения объектов
                sol1.TransformBy(
                  Matrix3d.Displacement(pt - Point3d.Origin)
                );

                Point3dCollection pts = new Point3dCollection();


                Plane one = new Plane(Point3d.Origin, new Vector3d(5d,0d,0d), new Vector3d(0d, 0d, 5d));


                //ent.BoundingBoxIntersectWith(ent1, Intersect.OnBothOperands, pts, IntPtr.Zero, IntPtr.Zero);

                Point3d thePoint = Point3d.Origin;


                Autodesk.AutoCAD.BoundaryRepresentation.Brep brepEnt = new Brep(sol1);
                PointContainment pointCont;
                brepEnt.GetPointContainment(thePoint, out pointCont);
                if (pointCont == PointContainment.Inside)
                {
                    intersect = true;
                }


                foreach (ObjectId id in ms)
                {
                    DBObject obj = (DBObject) tr.GetObject(id, OpenMode.ForRead);


                    Entity ent = (Entity)obj;
                    
                    ed.WriteMessage("\nType:" + ent.GetType().ToString());

                }






                Point3d p3dMax = sol1.GeometricExtents.MaxPoint; //получаем самую верхнюю точку bounding box

                Point3d p3dMin = sol1.GeometricExtents.MinPoint; //получаем самую нижнюю точку bounding box

                Brep brep1 = new Brep(sol1); //получаем B-Rep - представление объекта

                BrepVertexCollection vert_coll = brep1.Vertices; //Получаем массив вершин

                List<Autodesk.AutoCAD.BoundaryRepresentation.Vertex> vert_list = new List<Autodesk.AutoCAD.BoundaryRepresentation.Vertex>();

                foreach (Autodesk.AutoCAD.BoundaryRepresentation.Vertex vert in vert_coll)
                {

                    vert_list.Add(vert);

                }



                Document document = Application.DocumentManager.MdiActiveDocument;
                Editor editor;
                if (document != null)
                {


                    editor = document.Editor;
                    editor.WriteMessage("Min Point is" + p3dMin.ToString());

                    editor.WriteMessage("Intersect" + intersect.ToString());

                }

                tr.Commit();
            }

        }


ИТЕРИРОВАНИЕ ПО ВСЕМ СЛОЯМ С ПОЛУЧЕНИЕМ ОБЪЕКТОВ КАЖДОГО СЛОЯ

through-the-interface.typepad.com/through_the_interface/2008/05/finding-all-the.html

0 комментариев

Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.