2014-05-16 3 views
1

나는이 사이트에서 오랫동안 배우고있다. 그러나 이것은 나의 첫 번째 질문인데, 나는 토목 기사이다. 나는 벽을 지탱할 디자인을위한 소프트웨어를 쓰고있다. 아래에 표시된 그림을 정적 또는 동적으로 그리십시오. (동적 인 경우, 숫자가 상하로 된 도구를 통해 그래프의 크기를 변경할 수 있으며 변경 사항은 그래프에서 볼 수 있습니다.) 이들은 준비된 형식이어야합니다 사용자가 강하를 입력하는 데 도움이됩니다. 내가 이것을 배울 소스를 찾을 수 있습니까? 는 내가 너무 ..thank 당신이 너무 여기에정적 그래프 나 동적 그래프를 그리는 방법?

enter image description here

+1

IT에 오래된 qustion가 있습니다. Make 또는 Buy? 이를위한 도구가 있으며 사용법을 배우는 것은 그 자체로 힘든 일입니다. 그것들을 쓰는 것은 초보자는 말할 것도없고, 한사람을위한 것이 아닙니다. – TaW

+0

태권도, 먼저 관심과 회신에 감사 드리며, 내가 무엇을하라고 조언합니까? , 어떻게해야합니까? 이 모양을 얻고 내 소프트웨어에 그림을 그리기 위해서? –

+0

지금까지 귀하의 프로그램이하는 일을 조금 말해주십시오! – TaW

답변

1

초보자 나를 생각, 내가 좋은 아니에요, 그 프로그래밍을 전공하지 않습니다 유의하시기 바랍니다 프로그래밍에서 가장 똑똑한 사람들과 거래 할 수있다 알 도면에 프로그램을 추가하는 데 필요한 것들에 대한 간단한 소개입니다.

0 - 플랫폼을 결정하십시오 : Winforms 또는 WPF? 너의 종류의 그래픽을 WinForms 할 것이다; 3D 및 애니메이션 WFP은 더 나은 선택이지만 가파른 학습 곡선을 희생해야합니다.

1 - 윈폼의 기본 그래픽 모델 이해 : 제어에 그려

  • 모든 것이 paint event에 그려야합니다 또는 거기에서 트리거를

  • 윈도우 소요됩니다 외부 사건이있을 때마다 그림을 상쾌하게하는 것 그것을 덮었다.

  • 사용자는 데이터를 변경할 때마다 컨트롤을 무효화하여 페인트 이벤트를 트리거 할 수 있어야합니다. sketchPanel.Invalidate();과 함께 새로 고침 버튼을 코드로 추가하십시오.

2 - 당신이 원하는대로 형태와 anchor 또는 dock 그것에에 그리는 컨트롤을 추가합니다. 에 그리기위한 panel를 사용하여 그것에게 좋은 이름을, sketchPanel 말을하고 (창 이벤트 속성에서 doubleclicking에 의해)

3의 Paint 이벤트를 만들 - 모든 그리기 작업은 Graphics 개체에서 발생합니다. Paint 이벤트에서는 e.Graphics으로 제공됩니다. drawMyWall (그래픽 G)과 같이 자신 만의 기능을 그리는 경우 Paint 이벤트에서 호출하고 e.Graphics 객체를 전달할 수 있습니다.

4 - 방법은 사용하는 측정을 작성하기위한 만드는 라인

  • DrawString
  • 을위한

    • DrawLine는 컬러 벽이나 땅이나 물을 몸
    • DrawPolygon에 대한 그리기 위해
    • FillPolygon 레이블입니다 벽의 윤곽 그리기

    모두는 스케치 패널에 상대적인 픽셀 단위로 좌표를 취합니다; 귀하의 사용자 입력이 미터 또는 밀리미터 단위로 표시되기 때문에 숫자로 변환해야합니다. 외벽 치수를 계산하고 패널의 크기에 맞게 조정하십시오!

    Draw-/FillPloygon 메서드는 array of Points을 기대합니다.

    는 먼저 List<Point> wallpoints = new List<Point>(); 선언하고 필요한 각 포인트 추가해야를 만드는 방법 (CW 또는 CCW) 모두 순서 따라야 여기 wallpoints.Add(new Point(someX, someY)); 및 좌표 입력 측정들로부터 계산되어야 포인트. 간단한 중력 벽에는 4 포인트 만 있지만 더 복잡한 벽에는 12 개 이상의 벽이 있습니다.

    목록이 완성되면 예를 들어에서 사용할 수 있습니다. 다음과 같은 FillPolygon 방법 :

    e.Graphics.FillPolygon(Brushes.Orange, wallpoints.ToArray()); 
    

    입력 측정 값으로부터 모든 점을 계산하므로 도면이 완전히 동적입니다.

    처음에는 레이블 등을 생략 할 수 있습니다. 또한 패널에서 좀 더 중앙에 배치 된 위치로 도면을 이동하기 위해 계산 한 점에 간격 띄우기를 추가 할 수 있습니다.

    내가 도움이 되었기를 바랍니다.

    +0

    죄송합니다, 나는이 모든 것에 동의하지 않습니다. OP에서 보여지는 이미지는 CAD와 유사한 3D 그래픽을 보여 주며 winforms (전혀 쓸모없는)이나 WPF (이것에 필요한 고성능 3D 기능을 제공하지 않음)는이 용도에 적합합니다. 이것은 순수한 하드 코어 C++ 및 DirectX 또는 OpenGL을 사용하여 실제로 수행되어야합니다. –

    +0

    이것은 (모든) 주석을 읽지 않았기 때문입니다. 내 첫 번째 (!)부터 시작하여 가운데 하단의 이미지가 충분히 좋은 것으로 동의 한 이미지부터 시작합니다. WinForms에서이 작업을 수행 할 수 없다면, 죄송합니다. 나는 할 수있다. 심지어 C++에 대해서도 우스운 이야기를한다. – TaW

    +0

    "Winforms에서이 작업을 수행 할 수 없다면"- winforms는 하드웨어 가속 부족으로 인해 깜박임을 많이 보지 않고도 가장 기본적인 드로잉을 수행 할 수 없습니다. 해상도 독립성 및 자동 조정 레이아웃 만 보자. 난 정말 당신의 winforms 버전을보고 싶습니다. –

    관련 문제