jw_cad 外部変形 - (866) 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 #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)

import sys,re
from math import *

try :
  f = open("myfiles", "r")
  for a in f:
    F = a.split()
    if re.compile("^hp1ln").search(a): pt = F[1:3]
    if re.compile("^[ ]").search(a): ln1 = F
  f.close()
except :
  sys.exit()

ln1 = tuple(map(float, ln1))
pt = tuple(map(float, pt))
x1, y1, x2, y2 = ln1
#p1 = tuple([x1, y1])
#p2 = tuple([x2, y2])
#pc = tuple([(x1 + x2) / 2, (y1 + y2) / 2])
p1 = (x1, y1)
p2 = (x2, y2)
pc = ( (x1 + x2) / 2, (y1 + y2) / 2)
l1 = lnlength(pt + p1)
l2 = lnlength(pt + p2)
l3 = lnlength(pt + pc)

if l2 > l1 and l3 > l1 : pc = p1
if l1 > l2 and l3 > l2 : pc = p2
l = lnlength(ln1) / 2
d = lnslope(ln1)
co = cos(d) * l
si = sin(d) * l
xc, yc = pc

print("bz")
print("%s %s %s %s" % (xc + si, yc - co, xc - si, yc + co))