기본 콘텐츠로 건너뛰기

8월, 2011의 게시물 표시

Hole in solid

Solid에 구멍을 만드는 예제입니다. //The cylinder gp_Pnt neckLocation ( gp_Pnt ( 30 , 30 , 0 ) ) ; gp_Dir neckNormal = gp :: DZ ( ) ; gp_Ax2 neckAx2 ( neckLocation , neckNormal ) ; TopoDS_Shape aHole = BRepPrimAPI_MakeCylinder ( neckAx2 , 10 , 60 ) ; //The cube TopoDS_Shape box = BRepPrimAPI_MakeBox ( gp_Pnt ( 0 , 0 , 0 ) , 60 , 60 , 60 ) ; //Cube - Cylinder TopoDS_Shape result = BRepAlgoAPI_Cut ( box , aHole ) ; return result ;

Surface of revolution 예제

아래는 OCC에 들어 있는 예제중의 하나 입니다. TopoDS_Edge E1 = BRepBuilderAPI_MakeEdge ( gp_Pnt ( 0 . , 0 . , 0 . ) , gp_Pnt ( 50 . , 0 . , 0 . ) ) ; TopoDS_Edge E2 = BRepBuilderAPI_MakeEdge ( gp_Pnt ( 50 . , 0 . , 0 . ) , gp_Pnt ( 50 . , 50 . , 0 . ) ) ; TopoDS_Edge E3 = BRepBuilderAPI_MakeEdge ( gp_Pnt ( 50 . , 50 . , 0 . ) , gp_Pnt ( 0 . , 0 . , 0 . ) ) ; TopoDS_Wire W = BRepBuilderAPI_MakeWire ( E1 , E2 , E3 ) ; gp_Ax1 axe = gp_Ax1 ( gp_Pnt ( 0 . , 0 . , 30 . ) , gp_Dir ( 0 . , 1 . , 0 . ) ) ; ///Handle(Geom_Axis1Placement) Gax3 = new Geom_Axis1Placement(axe); /// i don't know why below code raises error ///Handle (AIS_Axis) ax3 = new AIS_Axis(Gax3); ///m_hAISContext->Display(ax3,Standard_False); TopoDS_Shape S3 = BRepPrimAPI_MakeRevol ( W , axe , 210 . * PI180 ) ; Handle ( AIS_Shape ) ais5 = new AIS_Shape ( W ) ; m_hAISContext - > Display ( ais5 , Standard_True ) ; Handle ( AIS_Shape ) ais6 = new AIS_Shape ( S3 ) ; m_hAISContext - > SetColo

BREP 데이타 출력

아래는 BREP 데이타를 출력하는 코드입니다. BRep_Builder B ; TopoDS_Shape S1 ; BRepTools :: Read ( S1 , lpszPathName , B ) ; if ( S1 . IsNull ( ) ) { AfxMessageBox ( _T ( " Shape(s) not found. " ) , MB_ICONERROR ) ; } else { Handle_AIS_Shape hAISShape = new AIS_Shape ( S1 ) ; hAISShape - > SetColor ( Quantity_NOC_GREEN ) ; hAISShape - > SetMaterial ( Graphic3d_NOM_PLASTIC ) ; m_hAISContext - > Display ( hAISShape , false ) ; }

[MDL] ProgressBar 표현

어떤 다소 시간이 걸리는 작업을 할때 사용자들을 멍~하니 기다리게 하는 것보다 ProgressBar를 표시하는 것이 효과적입니다. 예제) 열린 파일에서 현재 읽고 있는 요소대한 진행 상태를 표시하는 방법에 대해 알아보도록 하겠습니다.(즉 현재 몇번째 요소를 읽고 있는지 나타내는...) 1. 화면에 표시할 다이얼로그 리소스 준비 2. 다이얼로그를 생성할 스레드 생성 작업 스레드에서 다이얼로그를 생성하도록 합니다. 여기서 하고 싶은 말 : mdlXXX류의 함수는 작업 스레드에서 제대로 작동하지 않을수 있으니... 주 스레드에서 호출해야 한다는 것입니다. /****************************************************************************** @author humkyung @date 2011-08-22 @class @function StatusThreadEntry @return UINT @param LPVOID pVoid @brief ******************************************************************************/ UINT StatusThreadEntry(LPVOID pVoid) { CWorkStatusDlg* pDlg = (CWorkStatusDlg*)(pVoid); if(pDlg) { InterlockedExchange((LONG*)(&(pDlg->m_bThreadRunning)) , TRUE); pDlg->DoModal(); } return ERROR_SUCCESS; } extern "C" __declspec(dllexport) int __stdcall RevMISC(const CString &INI_FILE_PATH)

BsplineSurface에서 Mesh 데이타 구하기

아래와 같은 단계를 통하여 BsplineSurface의 Mesh 데이타를 구할 수 있습니다. 1. MSElementDescr을 MSBsplineSurface 타입으로 변환 MSBsplineSurface oBsplineSurf; mdlBspline_convertToSurface(&oBsplineSurf , element); 2. BsplineSurface의 Mesh 데이타를 PolyfaceArray에 넣기 PolyfaceArrays oPolyFaces; memset(&oPolyFaces , 0x00 , sizeof(oPolyFaces)); oPolyFaces.pIndex = jmdlEmbeddedIntArray_grab(); oPolyFaces.pXYZ = jmdlEmbeddedDPoint3dArray_grab(); oPolyFaces.pUV = jmdlEmbeddedDPoint2dArray_grab(); if(SUCCESS == mdlMesh_polyfaceArraysFromMSBsplineSurface(&oPolyFaces , &oBsplineSurf , 1*mdlModelRef_getUorPerMaster(ACTIVEMODEL) , FALSE , TRUE)) { const int nXYCount = jmdlEmbeddedDPoint3dArray_getCount(oPolyFaces.pXYZ ); const int indexCount = jmdlEmbeddedIntArray_getCount(oPolyFaces.pIndex) ; /// do something!!! } BsplineSurface BsplineSurface의 Mesh 데이타

cloud 마크 그리기

프로젝트에서 사용할 어떤 대상의 Cloud 마크를 그리는 로직을 구상해 보았습니다. 제약 조건) 1. Cloud 마크 대상이 분리되어서는 안됩니다. (현재 분리된 대상의 경우 각각 Cloud 마크를 그릴 수는 있습니다.) 순서) 1. Cloud 마크 대상 획득 2. 대상 확대 3. 외곽선 구하기 4. Cloud 마크 표기 테스트 결과) 개선 사항) 1. 대상 확대 시 주위의 요소 고려 2. Cloud 마크 표기 루틴 개선 실제 적용 아래와 같은 CAD요소에 위의 로직을 적용시켜 보았습니다. Cloud 마크를 그리는 부분을 조금 개선해야겠습니다. (끝부분이 연결이 되지 않네요...)