jw_cad 外部変形 - (869) pythonでソリッド図形のH形鋼断面を描く -

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

 

pythonでソリッド図形のH形鋼断面を描く

:pythonでソリッド図形のH形鋼断面を描く
@echo off
if not exist %~dpn0.py (
  for /f "delims=:" %%n in ('findstr /n "^#!" %0') do (
    more +%%n %0 > %~dpn0.py
  )
)
set s=%*
if defined s (
  echo ^%*> %~dpn0.txt
) else (
  if exist %~dpn0.txt (
    for /f "tokens=*" %%a in (%~dpn0.txt) do set s=%%a
  )
)
if not defined s set s=400 200 8 13 16
copy jwc_temp.txt myfiles > nul
python %~dpn0.py > jwc_temp.txt
goto:eof

REM #jww
REM #1%d 位置を指示して下さい
REM #99#
REM #c H B T1 T2 R =
REM #e

#!この次の行からプログラムを書いてください
# coding: shift_jis
def mov(p1, p2):
  x1, y1 = p1
  x2, y2 = p2
  return (x1 + x2, y1 + y2)

def rot(p1, d):
  x1, y1 = p1
  co = cos(d)
  si = sin(d)
  return (x1 * co - y1 * si, x1 * si + y1 * co)

def offset(w, h, pt, opt = 5):
  return (w * ( (9 - pt) % 3 - (9 - opt) % 3) / 2, h * (int( (9 - pt) / 3) - int( (9 - opt) / 3)) / 2)

def jish(hp, A, B, Tw, Tf, r, d, pt = 5):
  x0, y0 = offset(B, A, pt)
  p = [(0, 0)] * 5
  p[0] = (Tw / 2.0    , A / 2.0 - Tf - r*0)
  p[1] = (Tw / 2.0 + r, A / 2.0 - Tf - r)
  p[2] = (Tw / 2.0 + r, A / 2.0 - Tf)
  p[3] = (B / 2.0     , A / 2.0 - Tf)
  p[4] = (B / 2.0     , A / 2.0)
  u = 5
  print("pl")
  pp = [(0, 0)] * 20
  sc = "sc" + " %s" * 8
  drad = d * pi / 180
  for j in range(0, 4):
    a = 90 * ( (1 - j) % 4)
    for i in range(0, u):
      if j % 2 == 0:
        k = i
      else:
        k = u - i - 1
      x, y = p[k]
      if j % 3 > 0 : x = -x
      if j > 1 : y = -y
      pc = mov(rot( (x + x0, y + y0), drad), hp)
      if k == 1 and r > 0:
        print(sc % (pc + (r, 1, drad, a * pi / 180, pi / 2, -1)))
      pp[i + j * u] = pc
  sl = "sl" + " %s" * 8
  print(sl % (pp[0] + pp[9] + pp[10] + pp[19]))
  print(sl % (pp[3] + pp[4] + pp[5] + pp[6]))
  print(sl % (pp[13] + pp[14] + pp[15] + pp[16]))
  print("#")

import sys,re,os
from math import *

h, b, t1, t2, r = map(float, str(os.environ['s']).split())
red, g, blue = (0, 128, 128)
print("lc10 %s" % (red + 256 * g + 256 * 256 * blue))

try :
  f = open("myfiles", "r")
  for a in f:
    F = a.split()
    if re.compile("^hk").search(a): hk = float(F[1])
    if re.compile("^hp[1-9][0-9]?").search(a):
      p1 = tuple(map(float, F[1:3]))
      jish(p1, h, b, t1, t2, r, hk, pt = 5)
  f.close()
except :
  sys.exit()