|
|
2015/7/21(Tue) 15:06:09|NO.70175
Windowsのペイントツールように綺麗な線を描きたいのですが
形が崩れてしまいます。
ペイントツールのように綺麗に書くにはどうすればいいのでしょうか?
ThickLine=5 ; 太さ
font "",30
onclick *a
stop
*a
fix=mousex : fiy=mousey
repeat
lightmusOK = 0
getkey lightmusOK,1
if lightmusOK = 1{
color 255,255,255 : boxf
repeat ThickLine
color : line fix,fiy+cnt,mousex,mousey+cnt
loop
}
await 10
loop
|
|
2015/7/21(Tue) 16:49:14|NO.70176
詳しいサンプルは後程投稿しますが、
一個前の座標を保存して、
そこから新たな座標にlineで線を引く
というのでいいと思います。
|
|
2015/7/21(Tue) 19:03:14|NO.70177
線を太くする処理に、角度情報を加えればいいのでは?
|
|
2015/7/21(Tue) 19:49:56|NO.70178
超簡単。
*main
setThickness 5 ;太さ設定[px]
LBTN = 0
onclick gosub *draw
stop
*draw
x0 = mousex : y0 = mousey ;始点
repeat
getkey LBTN, 1
if LBTN {
redraw 0
color 255,255,255 : boxf
color : thickLine x0,y0, mousex,mousey
redraw 1
} else {break}
await 16
loop
return
#module mod_thickLine
#deffunc setThickness int prm ;太さ設定
thickness = double(prm)
return
#deffunc thickLine int x0, int y0, int x1, int y1
θ = atan(y1-y0,x1-x0)
sinθ = sin(θ) : cosθ = cos(θ)
#define t thickness
xrect = x0-t*sinθ, x1-t*sinθ, x1+t*sinθ, x0+t*sinθ
yrect = y0+t*cosθ, y1+t*cosθ, y1-t*cosθ, y0-t*cosθ
gsquare -1, xrect,yrect
return
#global
gsquare を使っているので gmode の設定(半透明等)を反映させることもできます。
|
|
2015/7/21(Tue) 19:59:50|NO.70179
おっと。
チョビっとだけ計算の無駄があったのと、
「太さ」の扱いが間違っていたので修正。
*main
setThickness 5 ;太さ設定[px]
LBTN = 0
onclick gosub *draw
stop
*draw
x0 = mousex : y0 = mousey ;始点
repeat
getkey LBTN, 1
if LBTN {
redraw 0
color 255,255,255 : boxf
color : thickLine x0,y0, mousex,mousey
redraw 1
} else {break}
await 16
loop
return
#module mod_thickLine
#deffunc setThickness int prm ;太さ設定
thickness = double(prm)
return
#deffunc thickLine int x0, int y0, int x1, int y1
θ = atan(y1-y0,x1-x0)
#define t 0.5*thickness
tsinθ = t*sin(θ) : tcosθ = t*cos(θ)
xrect = x0-tsinθ, x1-tsinθ, x1+tsinθ, x0+tsinθ
yrect = y0+tcosθ, y1+tcosθ, y1-tcosθ, y0-tcosθ
gsquare -1, xrect,yrect
return
#global
|
|
2015/7/22(Wed) 00:39:01|NO.70183
motchy (旧 FunnyMaker) 様
ありがとうございます。
ちなみになんですが
その直線にアンチエイリアスを施す事は可能でしょうか?
|
|
2015/7/22(Wed) 01:46:24|NO.70184
APIに頼った方が簡単そうです。
;線の色と太さとスタイルの設定。
;color命令でリセットされる
#module
#deffunc linetype int r,int g,int b,int wid,int style;赤,緑,青,太さ(実線のみ可),スタイル(0=実線,1=破線,2=点線)
#uselib "gdi32.dll"
#func DeleteObject "DeleteObject" int
#cfunc CreatePen "CreatePen" int,int,int
mref bmscr,67
DeleteObject bmscr.37
bmscr.37=CreatePen(style,wid,r|g<<8|b<<16)
return
#global
ThickLine=5 ; 太さ
onclick *a
stop
*a
fix=mousex : fiy=mousey
repeat
getkey lightmusOK,1
if lightmusOK = 0:break
redraw 0
color 255,255,255
boxf
linetype 0,0,0,ThickLine,0
line fix,fiy,mousex,mousey
redraw 1
await 10
loop
stop
|
|
2015/7/22(Wed) 01:49:33|NO.70185
アンチエイリアスはArtlet2Dを使えば自動的にかかるようです。
#include "a2d.hsp"
ThickLine=5 ; 太さ
alCreateImage 0
onclick *a
stop
*a
fix=mousex : fiy=mousey
repeat
getkey lightmusOK,1
if lightmusOK = 0:break
alcolor 255,255,255
alFillRect
alcolor
alpenwidth ThickLine
alDrawLine fix,fiy,mousex,mousey
alCopyImageToScreen 0,0
redraw 1
await 10
loop
stop
|
|
2015/7/24(Fri) 01:43:02|NO.70213
Artlet2Dというものがあるのですね
ありがとうございます。
|
|