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


HSPTV!掲示板


未解決 解決 停止 削除要請

2009
0913
YSR幅のある線を引きたい!7未解決


YSR

リンク

2009/9/13(Sun) 13:53:16|NO.27667

 すみません。
 現在、計算尺の図をHSPで描いて印刷しようとしているのですが、一定の幅のある線(3ピクセルの幅とか)を引く方法が分かりません。
 普通にline命令で引くと、細くて印刷時に消えてしまったりすることもあるんですね。だからこその悩みです。
 ちなみに線は縦(y軸と平行)と横(x軸と平行)だけです(つまり、一般化した方法でなくても良しとします)。
 よろしくお願いします。



この記事に返信する


inovia

リンク

2009/9/13(Sun) 14:13:22|NO.27668

boxfを使うとか?


//3dotの幅で線を引く boxf 0,240,640,243



check

リンク

2009/9/13(Sun) 19:16:27|NO.27672

線を何重にも引いて太くすればいいんじゃね



足利超神

リンク

2009/9/13(Sun) 19:27:47|NO.27673

なんとかく命令作ってみたお

#deffunc erection int a,int b,int c,int d,int e repeat e line c,d-e/2+cnt,a,b-e/2+cnt loop return
erection p1,p2,p3,p4,p5
p1,p2
始点のxy座標
p3,p4
終点のxy座標
p5
太さ



check

リンク

2009/9/13(Sun) 19:51:19|NO.27675

関数名で吹いたww
よい子はYahoo翻訳やGoogle翻訳で翻訳しないように。
エキサイト翻訳なら認めてやろう。



GENKI

リンク

2009/9/13(Sun) 22:46:00|NO.27677

水平、垂直のみならlineを束ねるよりboxfで書いたほうがいいような気がします。と言ってもほとんど違いませんけど。(^ ^;
どちらにせよモジュールかマクロにしておくと使いやすいでしょうね。


と書いてみましたがすでに回答がでそろった後…、せっかくなので汎用的な方法も紹介しておきます。
http://hspdev-wiki.net/?Paint%2Fline#cb5780c7
Win32APIを使えばいろんな太さの直線や破線が引けるようになります。
紹介しているものはモジュール化済みなので使いやすいかと。



> エキサイト翻訳なら認めてやろう。

英辞郎はダメですか?



リンク

2009/9/14(Mon) 05:48:53|NO.27679

遊んでたら面白いものができたのでうp

//■ 操作 // 左ドラッグ:描画 // エンターキー:クリア //■ 変動数 // PUSH_TIME (=t) はマウスが押されてからのフレーム数+1を記録します #define PUSH_TIME t #define PI 3.141592 ;-----変更可能箇所------------------------------------------------------------------------ //● キャンバスの初期化色 を指定します #define BACK_COLOR_R 255 #define BACK_COLOR_G 255 #define BACK_COLOR_B 255 //● 描画色の RGB を設定します // 少数単位で変動させる場合、先頭をdouble型にしないと計算できません #define DRAW_COLOR_R 10.0 * PUSH_TIME / 4 #define DRAW_COLOR_G 8.3 * PUSH_TIME / 4 #define DRAW_COLOR_B 6.7 * PUSH_TIME / 4 ; 10.0 * PUSH_TIME / 4 ; 5.0 * PUSH_TIME / 2 ; 3.0 * PUSH_TIME //● 描画する 太さ を設定します ( w = h ) #define DRAW_SIZE sin ( 0.1*PUSH_TIME ) * 12 + 8 ; 10 ; sin ( 0.1*PUSH_TIME ) * 12 + 8 ; cos ( 0.1*PUSH_TIME ) * 14 + 14 ; sqrt ( 0.6*PUSH_TIME ) + 1 ; sin ( PI / 2 * PUSH_TIME ) * 10 + 8 ; sin ( PI * PUSH_TIME + PI/2 ) * 1 + 1 ; <-点線 //● 描画する太さに カーソル速度依存(遅=太) を付加するかどうか設定します // 4より小さい 場合 DRAW_SIZE をそのまま適用し、 // 4以上 の場合は その数値を最大値とした値 を DRAW_SIZE に付加します // この設定だけ楽しみたい場合は DRAW_SIZEを 0 にしてください // 付加する値(速〜遅) = 1 〜 DRAW_SPEED #define DRAW_SPEED 0 ; 13 //● DRAW_SIZE が 負の数になる場合 の処理を設定します // 0 の場合描画せず、それ以外の場合は絶対値を用います #define DRAW_SIZE_OVER 1 //● DRAW_SIZE 及び マウスカーソル座標 を タイトルバーに表示させるかどうか を設定します // 0 の場合表示させず、それ以外の場合は表示します #define DRAW_SIZE_TITLE 1 ;----------------------------------------------------------------------------------------- #module #deffunc erection2 int a,int b,int c,int d,int e,int z,int y,int v w = int(sqrt( abs(a-c) + abs(b-d) )*2) x = e if z ! 0 & x <= 0 : x = abs(x) if z = 0 & x <= 0 : return -1 if y ! 0 : title "Draw "+x+" ("+a+","+b+") sp:"+w if v >= 4 { x2 = w : if x2 > v : x2 = v x2 = v-x2 : if x2 < 1 : x2 = 1 x += x2 } repeat x*x f = cnt / x : g = cnt \ x line c-x/2+f, d-x/2+g, a-x/2+f, b-x/2+g loop return #global title "Draw" : color BACK_COLOR_R,BACK_COLOR_G,BACK_COLOR_B : boxf dim mx,2 : dim my,2 repeat : redraw 0 getkey m ; 左クリック判定 if m=0 : t=0 if m { if t=0 : mx.0=mousex : my.0=mousey : t=1 if t { mx.1=mousex : my.1=mousey if mx.0 ! mx.1 | my.0 ! my.1 { color DRAW_COLOR_R, DRAW_COLOR_G, DRAW_COLOR_B erection2 mx.1, my.1, mx.0, my.0, DRAW_SIZE, DRAW_SIZE_OVER, DRAW_SIZE_TITLE, DRAW_SPEED mx.0 = mx.1 : my.0 = my.1 t++ } } } getkey ent,13 ; Enter判定 if ent : color BACK_COLOR_R,BACK_COLOR_G,BACK_COLOR_B : boxf redraw : await : loop



undefined

リンク

2009/12/16(Wed) 19:06:18|NO.29294

もう結構前のスレですが…これはどうでしょうか?

#module #include "gdi32.as" #const global PS_SOLID 0 //実線 #const global PS_DASH 1 //破線 #const global PS_DOT 2 //点線 #const global PS_DASHDOT 3 //一点鎖線 #const global PS_DASHDOTDOT 4 //二点鎖線 #deffunc line2 int linetype,int lnwidth,int endx,int endy createPen linetype,lnwidth,ginfo(16)|ginfo(17)<<8|ginfo(18)<<16 pen=stat selectObject hdc,pen moveToEx hdc,ginfo(22),ginfo(23),0 lineTo hdc,endx,endy deleteObject pen return #global

カレントポジションと指定した座標との間に線を引きます。
色はカレントカラーが使われます。
linetype:線の種類です。上の定数から選んでください。PS_SOLID以外にした場合は
lnwidthを0か1にしないとただの実線になってしまいます。

lnwidth :線の太さ。ピクセル単位です。
endx,endy:線の終端の座標です。

ウィンドウに行った場合、redrawで画面更新をしないと反映されませんので注意してください。



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