3D

    두 물체 사이 최소 거리 구하기

    두 물체 사이의 가시성 있는 삼각형만 포함한 최소 거리를 계산하려면 다음과 같은 주요 단계를 거쳐야 합니다:각 물체에 대해 가시성 있는 삼각형을 찾습니다.각 물체의 가시성 있는 삼각형의 각 점들 사이의 거리를 계산합니다.이 중 가장 짧은 거리를 찾습니다.아래는 이를 수행하는 C++ 코드 예제입니다. OpenMP를 사용하여 병렬 처리를 통해 가시성 테스트를 수행하며, 두 물체 사이의 최소 거리를 계산합니다. #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #includ..

    [OSG] 초기 화면 비율 조정

    [ 2011년에 작성된 글입니다. 지금은 다를 수 있습니다. ] 초기 생성 시, 가로/세로 비율이 맞지 않는 문제가 발생한다면, 아래의 코드로 해결된다. double fovy,aspectRatio,z1,z2; firstView->getCamera()->getProjectionMatrixAsPerspective(fovy,aspectRatio,z1,z2); aspectRatio=double(traits->width)/double(traits->height); firstView->getCamera()->setProjectionMatrixAsPerspective(fovy,aspectRatio,z1,z2);

    [OpenCASCADE] STL(Mesh) to Polygon 2

    [ 2010년에 작성된 글입니다. 지금은 다를 수 있습니다. ] 이전 코드에서는 단순히 삼각형 정보를 얻어서 Compound 형식의 Shape로 만드는 것이었다. 2021.03.13 - [OCC] - [OpenCASCADE] STL(Mesh) to Polygon [OpenCASCADE] STL(Mesh) to Polygon [ 2010년에 작성된 글입니다. 지금은 다를 수 있습니다. ] Mesh를 가지고는 OCC에서의 일반적인 알고리즘을 사용할 수 없을 듯 하여, Polygon 으로 변환을 하였다. 물론 Mesh의 삼각형 데이터를 무작정 po sondra.tistory.com 그러다 보니 여러모로 만들어진 Shape로 처리할 수 있는 것들이 없었다. 하다 못해 Plane과의 intersection cur..

    [OpenCASCADE] Shape Edge Intersection

    [ 2010년에 작성된 글입니다. 지금은 다를 수 있습니다. ] TopOpeBRep_ShapeIntersector 를 이용하면 TopoDS_Shape 관련 Intersection 정보를 구하는 건 거의 다 할 수 있을 것 같다. 그동안 IntTools_EdgeEdge, GeomAPI_IntCS, 등등을 이용해보려고 했으나, 대부분 Geom 형태의 데이터가 필요해서 역 변환을 하는 과정에서 문제가 생긴 것 같은데, Shape을 바로 사용할 수 있는 클래스가 있어서 다행이 문제가 해결됬다. TopoDS_Edge line1 = BRepBuilderAPI_MakeEdge(gp_Pnt(-100, 0, m_fZPos), gp_Pnt(100, 0, m_fZPos)); TopOpeBRep_ShapeIntersector..

    [OpenCASCADE] Gradient Background 표현하기

    [ 2010년에 작성된 글입니다. 지금은 다를 수 있습니다. ] CAD 시스템에서 많이 사용하는 Gradient Background 표현하기. OpenCascade 블로그를 이용하여 간단하게 구현해 보았다. 쉽게 적용은 되지만, 왠지 화면 크기 변경 시 색상이 원하는 데로 변하지는 않는 것 같다. 마치 정사각형 중에서 화면 크기만큼만 잘리는 느낌이랄까.... 머 이건 나중에 좀더 보기로 하고 일단 적용.. if (aBackgroundLayer.IsNull()) { Standard_Boolean aSizeDependant = Standard_True; //each window to have particular mapped layer? aBackgroundLayer = new Visual3d_Layer(my..

    [OpenCASCADE] Intersection (Shape - Plane)

    [ 2010년에 작성된 글입니다. 지금은 다를 수 있습니다. ] Shape와 Plane 사이의 Intersection을 구하는 방법. TKBO.lib 참조 필요함. TopoDS_Face temp_face = BRepBuilderAPI_MakeFace(gp_Pln(gp_Pnt(0, 0, 0), gp_Dir(0, 0, 1))); BRepAlgoAPI_Section mkCut(aShape, temp_face, Standard_False); mkCut.ComputePCurveOn1(Standard_True); mkCut.Approximation(Standard_True); mkCut.Build(); myAISContext->Display(new AIS_Shape(mkCut.Shape()));

    [OpenCASCADE] STL(Mesh) to Polygon

    [ 2010년에 작성된 글입니다. 지금은 다를 수 있습니다. ] Mesh를 가지고는 OCC에서의 일반적인 알고리즘을 사용할 수 없을 듯 하여, Polygon 으로 변환을 하였다. 물론 Mesh의 삼각형 데이터를 무작정 polygon으로 만든거라.... 무식하면서도,, 좀 그렇지만, 어쨋든 간단하게 처리가 가능하므로 일단 적용. 큰 모델에서는 다른 방법이 필요할 듯 하다. OSD_Path aFile("path"); Handle(StlMesh_Mesh) aSTLMesh = RWStl::ReadFile(aFile); TopoDS_Compound ResultShape; BRep_Builder CompoundBuilder; CompoundBuilder.MakeCompound(ResultShape); Standar..