jw_cad 外部変形 - (1003) gccで指示点を確認する(hp) -

外部変形は データのやり取りをテキストファイルで行うので プログラム言語は 自由に選ぶことができます。図形は機能的かつシンプルなため、数多くのユーザーに受け入れられています。

 

gccで指示点を確認する(hp)

:gccで指示点を確認する(hp)
@echo off
if not exist %~dpn0.exe (
  for /f "delims=:" %%n in ('findstr /n "^#!" %0') do (
    more +%%n %0 > %~dpn0.c
    gcc -Os %~dpn0.c -o %~dpn0.exe -s
  )
)
%~dpn0
goto:eof

REM #jww
REM #1-%d 点を指示してください
REM #99#
REM #zs
REM #e

#!この次の行からプログラムを書いてください
#include "jw.h"
int main(void)
{
  FILE *f, *g;
  int i, n;
  char S_[256], *F[20];
  char SS[256];
  double hs[16], w, h, hp[101][2];
  char lg[4], plg[4], nn[4];
  int flg = 0, hpn = 0;
  double sc;
  if ( (f = fopen("jwc_temp.txt", "r")) != NULL) {
    g = fopen("myfiles", "w");
    while (fgets(S_, 256, f) != NULL) {
      strcpy(SS, chomp(S_));
      split(SS, F);
      if (strncmp(S_, "hq", 2) == 0) fprintf(g, "hd\n");
      if (strncmp(S_, "hs", 2) == 0) {
        for (i = 0; i < 16; i++) hs[i] = atof(F[i+1]);
      }
      if (strncmp(S_, "hzs", 3) == 0) { w = atof(F[1]); h = atof(F[2]); }
      if (strncmp(S_, "hp", 2) == 0) {
        n = strlen(F[0]);
        substr(F[0], 2, n-1, nn);
        chomp(nn);
        if (n > 0 && nn[n-1] == '-')
        {
          substr(F[0], 2, n-2, nn);
        }
        i = atoi(nn);
        hp[i][0] = atof(F[1]);
        hp[i][1] = atof(F[2]);
        hpn++;
      }
      if (strncmp(S_, "lg", 2) == 0) {
        n = strlen(S_);
        substr(S_, 2, n-1, plg);
        if (flg == 0) { strcpy(lg, plg); flg = 1; }
      }
    }
  } else {
    exit(MISSING_JWC_TEMP_TXT);
  }
  sc = hs[htoi(lg)];
  w *= sc;
  h *= sc;
  fprintf(g, "%.15g %.15g %.15g %.15g\n", (-w) / 2.0, 0.0, w / 2.0, 0.0);
  fprintf(g, "%.15g %.15g %.15g %.15g\n", 0.0, (-h) / 2.0, 0.0, h / 2.0);
  fprintf(g, "ch 0 0 1 0 \"[0, 0]\n");
  for (i = 1; i <= hpn; i++) {
    fprintf(g, "pt %.15g %.15g\n", hp[i][0], hp[i][1]);
    fprintf(g, "ch %.15g %.15g 1 0 \"[%.15g, %.15g]\n", hp[i][0], hp[i][1], hp[i][0], hp[i][1]);
  }
  fclose(g);
  fclose(f);
  remove("jwc_temp.txt");
  rename("myfiles", "jwc_temp.txt");
  return 0;
}