jw_cad 外部変形 - (1004) gccで指示線を確認する(ln) -

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

 

gccで指示線を確認する(ln)

:gccで指示線を確認する(ln)
@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%dln 線を指示してください
REM #99#
REM #bz
REM #e

#!この次の行からプログラムを書いてください
#include "jw.h"
int main(void)
{
  FILE *f, *g;
  int i, n, NF, lnn;
  char S_[256], *F[20];
  char SS[256];
  char s[256], t[256];
  double ln[101][4];
  double r, x1, y1, x2, y2;
  if ( (f = fopen("jwc_temp.txt", "r")) != NULL) {
    g = fopen("myfiles", "w");
    while (fgets(S_, 256, f) != NULL) {
      strcpy(SS, chomp(S_));
      NF = split(SS, F);
      if (strncmp(S_, "hq", 2) == 0) { 
        fprintf(g, "bz\n"); 
      }
      if (strncmp(S_, "hhp", 3) == 0) {
        n = strlen(S_);
        substr(S_, n-2, 3, s); // s => 末尾2文字
        if (strcmp(s, "ln") == 0) { // hhp([1-9][0-9]?)ln
          substr(S_, 3, n-3-2, t);  // t => $1
          lnn = atoi(t);
        }
      }
      if (strncmp(S_, " ", 1) == 0 && NF == 4) {
        for (i = 0; i < 4; i++) { ln[lnn][i] = atof(F[i]); }
        r = lnlength(ln[lnn]) / 2.0;
        x1 = ln[lnn][0];
        y1 = ln[lnn][1];
        x2 = ln[lnn][2];
        y2 = ln[lnn][3];
        fprintf(g, "ci %.15lg %.15lg %.15lg\n", (x1 + x2) / 2.0, (y1 + y2) / 2.0, r);
      }
    }
  } else {
    exit(MISSING_JWC_TEMP_TXT);
  }
  fclose(g);
  fclose(f);
  remove("jwc_temp.txt");
  rename("myfiles", "jwc_temp.txt");
  return 0;
}

 

 

線分を指示してそれが直径となる円を描いています。正規表現は利用していません。