AutoCAD에서의 Donut과 유사하게 MSTN J에서 Donut을 만드는 함수입니다.
함수 분석은 그리 어렵지 않구요.
간단히 설명하자면 두개의 Ellipse를 생성한 다음에 큰 Ellipse에서 작은 Ellipse을 뺀 나머지 부분을 생성한 후 저장하면 됩니다.
함수 분석은 그리 어렵지 않구요.
간단히 설명하자면 두개의 Ellipse를 생성한 다음에 큰 Ellipse에서 작은 Ellipse을 뺀 나머지 부분을 생성한 후 저장하면 됩니다.
//! get difference pattern between two patterns mdlElmdscr_differenceShapes(&patternEdPP, NULL, OutpatternEdPP, InpatternEdPP , 0);
자 그럼 코드를 볼까요.../** @brief create donut @author HumKyung.Baek @date ????.??.?? @return boolean */ Private boolean Draw_Donut(floatfInsideDia, floatfOutsideDia, Dpoint3d *ptCenter, intnColor, intnLayer) { MSElementUnion newElement, newInElement, newOutElement; inti, stat; intnFillmode = 1; intnWeight, nStyle; MSElementDescr *OutpatternEdPP = NULL, *InpatternEdPP = NULL, *patternEdPP = NULL; doubleunitVal = tcb->uorpersub; ptCenter->x = ptCenter->x * unitVal; ptCenter->y = ptCenter->y * unitVal; ptCenter->z = ptCenter->z * unitVal; stat = mdlEllipse_create(&newOutElement, NULL, ptCenter, fOutsideDia*unitVal, fOutsideDia*unitVal, NULL, nFillmode); if(stat != SUCCESS) { PrintError("Error creating graphic element!"); return FALSE; } mdlElement_setSymbology(&newOutElement, &nColor, NULL, NULL); mdlElement_setProperties(&newOutElement , &(nLayer) , NULL, NULL, NULL, NULL, NULL, NULL, NULL); if(fInsideDia > 0.0) { stat = mdlEllipse_create(&newInElement, NULL, ptCenter, fInsideDia*unitVal, fInsideDia*unitVal, NULL, nFillmode); if(stat != SUCCESS) { PrintError("Error creating graphic element!"); returnFALSE; } mdlElement_setSymbology(&newInElement, &nColor, NULL, NULL); mdlElement_setProperties(&newInElement , &(nLayer) , NULL, NULL, NULL, NULL, NULL, NULL, NULL); mdlElement_display(&newInElement, NORMALDRAW); mdlElmdscr_new (&OutpatternEdPP, NULL, &newOutElement); mdlElmdscr_new (&InpatternEdPP, NULL, &newInElement); //! get difference pattern between two patterns mdlElmdscr_differenceShapes(&patternEdPP, NULL, OutpatternEdPP, InpatternEdPP , 0); mdlElmdscr_display(patternEdPP, 0, NORMALDRAW); mdlElmdscr_add (patternEdPP); //! free mstn element descriptions mdlElmdscr_freeAll(&patternEdPP); mdlElmdscr_freeAll(&InpatternEdPP); mdlElmdscr_freeAll(&OutpatternEdPP); } else { mdlElement_display(&newOutElement, NORMALDRAW); stat = mdlElement_add(&newOutElement); if(stat == 0) { PrintError("Error adding graphic element!"); return FALSE; } } return TRUE; }
아래는 샘플 output 이미지입니다.
댓글
댓글 쓰기