다음 코드,되도록 선택된 도면 엔티티 다음으로도 견고한 블록으로 만든 다음과 삽입.
다음 C # 코드는 다음과 같습니다
// aryId 엔티티, 블록을했다. 개인 긴 MakeEntitysToBlock을 ( AxMxDrawXLib.AxMxDrawX의 mxdraw, 목록 <INT64> aryId ) { // . 현재 데이터베이스를 얻을 수 MxDrawDatabase curDatabase =을 (mxdraw.GetDatabase를 () () MxDrawDatabase를); //은 직사각형 외부 엔티티를 바깥 쪽을 선택합니다. 두 번 dMinX = 0 , dMinY = 0 , dMaxX = 0 , dMaxY = 0 ; BOOL isFirstEnt = true로 ; // 트래버스 각 엔티티, 아웃소싱의 계산. 대 ( INT를 L = 0 , L <aryId.Count; L ++ ) { // 얻어진 고체 객체 ID. MxDrawMcDbObject POBJ = curDatabase.ObjectIdToObject (aryId [L]), IF (POBJ == 널 ) 계속 ; 갇힌 MxDrawEntity = (MxDrawEntity) POBJ; IF (갇힌 == null이 ) 계속 ; // 가장 작은 외부 엔티티를 얻을. MxDrawPoint pt1Ob, pt2Ob을; (pEnt.GetBoundingBox 아웃 pt1Ob, 아웃 pt2Ob); MxDrawPoint minPt = (MxDrawPoint) pt1Ob; MxDrawPoint maxPt = (MxDrawPoint) pt2Ob; 경우 (minPt! = null의 && maxPt! = null이 ) { 경우 (isFirstEnt) { dMinX는 = minPt.x 단계; dMinY는 = minPt.y 단계; dMaxX = maxPt.x; dMaxY는 = maxPt.y 단계; isFirstEnt는 = 거짓 ; } 그밖에 { 경우 (dMinX> minPt.x) dMinX는 = minPt.x 단계; 경우 (dMinY> minPt.y) dMinY는 = minPt.y 단계; 경우 (dMaxX < maxPt.x) dMaxX = maxPt.x; 경우 (dMaxY < maxPt.y) dMaxY는 = maxPt.y 단계; } } } 경우 (isFirstEnt) { // 물리적 돌아 오지 0 ; } //은 아웃소싱의 중심점을 계산합니다. POS = MxDrawPoint 새로운 새 MxDrawPoint을 (); pos.x = dMinX + (dMaxX - dMinX) / 2.0 ; pos.y = dMinY + (dMaxY - dMinY) / 2.0 ; // 현재의 경우 데이터베이스에 이미 존재 새로 만든 블록 이름을 확인합니다. //이 블록 테이블을 얻었다 MxDrawBlockTable blkTable = curDatabase.GetBlockTable을 (); // 현재의 공간을 얻을 블록 테이블 레코드. CurSpace = MxDrawBlockTableRecord curDatabase.CurrentSpace (); 문자열 sNewBlakName; //은 익명의 블록, 추가 MxDrawBlockTableRecord blkNewRec blkTable.Add를 = ( "" ); // 블록 이름 할당 된 시스템을 얻는다. = sNewBlakName blkNewRec.Name; // 개질 블록 테이블 레코드 새로 추가 된 점이 외주의 중심점에 삽입된다. = blkNewRec.Origin POS; // 엔티티 블록 테이블을 추가 할 모든 엔티티 기록을 반복 처리. 대 ( INT를 L = 0 , L <aryId.Count; L ++ ) { //이 객체를 복사하여 상기 블록 테이블의 레코드를 추가한다. BlkNewRec.AddCloneEntity (aryId [L를]); // 엔티티가 이미 삭제. POBJ = MxDrawMcDbObject curDatabase.ObjectIdToObject (aryId [L]), IF (POBJ == 널 ) 계속 ; pObj.Erase (); } 경우 (blkNewRec! = null이 ) { //는 현재의 공간에, 방금 생성 블록 객체, 그리고 참조 블록 테이블의 레코드를 생성한다. BlkRef = curSpace.InsertBlock MxDrawBlockReference (pos.x, pos.y, sNewBlakName, 1.0 , 0.0 ); // 목표물 블록은 특성을 추가한다. ATTRIB = MxDrawAttribute blkRef.AppendAttribute (); attrib.Position = POS; attrib.AlignmentPoint = POS; attrib.Oblique = 0.0 ; attrib.Rotation = 0.0 ; attrib.Height = 2.0 ; attrib.TrueColor.SetRGB ( 255 , 0 , 0 ); attrib.TextString = " 이것은 테스트 텍스트 속성입니다 " ; attrib.Tag = " TestTag " ; attrib.IsInvisible는 = 거짓 ; blkRef.Position = blkRef.Position; // ID 블록을 반환 참조 된 개체 만들었습니다. 수익 blkRef.ObjectID; } 반환 0 ; }
코드를 호출 :
// 선택된 개체의 집합을 만듭니다. MxDrawSelectionSet SS = 새로운 새로운 MxDrawSelectionSet을 (); //는 사용자가도 객체를 선택할 수 있습니다. Ss.Select (MCAD_McSelect.mcSelectionSetUserSelect, 널 , 널 , 널을 ); // 사용자가 선택한 개체를 얻을 수는 aryID에 오브젝트 ID 일람 <INT64> = aryId 새로운 새로운 목록 <INT64> () 대 (INT32 I = 0 ; I <ss.Count; I ++ ) { MxDrawEntity ENT = ss.Item (I); 경우 (천만에! = null이 ) { aryId.Add (ent.ObjectID); ent.Close (); } } // 함수, 블록을 선택한 오브젝트를 호출한다. MakeEntitysToBlock (axMxDrawX1, aryId);