「なでしこv1」開発掲示板

なでしこv1のバグや要望を書き込む掲示板
[一覧へ] > (@1007) [低] [未処理]
@1007■ (#3136) 【要望】「文字描画」「文字表示」命令で、斜めに文字列を表示したい - IQOSA (2025-09-15 17:00) /低 未処理
【症状】【要望】
 文字描画/文字表示命令では、水平にしか文字列を描画/表示できません
 「文字表示」斜めに描画/表示したいのですが、不可能でしょうか
【再現方法】
 任意の角度で目盛りを表示するツールを作っていますが、目盛りの角度によっては文字が重なり読みづらくなります
 目盛の傾きに応じた角度で文字表示ができれば解決しますが、それができません
 イメージ部品に文字を表示し回転することを試みましたが、イメージ部品と重なる線が隠れてしまいます

 スクリーンショットを添付します
 ご検討をお願いいたいます

【バージョン】1.591
【その他】
#イメージ部品で傾き文字表示する試作ソース

#角度付き文字描画TEST再
!変数宣言が必要。!変数初期化が必要。母艦のサイズ=「10,10,1210,990」。線太さ=1。塗りスタイル=「透明」。
XSとは実数=100。YSとは実数=400。XEとは実数=400。YEとは実数=100。
CMIndxとは整数。CHRIMGとは配列。#文字を乗せるイメージ部品(複数想定したため配列に)

LINE((XS+XE)/2,0,(XS+XE)/2,900)。LINE(0,(YS+YE)/2,900,(YS+YE)/2)。
anglとは実数=(0.00001+ARCTAN((YE-YS)/(XE-XS))*180.0/PI)。
FC文字画像描画((XS+XE)/2,(YS+YE)/2,10,angl,「中下」,SQRT((XE-XS)^2+(YE-YS)^2))。
線色=青色。LINE(XS,YS,XE,YE)。

●FC文字角度最適化(inangl)#  戻り値:(実数)360°を超えない角度
  addとは実数=(INT(ABS(inangl)/360)+1)*360。
  rsltとは実数=(inangl+add)と360の剰余。
  もし、(90<=rslt)AND(rslt<180)ならば、rslt=rslt+180。
  もし、(180<=rslt)AND(rslt<270)ならば、rslt=rslt-180。
  rsltで戻る。
●FC文字画像描画(px,py,chrh,inangl,position,wrtxt)#  px,py:基点座標  chrh:サイズ  inangl:角度  文字表示  position:文字配置基点「左中右」/「上中下」  wrtxt:文字列
  sft1xとは整数=0。sft1yとは整数=0。sft2xとは整数=0。sft2yとは整数=0。sx1とは実数。sy1とは実数。sx2とは実数。sy2とは実数。
  x1とは変数。y1とは変数。x2とは変数。y2とは変数。radnとは実数。tanangとは実数。cosangとは実数。sinangとは実数。anglとは実数=FC文字角度最適化(inangl)。
  radn=anglをラジアン変換。tanang=TAN(radn)。cosang=COS(radn)。sinang=SIN(radn)。crrntchrh=母艦の文字サイズ。母艦の文字サイズ=chrh。
  chrbとは整数=wrtxtのバイト数+5。chrwとは実数=wrtxtの文字幅取得。##chrwとは整数=chrb*chrh/2.0。
  CMIndx=CMIndx+1。CHRIMG[CMIndx]をイメージとして作成。#
  CHRIMG[CMIndx]→サイズ=「{px-chrw/2.0},{py-chrh},{px+chrw/2.0},{py+chrh}」。#  余白なし
  
  CHRIMG[CMIndx]の0.0,0.0へwrtxtを文字表示。#
  CHRIMG[CMIndx]をanglで画像回転。
  
  CHRIMG[CMIndx]→サイズを「,」で区切って「x1,y1,x2,y2」へ変数分配。#sft1x=(x2-x1)/2。sft1y=(y2-y1)/2。#中心点へのシフト
  sft1x=(x2-x1)/2。sft1y=(y2-y1)/2。#    一旦、文字中心を基点座標にシフト  sft1x/sft1yに記憶
  positionで条件分岐#            上下左右へのアジャスト  sft2x/sft2yにセット
    「左上」ならば、sft2x=(chrw*cosang+chrh*sinang)/2-chrh*sinang。sft2y=chrw*sinang/2+chrh*cosang。#  sft1x:+  sft1y:+
    「左中」ならば、sft2x=chrw*cosang/2。sft2y=chrw*sinang/2。#                      sft1x:+  sft1y:+
    「左下」ならば、sft2x=(chrw*cosang+chrh*sinang)/2。sft2y=chrw*sinang/2-chrh*cosang。#        sft1x:+  sft1y:+
    「中上」ならば、sft2x=(-1)*chrh*sinang/2。sft2y=chrh*cosang/2。#                  sft1x:-  sft1y:+
    #「中中」ならば、sft2x=0。sft2y=0。#  中心にシフト済み                      sft1x:0    sft1y:0
    「中下」ならば、sft2x=chrh*sinang/2。sft2y=(-1)*chrh*cosang/2。#                  sft1x:+  sft1y:-
    「右上」ならば、sft2x=(-1)*(chrw*cosang+chrh*sinang)/2。sft2y=(-1)*(chrw*sinang/2-chrh*cosang)。#  sft1x:-  sft1y:-
    「右中」ならば、sft2x=(-1)*chrw*cosang/2。sft2y=(-1)*chrw*sinang/2。#                sft1x:-  sft1y:-
    「右下」ならば、sft2x=(-1)*(chrw*cosang+chrh*sinang)/2-chrh*sinang。sft2y=(-1)*(chrw*sinang/2+chrh*cosang)。#  sft1x:-  sft1y:-
  CHRIMG[CMIndx]→位置=「{px-sft1x+sft2x},{py-sft1y+sft2y}」。#シフト量を加算してイメージ部品を移動



(#3136)へ返信する:

👆お手数ですが、いたずら防止のために、「真夏」の読み方を記入してください。

編集時に使うキーを入力(省略可能)

画像ファイル(最大300KB)を添付可能