前提・実現したいこと
現在地図表示のプログラムを作成しています。
C言語で書かれているプログラムをC#に書き換えようとしているのですが、C#は初めてなので、どのように書き換えたらいいかわかりません。
ファイルは下記サイトなどのDMファイルを用いています。
→ http://www.gsi.go.jp/kiban/
発生している問題
書き換え方が分からないため、教えていただきたいです。
該当のソースコード
C
1#include<stdio.h> 2#include<stdlib.h> 3#include<string.h> 4 5#include "graphics.h" 6 7// 地図サイズは 2000m × 1500m 8#define WINDOW_WIDTH 1000 9#define WINDOW_HEIGHT 750 10 11#define MAXLINE 100 12#define FIELD_SIZE 7 13 14#define MAXENTITY 60000 15#define MAXPOINT 300000 16 17typedef struct entity { 18 int shape; //種類 19 int type; //分類 20 int start; //座標データ 21 int n; //座標データ数 22}ENTITY; 23 24// 要素データの記録 25int geIndex = 0; 26ENTITY gEntity[MAXENTITY]; 27// 座標データの記録 28int gpIndex = 0; 29POINT gPoint[MAXPOINT]; 30 31void display(void) 32{ 33 int i; 34 35 for (i = 0; i < geIndex; i++) //記録されているすべての要素データ 36 { 37 if (gEntity[i].shape == 1) //面 38 { 39 glColor3d(0.5, 0.0, 0.0); 40 drawPolygon(gPoint[gEntity[i].start], gEntity[i].n); 41 } 42 else //線 43 { 44 glColor3d(0.2, 0.2, 0.2); 45 drawLines(&gPoint[gEntity[i].start], gEntity[i].n); 46 } 47 } 48} 49 50int main(int argc, char *argv[]) 51{ 52 FILE *fp; 53 char buff[MAXLINE]; 54 char str[10]; 55 int i, n, nn; 56 57 if (fopen_s(&fp, argv[1], "r") == NULL) 58 { 59 fprintf(stderr, " Error: File Open - %s\n", argv[1]); 60 exit(1); 61 } 62 63 while (fgets(buff, MAXLINE, fp) != NULL) 64 { 65 if (buff[0] != 'E') //要素データ以外は読み飛ばす 66 continue; 67 68 switch (buff[1]) 69 { 70 case '1': //面と線のみを処理 71 case '2': 72 73 //要素データの処理 74 gEntity[geIndex].shape = buff[1] - '0'; 75 76 strncpy(str, &buff[2], 4); 77 str[4] = '\0'; 78 gEntity[geIndex].type = atoi(str); 79 80 gEntity[geIndex].start = gpIndex; 81 82 strncpy(str, &buff[27], 4); 83 str[4] = '\0 '; 84 gEntity[geIndex].n = atoi(str); 85 86 n = gEntity[geIndex].n; 87 88 while (n > 0) 89 { 90 nn = n; 91 if (nn > 6) 92 nn = 6; //行のデータ数を最大の個以下に制限16 93 n -= nn; 94 95 fgets(buff, MAXLINE, fp); 96 97 for (i = 0; i < nn; i++) 98 { 99 // 座標の取得X 100 strncpy(str, &buff[0 + (FIELD_SIZE)* i * 2], FIELD_SIZE); 101 str[FIELD_SIZE] = '\0'; 102 gPoint[gpIndex].y = atoi(str) / 100 / 2; // X −> Y 103 104 // 座標の取得Y 105 strncpy(str, &buff[FIELD_SIZE + FIELD_SIZE * i * 2], FIELD_SIZE); 106 str[FIELD_SIZE] = '\0'; 107 gPoint[gpIndex].x = atoi(str) / 100 / 2; // Y −> X 108 109 if (++gpIndex >= MAXPOINT)// 座標データ配列のオーバーフロー確認 110 { 111 fprintf(stderr, "ERROR: Point Array Overflow !\n "); 112 exit(2); 113 } 114 } 115 } 116 117 if (++geIndex >= MAXENTITY)// 要素データ配列のオーバーフロー確認 118 { 119 fprintf(stderr, "ERROR: Entity Array Overflow !\n"); 120 exit(3); 121 } 122 123 break; 124 default: // 面、線以外は処理しない 125 continue; 126 } 127 } 128 fclose(fp); 129 130 initGraphics(argc, argv, WINDOW_WIDTH, WINDOW_HEIGHT); 131 glutMainLoop(); 132 133 return 0; 134} 135
補足情報(FW/ツールのバージョンなど)
Visual Studio 2017
Windows フォームアプリケーション(.NET Framework)
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。