jw_cad 外部変形 - (970) gccで2重線を引く(2sen) -

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

 

gccで2重線を引く(2sen)

:gccで2重線を引く(2sen)
@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
  )
)
set w=%1
set mode=1
:set mode=0
%~dpn0
goto:eof

REM #jww
REM #1-%d 始点を指示して下さい
REM #2%d 終点を指示して下さい
REM #k 線の幅| 200(L) | 400(R) | 120 | 150 | 180 | 220 | 250 | 300 | 350 |
REM #e

#!この次の行からプログラムを書いてください
#include "jw.h"
int main(void)
{
  FILE *f;
  char S_[256], *F[20];
  double x1, y1, x2, y2;
  int ww[] = {200, 200, 400, 120, 150, 180, 220, 250, 300, 350};
  double xw, yw, w, p, d, r;
  int mode = atoi(getenv("mode"));
  if ( (f = fopen("jwc_temp.txt", "r")) != NULL) {
    while (fgets(S_, 256, f) != NULL) {
      split(chomp(S_), F);
      if (strncmp(S_, "hp1", 3) == 0) { x1 = atof(F[1]); y1 = atof(F[2]); }
      if (strncmp(S_, "hp2", 3) == 0) { x2 = atof(F[1]); y2 = atof(F[2]); }
    }
  } else {
    exit(MISSING_JWC_TEMP_TXT);
  }
  fclose(f);
  w = ww[atoi(getenv("w"))];
  yw = w / 2.0 * cos(d = atan2(y2 - y1, x2 - x1));
  xw =-w / 2.0 * sin(d);
  f = fopen("jwc_temp.txt", "w");
    fprintf(f, "%.15g %.15g %.15g %.15g\n", x1 + xw, y1 + yw, x2 + xw, y2 + yw);
    if (w > 0) {
      fprintf(f, "%.15g %.15g %.15g %.15g\n", x1 - xw, y1 - yw, x2 - xw, y2 - yw);
    }
    if (mode == 1 && w > 0) {
      p = deg(d) + 90;
      r = w / 2;
      fprintf(f, "ci %.15g %.15g %.15g %.15g %.15g 1 0\n", x1, y1, r, p, p + 180);
      fprintf(f, "ci %.15g %.15g %.15g %.15g %.15g 1 0\n", x2, y2, r, p - 180, p);
    }
  fclose(f);
  return 0;
}