テキストづくりで方眼紙の画像が必要になったので、訓練兼ねてプログラミングで作ってみた。

def setup():
size(600,600)
background(255)
borderColor = color(200)
borderColorBold = color(0)
fontSize = 10
# fontName = u"M PLUS 1 Code Regular"
fontName = u"HiraMaruPro-W4"
lineHeight = fontSize + 2
maxX = 500
maxY = 500
stepX = 10
stepY = 10
labelStepX = 50
labelStepY = 50
labelOffset = -5
margin = 50
# フォントの設定
font = createFont(fontName, fontSize, False)
textFont(font)
# 余白分ずらす
translate(margin, margin)
# 罫線
stroke(borderColor)
for x in range(0, maxX+1, stepX):
line(x, 0, x, maxY)
for y in range(0, maxY+1, stepY):
line(0, y, maxX, y)
# 罫線(太)
stroke(borderColorBold)
for x in range(0, maxX+1, labelStepX):
line(x, 0, x, maxY)
for y in range(0, maxY+1, labelStepY):
line(0, y, maxX, y)
# 目盛りラベル
fill(0)
textAlign(RIGHT) # 原点
text(0, labelOffset, labelOffset)
textAlign(CENTER) # 縦
for x in range(labelStepX, maxX+1, labelStepX):
text(x, x, labelOffset)
textAlign(RIGHT) # 横
for y in range(labelStepX, maxY+1, labelStepY):
text(y, labelOffset, y + fontSize / 2)
# 軸ラベル
textSize(fontSize*1.5)
fill(150)
textAlign(LEFT) # 軸ラベルX
text(u"X", maxX + 20, 0 + fontSize / 2)
textAlign(CENTER) # 軸ラベルY
text(u"Y", 0, maxY + 20 + fontSize / 2)改良版
点線を導入した
def line2(x1, y1, x2, y2):
lineLength = dist(x1, y1, x2, y2)
step = 10 # 一つの点線セットの長さ
ratio = 0.5 # 実線と透明の比率
repeat = int(lineLength / step)
w = (x2 - x1) / repeat
h = (y2 - y1) / repeat
for i in range(repeat):
px1 = x1 + (i * w)
py1 = y1 + (i * h)
px2 = px1 + (w * ratio)
py2 = py1 + (h * ratio)
line(px1, py1, px2, py2)
def setup():
size(1200,1200)
background(255)
zoom = 2
borderColor = color(200)
borderColorMedeum = color(100)
borderColorBold = color(0)
strokeWeight(1*zoom)
fontSize = 10 * zoom
# fontName = u"M PLUS 1 Code Regular"
fontName = u"HiraMaruPro-W4"
lineHeight = fontSize + 2 * zoom
maxX = 500 * zoom
maxY = 500 * zoom
stepX = 10 * zoom
stepY = 10 * zoom
labelStepX = 50 * zoom
labelStepY = 50 * zoom
labelOffset = -5 * zoom
margin = 50 * zoom
# フォントの設定
font = createFont(fontName, fontSize, False)
textFont(font)
# 余白分ずらす
translate(margin, margin)
# 罫線
stroke(borderColor)
for x in range(0, maxX+1, stepX):
line(x, 0, x, maxY)
for y in range(0, maxY+1, stepY):
line(0, y, maxX, y)
# 罫線(太)を上書き
for x in range(0, maxX+1, labelStepX):
if x % (labelStepX*2) == 0:
stroke(borderColorBold)
line(x, 0, x, maxY)
else:
stroke(borderColorMedeum)
line2(x, 0, x, maxY)
for y in range(0, maxY+1, labelStepY):
if y % (labelStepY*2) == 0:
stroke(borderColorBold)
line(0, y, maxX, y)
else:
stroke(borderColorMedeum)
line2(0, y, maxX, y)
# 目盛りラベル
fill(0)
textAlign(RIGHT) # 原点
text(0, labelOffset, labelOffset)
textAlign(CENTER) # 縦
for x in range(labelStepX, maxX+1, labelStepX):
text(x / zoom, x, labelOffset)
textAlign(RIGHT) # 横
for y in range(labelStepX, maxY+1, labelStepY):
text(y / zoom, labelOffset, y + fontSize / 2)
# 軸ラベル
textSize(fontSize*1.5)
fill(150)
textAlign(LEFT) # 軸ラベルX
text(u"X", maxX + 20, 0 + fontSize / 2)
textAlign(CENTER) # 軸ラベルY
text(u"Y", 0, maxY + 20 + fontSize / 2)
save("hougan.png")改良版2(スクラッチ座標)
点線を導入した
def line2(x1, y1, x2, y2):
lineLength = dist(x1, y1, x2, y2)
step = 10 # 一つの点線セットの長さ
ratio = 0.5 # 実線と透明の比率
repeat = int(lineLength / step)
w = (x2 - x1) / repeat
h = (y2 - y1) / repeat
for i in range(repeat):
px1 = x1 + (i * w)
py1 = y1 + (i * h)
px2 = px1 + (w * ratio)
py2 = py1 + (h * ratio)
line(px1, py1, px2, py2)
def setup():
size(1200,1200)
background(255)
zoom = 2
borderColor = color(200)
borderColorMedeum = color(100)
borderColorBold = color(0)
strokeWeight(1*zoom)
fontSize = 10 * zoom
# fontName = u"M PLUS 1 Code Regular"
fontName = u"HiraMaruPro-W4"
lineHeight = fontSize + 2 * zoom
maxX = 240 * zoom
maxY = 180 * zoom
stepX = 10 * zoom
stepY = 10 * zoom
labelStepX = 50 * zoom
labelStepY = 50 * zoom
labelOffset = -5 * zoom
margin = 50 * zoom
# フォントの設定
font = createFont(fontName, fontSize, False)
textFont(font)
# 余白分ずらす
translate(margin + maxX, margin + maxY)
# 罫線
stroke(borderColor)
for x in range(0, maxX+1, stepX):
line(x, -maxY, x, maxY)
line(-x, -maxY, -x, maxY)
for y in range(0, maxY+1, stepY):
line(-maxX, y, maxX, y)
line(-maxX, -y, maxX, -y)
# 罫線(太)を上書き
for x in range(0, maxX+1, labelStepX):
if x % (labelStepX*2) == 0:
stroke(borderColorBold)
line(x, -maxY, x, maxY)
line(-x, -maxY, -x, maxY)
else:
stroke(borderColorMedeum)
line2(x, -maxY, x, maxY)
line2(-x, -maxY, -x, maxY)
for y in range(0, maxY+1, labelStepY):
if y % (labelStepY*2) == 0:
stroke(borderColorBold)
line(-maxX, y, maxX, y)
line(-maxX, -y, maxX, -y)
else:
stroke(borderColorMedeum)
line2(-maxX, y, maxX, y)
line2(-maxX, -y, maxX, -y)
# 目盛りラベル
fill(0)
textAlign(RIGHT) # 原点
text(0, labelOffset, labelOffset)
textAlign(CENTER) # 縦
for x in range(0, maxX+1, labelStepX):
text(x / zoom, x, labelOffset - maxY)
if x != 0:
text(-x / zoom, -x, labelOffset - maxY)
textAlign(RIGHT) # 横
for y in range(0, maxY+1, labelStepY):
text(y / zoom, labelOffset - maxX, y + fontSize / 2)
if y != 0:
text(-y / zoom, labelOffset - maxX, -y + fontSize / 2)
# 軸ラベル
textSize(fontSize*1.5)
fill(150)
textAlign(LEFT) # 軸ラベルX
text(u"X", maxX + 20, 0 + fontSize / 2)
textAlign(CENTER) # 軸ラベルY
text(u"Y", 0, maxY + 20 + fontSize / 2)
save("hougan.png")改良版3(茅野市テキスト用)
もともとのデザインに寄せるようにした。雑な作りですまん。

def line2(x1, y1, x2, y2):
lineLength = dist(x1, y1, x2, y2)
step = 10 # 一つの点線セットの長さ
ratio = 0.5 # 実線と透明の比率
repeat = int(lineLength / step)
w = (x2 - x1) / repeat
h = (y2 - y1) / repeat
for i in range(repeat):
px1 = x1 + (i * w)
py1 = y1 + (i * h)
px2 = px1 + (w * ratio)
py2 = py1 + (h * ratio)
line(px1, py1, px2, py2)
def text2(t, x, y, align, fontSize):
rectMargin = 5
tw = textWidth(str(t))
fill(255,255,255,200)
noStroke()
if align == CENTER:
rect(x - tw/2 - rectMargin, y - fontSize/2 - rectMargin, tw + rectMargin*2, fontSize + rectMargin*2)
elif align == RIGHT:
rect(x - tw, y - fontSize/2, tw + 5, fontSize + 5)
fill(0)
textAlign(align)
text(t, x, y + rectMargin+4)
def setup():
size(1200,960)
background(255)
zoom = 2
borderColor = color(200)
borderColorMedeum = color(100)
borderColorBold = color(0)
strokeWeight(1*zoom)
fontSize = 10 * zoom
# fontName = u"M PLUS 1 Code Regular"
fontName = u"HiraKakuPro-W4"
lineHeight = fontSize + 2 * zoom
maxX = 240 * zoom
maxY = 180 * zoom
stepX = 10 * zoom
stepY = 10 * zoom
labelStepX = 50 * zoom
labelStepY = 50 * zoom
labelOffset = -5 * zoom
margin = 50 * zoom
# フォントの設定
font = createFont(fontName, fontSize, False)
textFont(font)
# 余白分ずらす
translate(margin + maxX, margin + maxY)
# 罫線
stroke(borderColor)
for x in range(0, maxX+1, stepX):
line(x, -maxY, x, maxY)
line(-x, -maxY, -x, maxY)
for y in range(0, maxY+1, stepY):
line(-maxX, y, maxX, y)
line(-maxX, -y, maxX, -y)
# 罫線(太)を上書き
for x in range(0, maxX+1, labelStepX):
if x % (labelStepX*2) == 0:
stroke(borderColorBold)
line(x, -maxY, x, maxY)
line(-x, -maxY, -x, maxY)
else:
stroke(borderColorMedeum)
line2(x, -maxY, x, maxY)
line2(-x, -maxY, -x, maxY)
for y in range(0, maxY+1, labelStepY):
if y % (labelStepY*2) == 0:
stroke(borderColorBold)
line(-maxX, y, maxX, y)
line(-maxX, -y, maxX, -y)
else:
stroke(borderColorMedeum)
line2(-maxX, y, maxX, y)
line2(-maxX, -y, maxX, -y)
# 外枠
stroke(0)
noFill()
rect(-maxX, -maxY, maxX*2, maxY*2)
line(-maxX, 0, -maxX-50, 0)
line(maxX, 0, maxX+50, 0)
line(0, -maxY, 0, -maxY-50)
line(0, maxY, 0, maxY+50)
# 目盛りラベル
text2("(0,0)", 0, fontSize, CENTER, fontSize) # 原点
fill(0)
textAlign(CENTER) # X
for x in range(labelStepX, maxX+1, labelStepX):
text2(x / zoom, x, fontSize, CENTER, fontSize)
if x != 0:
text2(-x / zoom, -x, fontSize, CENTER, fontSize)
textAlign(RIGHT) # Y
for y in range(labelStepY, maxY+1, labelStepY):
text2(-y / zoom, labelOffset, y, RIGHT, fontSize)
if y != 0:
text2(y / zoom, labelOffset, -y, RIGHT, fontSize)
text2(-240, -maxX, fontSize, CENTER, fontSize)
text2(240, maxX, fontSize, CENTER, fontSize)
text2(180, labelOffset, -maxY, RIGHT, fontSize)
text2(-180, labelOffset, maxY, RIGHT, fontSize)
# 軸ラベル
textAlign(LEFT) # 軸ラベル+X
text("X", maxX + 30, 0 + fontSize + 10)
# textAlign(RIGHT) # 軸ラベル-X
# text(u"({},{})".format(-maxX/2, 0), -maxX - 10, 0 + fontSize / 2 -3)
textAlign(CENTER) # 軸ラベル+Y
text("Y", -20, -maxY - 20 - fontSize / 2)
# textAlign(CENTER) # 軸ラベル-Y
# text(u"({},{})".format(0, -maxY/2), 0, maxY + 20 + fontSize / 2)
# 保存
save("hougan.png")