jw_cad 外部変形 - (864) 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 ptdist(pt1, pt2):
  x1, y1 = pt1
  x2, y2 = pt2
  return hypot(x2 - x1, y2 - y1)

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

def polarto(pt, r, d):
  return [pt[0] + r * cos(d), pt[1] + r * sin(d)]

def arrow(pt1, d, size = 3, xang = 60, xan2 = 90):
  l = size
  a = xang * pi / 180 / 2.0
  pt2 = polarto(pt1, l, d - a)
  pt4 = polarto(pt1, l, d + a)
  if xan2 == 180:
      print("sl %s %s %s %s %s %s" % tuple(pt1 + pt2 + pt4))
  else:
      c = cos(a) - sin(a) * tan( (90.0 - xan2 / 2.0) * pi / 180)
      pt3 = polarto(pt1, l * c, d)
      print("sl %s %s %s %s %s %s %s %s" % tuple(pt1 + pt2 + pt3 + pt4))


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))

size = 5 #矢印の長さ( 図寸 )
xang = 45 #矢印の交角( ゚ )
xan2 = 120 #矢尻の交角( ゚ )
d = lnslope(ln1)
l1 = ptdist(pt, ln1[0:2])
l2 = ptdist(pt, ln1[2:4])
if l1 <= l2 :
  pm = -1
  pz = ln1[0:2]
else :
  pm = 1
  pz = ln1[2:4]

print("bz")
arrow(pz, d, -size * pm, xang, xan2)