mdiapp+のブラシスクリプトで点線を描く方法

mdiapp+のブラシスクリプトで点線を描く方法
mdiapp+のブラシスクリプトで点線を描く方法

 

 
読了目安:652

Are you want to translate this page to English? Please click this link to translate via ‘©Google Translate'!

ganohr.net favicon

みなさんこんにちは。

今回は‘ブラシスクリプト’(解説)点線を実現する簡単な方法を紹介します。

更新履歴
2019/10/30 mdiapp.ganohr.netからインポート
2017/10/03 追記
2017/10/02 公開
 

経緯

mdiapp開発報告所にて、以下の書き込みがあります。

Hola,buenos días…gracias por responder,comprendo que con mi idioma sea complicado explicar lo que ahora no hace mdiapp….

adjunto algoritmo muy corto y voy a intentat explicar que sucede y que no hace ahora en las nuevas versiones:

Cuando muevo el ratón o el lapiz de la tableta gráfica de forma rápida me dibuja los puntos más alejados o distantes (version12038 o anteriores) ,pero si lo hago en las versiones actuales,la distancia de los puntos es la misma y aquí se encuentra la diferencia,por eso quisiera que los scripts se comportaran como antes. Lo podría hacer con bs_ms(),pero la distancia entre puntos no es tan seguido y me arruina o no logro de esta manera que funcione como yo deseo.Gracias por intentar comprenderme.

function main( x, y, p )
veces=veces+1
if veces>200 then
bs_rect(x,y,1,1,0,0,0,255)
veces=0
end
return 1
end
veces=0

https://d.hatena.ne.jp/MDIAPP/20171001#c1506838146 より引用。

 

私は日本語と英語はある程度理解できますが、それ以外の言語については正しく理解できません。

こういったときは、‘Google翻訳’(Site)の言語自動検出をもちいた翻訳を試みることとなります。

実際に翻訳してみた結果

こんにちは、おはようございます…お返事ありがとうございます。私の言葉では、今、mdiappが何をしていないのかを説明するのは複雑です。

添付されたアルゴリズムは非常に短く、私は何が起きているのか、新しいバージョンでは何が起こっていないのかを説明しようとします。

マウスやグラフのタブレットペンをすばやく動かすと、最も遠く離れた点(バージョン12038以前)が描画されますが、現在のバージョンでは、点の距離は同じです。 その違いは、スクリプトを以前と同じように動作させるためです。 私はbs_ms()でそれを行うことができましたが、ポイント間の距離はそれほど頻繁ではなく、私を滅ぼすか、私が望むようにこの方法を達成しません。

function main( x, y, p )
veces=veces+1
if veces>200 then
bs_rect(x,y,1,1,0,0,0,255)
veces=0
end
return 1
end
veces=0

Google翻訳結果から引用

 

この翻訳結果では何を訴えているか分かりかねますが、ソースコードの方は、多分、

一定の間隔で点線を引きたい

ということでしょう。

 

そこで、一定間隔で点線を引くコードを紹介します。

ブラシスクリプトで点線を描くためのソースコード

function param1()
  return "Interval", 0, 100, 50
end

function main(x, y, p)
	if isFirst then
		before_x, before_y = x, y
		isFirst = false
		return 0
	end

	local distance = bs_distance(before_x - x, before_y - y)
	local interval = bs_param1()
	moves = moves + distance
	before_x, before_y = x, y

	if moves % (interval * 2) > interval then
		return 0
	end

	local w = bs_width()
	local r, g, b = bs_fore()
	local a = bs_opaque() * 255
	bs_ellipse(x, y, w, w, 0, r, g, b, a)

	return 1
end

before_x, before_y = 0, 0
draw = true
isFirst = true
moves = 0

実行例

ブラシスクリプトで一定間隔の点線を引くサンプルの実行結果。
ブラシスクリプトで一定間隔の点線を引くサンプルの実行結果。

追記:解答

以下の質問に回答します。

サムネイル2017-10-01mdiapp開発報告所 ... 外部サイトへアクセスmdiapp.hatenadiary.org より引用。

Hola,gracias por responder….
adjunto direccion de mi blog donde muestro con una captura que diferencias hay entre mi algoritmo vs bs_ms()…
Solo funciona en versiones anteriores mdiapp 12038…o firelapaca 1.5.22 o mangalabo…
Espero que al verlo visualmente se vea la diferencia.Se observa que dibuja el intervalo de puntos mas SEGUIDOS O CONTINUOS.
Pero ahora con la nuevas versiones no funciona el algoritmo.

サムネイルhttps://graficosevoteka.blogspot.com.es/2017/10/pincel-que-simula-bsms.html ... 外部サイトへアクセスgraficosevoteka.blogspot.com.es

GRACIAS!!!

For English

Don’t use ‘bs_ms’, because of your hand isn’t machine.

For example:
You wanna moves pen, point(0,0) to point(0,100) … arrive at bottom to 1 sec later, and main function called every apart by 100 ms, probably called 10 counts (it’s explanation is provisional).

But your hands, often moves atrandom, for 100 ms moves will only 10px, or 30px, or not moves.

So your code (bs_ms) can’t consider hands moving speed. And you know “the speed” can stand for distance per time. (Ever unrelated every version difference. Often your algorithm is mistake.)

Spanish

No utilice ‘bs_ms’, debido a que su mano no es una máquina.

Por ejemplo:
Quieres mover la pluma, el punto (0,0) al punto (0,100) … llegará al fondo a 1 segundo más tarde, y la función principal se llama cada aparte de 100 ms, probablemente se llama 10 cuentas (su explicación es provisional).

Pero tus manos, a menudo se mueve atrandom, para movimientos de 100 ms sólo 10px, o 30px, o no se mueve.

Por lo tanto, su código (bs_ms) no puede considerar la velocidad de movimiento de las manos. Y usted sabe “la velocidad” puede estar parado para la distancia por tiempo. (Siempre sin relación cada diferencia de la versión. A menudo su algoritmo es error.)

日本語

あなたの手は機械ではないので、 ‘bs_ms’は使わないでください。

例えば:
あなたはペンを動かし、座標(0,0)から座標(0,100)に移動したいとします。それは1秒後に下部へ到着し、メイン・ファンクションは100ミリ秒ごとに呼び出され、おそらく10カウントと呼ばれるでしょう(説明は仮のものです)。

しかし、あなたの手は、しばしば無作為に動くので、100msで10pxの動きがあるか、または素早く30px動くか、もしくは動かないことになります。

だからあなたのコード(bs_ms)は手の移動速度を考慮することができません。 そして、あなたは “移動速度”が時間当たりの距離によって表わせることを知っています。
(これまでのバージョンの違いとは関係ありません。アルゴリズムが間違っていることがよくあります)。

最後に

今回のコードは比較的簡単です。

このコードが、くだんの質問者の解答に合致するかは分かりませんが、参考になれば幸いです。

WordPressの不具合対応/カスタマイズ¥15,000~

PC歴25年超、SE歴10年超、WordPress運営歴7年超、WordPressエンジニア歴5年超のスキルとノウハウを提供します

当サイト管理人の「ガノー」(Ganohr)は、日本最大手且つ東証一部上場企業が運営するクラウドソーシングサイト『Lancers』にて、認定ランサーとして活動しています。


※ 認定ランサーとはLancersにより様々な能力 ( 高い仕事遂行率・高い顧客満足度・多くの実績、など ) を評価したプロフェッショナルを認定する制度です。

 

Let'sブラスク!カテゴリの最新記事