外部変形は データのやり取りをテキストファイルで行うので プログラム言語は 自由に選ぶことができます。図形は機能的かつシンプルなため、数多くのユーザーに受け入れられています。
mshtaで線の複線を引く
:mshtaで線の複線を引く
@echo off
if exist jwc_temp.txt (
copy jwc_temp.txt myfiles > nul
mshta %~f0 < myfiles > jwc_temp.txt
)
goto:eof
REM #jww
REM #1ln 線を指示してください。
REM #2 基準点を指示してください。
REM #bz
REM #e
<script>
function lnmove(ln, b, pmy) {
if (pmy == "" || pmy == null) pmy = 1;
d = lnslope(ln)
co = Math.cos(d) * b * pmy
si = Math.sin(d) * b * pmy
ln[0] -= si
ln[1] += co
ln[2] -= si
ln[3] += co
return ln
}
function lnfukusen(ln, hp) {
return lnmove(ln, ln_hpdist(ln, hp))
}
function lnlength(x) {
return Math.sqrt(Math.pow(x[3] - x[1], 2) + Math.pow(x[2] - x[0], 2))
}
function lnslope(x) {
return Math.atan2(x[3] - x[1], x[2] - x[0])
}
function ln_hpdist(ln, hp) {
y = hp.concat(ln.slice(0, 2))
return lnlength(y) * Math.sin( lnslope(ln) - lnslope(y) )
}
with (new ActiveXObject("Scripting.FileSystemObject")) {
f = GetStandardStream(0) //stdin
g = GetStandardStream(1) //stdout
while (! f.AtEndOfStream) {
F = ($_ = f.ReadLine()).split(/\s+/)
if (/^\s+/i .test($_)) { //ln 指示線 1
if (ln1 = F) for (i = 0; i < ln1.length; i++) ln1[i] *= 1.0;
}
if (/^hp2/i .test($_)) { //hp 指示点 2
if (p2 = F.slice(1, 3)) for (i = 0; i < p2.length; i++) p2[i] *= 1.0;
}
}
f.close()
g.WriteLine("bz")
g.WriteLine(lnfukusen(ln1, p2).join(" "))
}
close()
</script>