CAD는 블록 테이블 선택 엔티티 운영 블록에 만든 COM (C # 인터페이스 언어)

다음 코드,되도록 선택된 도면 엔티티 다음으로도 견고한 블록으로 만든 다음과 삽입.

다음 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);

 

추천

출처www.cnblogs.com/yzy0224/p/12023096.html