jw_cad 外部変形 - (858) pythonで線の複線を引く -

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

 

pythonで線の複線を引く

:pythonで線の複線を引く
@echo off
if not exist %~dpn0.py (
  for /f "delims=:" %%n in ('findstr /n "^#!" %0') do (
    more +%%n %0 > %~dpn0.py
  )
)
copy jwc_temp.txt myfiles > nul
python %~dpn0.py > jwc_temp.txt
goto:eof

REM #jww
REM #1ln 線を指示してください
REM #2 基準点を指示してください
REM #bz
REM #e

#!この次の行からプログラムを書いてください
# coding: shift_jis
def lnlength(ln): #線長を返す
  x1, y1, x2, y2 = ln
  return hypot(x2 - x1, y2 - y1)

def lnslope(ln): #線の角度を返す
  x1, y1, x2, y2 = ln
  return atan2(y2 - y1, x2 - x1)

def ln_hpdist(ln, hp): #線と点の最短距離を返す
  x = hp + ln[0:2]
  return lnlength(x) * sin( lnslope(ln) - lnslope(x) )

def lnmove(ln, b, pmy=1.0): #線 ln を直交距離 b だけ pmy の方向に平行移動する
  x1, y1, x2, y2 = ln
  d  = lnslope([x1, y1, x2, y2])
  co = b * cos(d) * pmy
  si = b * sin(d) * pmy
  return (x1 - si, y1 + co, x2 - si, y2 + co)

import sys,re
from math import *

try :
  f = open("myfiles", "r")
  for line in f:
    F = line.split()
    if re.compile("^hq").search(line): print("bz")
    if re.compile("^hp2").search(line):
      hp2 = tuple(map(float, F[1:3]))
    if re.compile("^[ ]+").search(line):
      ln1 = tuple(map(float, F))
  f.close()
except :
  sys.exit()

print("%s %s %s %s" % lnmove(ln1, ln_hpdist(ln1, hp2)))