HSPポータル
サイトマップ お問い合わせ


HSPTV!掲示板


未解決 解決 停止 削除要請

2015
0721
ぺろ綺麗な直線の描画8解決


ぺろ

リンク

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



この記事に返信する


kanamaru

リンク

2015/7/21(Tue) 16:49:14|NO.70176

詳しいサンプルは後程投稿しますが、
一個前の座標を保存して、
そこから新たな座標にlineで線を引く
というのでいいと思います。



スペース

リンク

2015/7/21(Tue) 19:03:14|NO.70177

線を太くする処理に、角度情報を加えればいいのでは?



motchy (旧 FunnyMaker)

リンク

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 の設定(半透明等)を反映させることもできます。



motchy (旧 FunnyMaker)

リンク

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

ありがとうございます。
ちなみになんですが
その直線にアンチエイリアスを施す事は可能でしょうか?



toto

リンク

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



toto

リンク

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というものがあるのですね
ありがとうございます。



ONION software Copyright 1997-2023(c) All rights reserved.