※この翻訳ドキュメントはスクリプトによって出力・同期されています。内容が怪しそうな場合はGitHubにissueを追加したり英語の原文の確認をお願いします。

GraphicsBase クラスの get_scale_from_point と set_scale_from_point のインターフェイス

このページではGraphicsBaseクラス(Rectangleなどのグラフィッククラスの基底クラス)のget_scale_x_from_pointget_scale_y_from_pointset_scale_x_from_pointset_scale_y_from_pointメソッドの各インターフェイスについて説明します。

各インターフェイスの概要

set_scale_x_from_pointメソッドは指定された座標を基準にオブジェクトの水平方向の拡縮を変更します。同様にset_scale_y_from_pointメソッドは指定された座標を基準にオブジェクトの垂直方向の拡縮を変更します。

scale_x_from_centerscale_y_from_centerのインターフェイスは属性になっていますが、set_scale_x_from_pointset_scale_y_from_pointのインターフェイスは座標の指定が必要なためメソッドのインターフェイスになっています。

同様にget_scale_x_from_pointget_scale_y_from_pointのメソッドは指定された座標における拡縮値を返却します。これらのインターフェイスも引数に座標の指定が必要になります。

返却値は各座標ごとに設定されます。例えば水平方向の拡縮を50pxのX座標の位置で設定した場合、100pxのX座標の位置における拡縮値には影響しません。

基本的な使い方

get_scale_x_from_pointメソッドはInt型のx引数の指定を必要とし、set_scale_x_from_pointメソッドはNumber型のscale_xxの各引く数の指定が必要になります。

以下のコード例では3つの四角を生成し水平方向の拡縮を増減させています。上の四角は左端を基準に拡縮を、真ん中の四角は中央を基準に拡縮を、そして下の四角では右右端を基準に拡縮を行っています。

from typing_extensions import TypedDict

import apysc as ap


class _Options(TypedDict):
    rectangle: ap.Rectangle
    x: ap.Int
    direction: ap.Int


def on_timer(e: ap.TimerEvent, options: _Options) -> None:
    """
    The handler that the timer calls.

    Parameters
    ----------
    e : ap.TimerEvent
        Event instance.
    options : dict
        Optional arguments dictionary.
    """
    rectangle: ap.Rectangle = options["rectangle"]
    x: ap.Int = options["x"]
    direction: ap.Int = options["direction"]
    current_scale_x: ap.Number = rectangle.get_scale_x_from_point(x=x)
    current_scale_x += direction * 0.03
    rectangle.set_scale_x_from_point(scale_x=current_scale_x, x=x)
    with ap.If(current_scale_x >= 2.0):
        direction *= -1
    with ap.If(current_scale_x <= 0.0):
        direction *= -1


ap.Stage(
    stage_width=150,
    stage_height=350,
    background_color=ap.Color("#333"),
    stage_elem_id="stage",
)
sprite: ap.Sprite = ap.Sprite()
sprite.graphics.begin_fill(color=ap.Color("#0af"))

top_rect: ap.Rectangle = sprite.graphics.draw_rect(x=50, y=50, width=50, height=50)
middle_rect: ap.Rectangle = sprite.graphics.draw_rect(x=50, y=150, width=50, height=50)
bottom_rect: ap.Rectangle = sprite.graphics.draw_rect(x=50, y=250, width=50, height=50)

top_rect_direction: ap.Int = ap.Int(1)
options: _Options = {
    "rectangle": top_rect,
    "x": ap.Int(50),
    "direction": top_rect_direction,
}
top_rect_timer: ap.Timer = ap.Timer(on_timer, delay=ap.FPS.FPS_60, options=options)
top_rect_timer.start()

middle_rect_direction: ap.Int = ap.Int(1)
options = {
    "rectangle": middle_rect,
    "x": ap.Int(75),
    "direction": middle_rect_direction,
}
middle_rect_timer: ap.Timer = ap.Timer(on_timer, delay=ap.FPS.FPS_60, options=options)
middle_rect_timer.start()

bottom_rect_direction: ap.Int = ap.Int(1)
options = {
    "rectangle": bottom_rect,
    "x": ap.Int(100),
    "direction": bottom_rect_direction,
}
bottom_rect_timer: ap.Timer = ap.Timer(on_timer, delay=ap.FPS.FPS_60, options=options)
bottom_rect_timer.start()

ap.save_overall_html(dest_dir_path="graphics_base_scale_from_point_basic_usage_x/")

似たような形でget_scale_y_from_pointset_scale_y_from_pointのメソッドはscale_yyの引数を必要とします。これらは拡縮の方向が垂直方向になっている以外は水平方向のインターフェイスと同じように動作します。

from typing_extensions import TypedDict

import apysc as ap


class _Options(TypedDict):
    rectangle: ap.Rectangle
    y: ap.Int
    direction: ap.Int


def on_timer(e: ap.TimerEvent, options: _Options) -> None:
    """
    The handler that the timer calls.

    Parameters
    ----------
    e : ap.TimerEvent
        Event instance.
    options : dict
        Optional arguments dictionary.
    """
    rectangle: ap.Rectangle = options["rectangle"]
    y: ap.Int = options["y"]
    direction: ap.Int = options["direction"]
    current_scale_y: ap.Number = rectangle.get_scale_y_from_point(y=y)
    current_scale_y += direction * 0.03
    rectangle.set_scale_y_from_point(scale_y=current_scale_y, y=y)
    with ap.If(current_scale_y >= 2.0):
        direction *= -1
    with ap.If(current_scale_y <= 0.0):
        direction *= -1


ap.Stage(
    stage_width=150,
    stage_height=150,
    background_color=ap.Color("#333"),
    stage_elem_id="stage",
)
sprite: ap.Sprite = ap.Sprite()
sprite.graphics.begin_fill(color=ap.Color("#0af"))

rectangle: ap.Rectangle = sprite.graphics.draw_rect(x=50, y=50, width=50, height=50)
direction: ap.Int = ap.Int(1)
options: _Options = {"rectangle": rectangle, "y": ap.Int(50), "direction": direction}
timer: ap.Timer = ap.Timer(on_timer, delay=ap.FPS.FPS_60, options=options)
timer.start()

ap.save_overall_html(dest_dir_path="graphics_base_scale_from_point_basic_usage_y/")

get_scale_x_from_point API

特記事項: このAPIドキュメントはドキュメントビルド用のスクリプトによって自動で生成・同期されています。そのためもしかしたらこの節の内容は前節までの内容と重複している場合があります。

[インターフェイスの構造] get_scale_x_from_point(self, *, x: apysc._type.number.Number) -> apysc._type.number.Number


[インターフェイス概要]

指定されたX座標を基準として水平方向の拡縮の値を取得します。


[引数]

  • x: Number

    • X座標。


[返却値]

  • scale_x: Number

    • 指定されたX座標を基準とした水平方向の拡縮値。


[特記事項]

拡縮の最小値はほぼ0となり、その値は負の値にはなりません。


[コードサンプル]

>>> import apysc as ap
>>> stage: ap.Stage = ap.Stage()
>>> sprite: ap.Sprite = ap.Sprite()
>>> sprite.graphics.begin_fill(color=ap.Color("#0af"))
>>> rectangle: ap.Rectangle = sprite.graphics.draw_rect(
...     x=50, y=50, width=50, height=50
... )
>>> x: ap.Number = ap.Number(100)
>>> rectangle.set_scale_x_from_point(scale_x=ap.Number(1.5), x=x)
>>> rectangle.get_scale_x_from_point(x=x)
Number(1.5)

set_scale_x_from_point API

特記事項: このAPIドキュメントはドキュメントビルド用のスクリプトによって自動で生成・同期されています。そのためもしかしたらこの節の内容は前節までの内容と重複している場合があります。

[インターフェイスの構造] set_scale_x_from_point(self, *, scale_x: apysc._type.number.Number, x: apysc._type.number.Number) -> None


[インターフェイス概要]

指定されたX座病を基準とした水平方向の拡縮値を更新します。


[引数]

  • scale_x: Number

    • 設定する水平方向の拡縮値。

  • x: Number

    • X座標。


[特記事項]

拡縮の最小値はほぼ0となり、その値は負の値にはなりません。


[コードサンプル]

>>> import apysc as ap
>>> stage: ap.Stage = ap.Stage()
>>> sprite: ap.Sprite = ap.Sprite()
>>> sprite.graphics.begin_fill(color=ap.Color("#0af"))
>>> rectangle: ap.Rectangle = sprite.graphics.draw_rect(
...     x=50, y=50, width=50, height=50
... )
>>> x: ap.Number = ap.Number(100)
>>> rectangle.set_scale_x_from_point(scale_x=ap.Number(1.5), x=x)
>>> rectangle.get_scale_x_from_point(x=x)
Number(1.5)

get_scale_y_from_point API

特記事項: このAPIドキュメントはドキュメントビルド用のスクリプトによって自動で生成・同期されています。そのためもしかしたらこの節の内容は前節までの内容と重複している場合があります。

[インターフェイスの構造] get_scale_y_from_point(self, *, y: apysc._type.number.Number) -> apysc._type.number.Number


[インターフェイス概要]

指定されたY座標を基準とした垂直方向の拡縮の値を取得します。


[引数]

  • y: Number

    • Y座標。


[返却値]

  • scale_y: ap.Number

    • 指定されたY座標を基準とした垂直方向の拡縮値。


[コードサンプル]

>>> import apysc as ap
>>> stage: ap.Stage = ap.Stage()
>>> sprite: ap.Sprite = ap.Sprite()
>>> sprite.graphics.begin_fill(color=ap.Color("#0af"))
>>> rectangle: ap.Rectangle = sprite.graphics.draw_rect(
...     x=50, y=50, width=50, height=50
... )
>>> y: ap.Number = ap.Number(100)
>>> rectangle.set_scale_y_from_point(scale_y=ap.Number(1.5), y=y)
>>> rectangle.get_scale_y_from_point(y=y)
Number(1.5)

set_scale_y_from_point API

特記事項: このAPIドキュメントはドキュメントビルド用のスクリプトによって自動で生成・同期されています。そのためもしかしたらこの節の内容は前節までの内容と重複している場合があります。

[インターフェイスの構造] set_scale_y_from_point(self, *, scale_y: apysc._type.number.Number, y: apysc._type.number.Number) -> None


[インターフェイス概要]

指定されたY座標を基準とした垂直方向の拡縮値を更新します。


[引数]

  • scale_y: Number

    • 設定すの垂直方向の拡縮値。

  • y: Number

    • Y座標。


[コードサンプル]

>>> import apysc as ap
>>> stage: ap.Stage = ap.Stage()
>>> sprite: ap.Sprite = ap.Sprite()
>>> sprite.graphics.begin_fill(color=ap.Color("#0af"))
>>> rectangle: ap.Rectangle = sprite.graphics.draw_rect(
...     x=50, y=50, width=50, height=50
... )
>>> y: ap.Number = ap.Number(100)
>>> rectangle.set_scale_y_from_point(scale_y=ap.Number(1.5), y=y)
>>> rectangle.get_scale_y_from_point(y=y)
Number(1.5)