기본 콘텐츠로 건너뛰기

라벨이 Cloud Mark인 게시물 표시

Cloud 마크 그리기 개선

하나의 다각형에 대한 Cloud 마크를 그리는 것에 대해 알아봤습니다. 연결된 여러개의 다각형이 있을 경우 각각 개별적으로 다각형을 생성하는 것은 자칫 지저분해 보일 수 있으므로 연결된 다각형을 묶어 Cloud 마크를 생성하는 것에 대해 알아보도록 하겠습니다. 가운데 3개의 다각형(B,C,D)이 겹쳐져 있습니다. 먼저 겹쳐진 다각형을 찾아야 합니다. 다각형의 Bounding Box를 이용하여 서로 겹쳐지는지 여부를 확인할 수 있습니다. # A, B is Bounding Box if A.MinX > B.MaxX or A.MinY > B.MaxY or A.MaxX < B.MinX or A.MaxY < B.MaxY: return false else: return true 따라서 아래와 같이 색깔별로 묶을 수 있습니다. 여러개의 다각형을 Cloud 마크를 그리기위해 하나의 다각형으로 만들어줘야 합니다. (저희들은 하나의 다각형에 대해서 Cloud 마크를 그리는 로직을 가지고 있습니다.) 일단 다각형을 구성하는 정점들을 구합니다. 첫번째 방법 : 정점들을 포함하는 Bounding Box를 구해 다각형을 생성합니다. 두번째 방법 : 정점들을 포함하는 ConvexHull을 구해 다각형을 생성합니다.

[AutoCAD.NET] 주어진 폴리곤을 이용하여 Cloud 마크 그리기

아래와 같이 폴리곤이 주어졌을때 폴리곤 외곽선을 따라 Cloud 마크를 그리는 방안입니다. 폴리곤의 외곽선을 따라 아래와 같이 Cloud 마크를 그릴수 있습니다. AutoCAD.NET API를 이용하면 손쉽게 Cloud 마크를 생성할 수 있습니다. 폴리곤을 이루는 Vertex에 bulge값을 주면 arc가 생성됩니다. Polyline polyline = new Polylin(); polyline.AddVertexAt(index, pt, bulge, 0, 0); $(P0,P1,P2)$로 이루어지는 폴리곤에 Cloud 마크를 그리기 위해 정점$(P0,P1,P2)$ 사이에 임시 정점을 arc length만큼 띄워서 추가합니다. arc length는 상황에 맞게 설정해주면 됩니다. (사용자 옵션 혹은 폴리곤을 이루는 가장 작은 선분의 길이에 비례한 값) double dArcLength = 0.1; List<Point2d> lstPoint = new List<Point2d>(); Point2d[] corners = new Point2d[] { P0, P1, P2 }; for(int i = 0; i < corners.Length;++i) { double l = corners[(i + 1) % corners.Length].GetDistanceTo(corners[i]); int count = Convert.ToInt32(l / dArcLength); Vector2d vec = corners[(i + 1) % corners.Length] - corners[i]; Vector2d normal = vec.GetNormal(); for(int j = 0; j < count;++j) { Point2d pt = corners[i] + normal * j * dArcLength; lstPoint.Add(pt); } } 여기서 주의할 것은 폴리...

cloud 마크 그리기

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