Please note that the recommended version of Scilab is 2026.0.0. This page might be outdated.
See the recommended documentation of this function
surface_properties
3次元エンティティプロパティの説明
説明
Surfaceエンティティはグラフィックエンティティ階層の葉です.
この型のエンティティの元には,
プロットを行う関数またはデータの入力手段により
2つのクラス:Plot3d および
Fac3d が現れます.
Fac3d および Plo3d エンティティは
似ていますが,Fac3dはより完全で,
Plot3dよりも多くのオプションを指定できます.
Fac3dエンティティを常に有するようにするには,
plot3dを使用する前に
genfac3dにより行列を事前に構築するか,
surfコマンドを使用します.
以下にsurfaceエンティティに含まれるプロパティを示します:
- parent:
このフィールドには親のハンドルが含まれます. polylineエンティティの親は
"Axes"型または"Compound"型です.- children:
このプロパティにはこのハンドルの
childrenのベクトルが含まれます. しかし,現在,surfaceハンドルにはchildrenがありません.- visible:
このフィールドはこのエンティティの
visibleプロパティの値を有します. 値は"on"または"off"となります. デフォルトで polyline は可視であり,プロパティの値は"on"となります."off"の場合, この3次元グラフィックは画面に描画されません.- surface_mode:
このフィールドは
surface_modeプロパティのデフォルト値を有します. その値は"on"(曲面を描画 ) または"off"(曲面を描画しない)とします.- foreground:
color_mode >= 0の場合, このフィールドは縁を描画する際に色インデックスを有します. そうでない場合,foregroundは全く使用されません. foregounrdの値には(カレントのカラーマップに基づく)整数の色インデックスを指定します.- thickness:
このプロパティは正の実数で,小平面の輪郭の幅をピクセル単位で指定します. 実際の表示幅は指定した幅を最も近い整数に丸めることにより定義されます. 唯一の例外はベクトル単位のエキスポートで,全体の
thicknessの値が考慮されます.- mark_mode:
このフィールドはsurfaceの
mark_modeプロパティのデフォルト値を有します. この値は"on"(マーカを描画 drawn) または"off"(マーカを描画しない)となります.- mark_style:
mark_styleプロパティの値はmark_modeプロパティが"on"の場合に, 使用するマーカの種類を選択するために使用されます. この値は[0 14]の範囲の整数で,それぞれ以下の意味があります : ドット,プラス,十字,星,塗りつぶした菱形, 上向き三角形, 下向き三角形, 菱形プラス,円,アスタリスク, 正方形,右向き三角形,左向き三角形およびペンタグラム. 以下の図は,マーカのアスペクトがmark_style,mark_foregroundおよびmark_backgroundプロパティに依存する ことを示します.
- mark_size_unit:
このフィールは
mark_size_unitプロパティのデフォルト値 を有します.mark_size_unitが"point"に設定された場合,mark_sizeの値はポイント単位で直接 指定されます.mark_size_unitに"tabulated"が 指定された場合,mark_sizeはfont size配列に相対的に 計算されます: この場合,この値は, 8pt, 10pt, 12pt, 14pt, 18pt および 24pt を意味する [0 5]の範囲の整数とします. xrectおよび Scilabのネーティブ関数はtabulatedモードをデフォルトとします; plot関数を使用する場合,pointモードが自動的に有効となります.- mark_size:
mark_sizeプロパティは,mark_modeプロパティが"on"の時, マーカの大きさを選択するために使用されます. この値は, 8pt, 10pt, 12pt, 14pt, 18pt および 24pt を意味する [0 5]の範囲の整数です.- mark_foreground:
このフィールドは,マーカの縁の色である
mark_foregroundプロパティの値を有します.この値は(カレントのcolor_mapに関連する)色インデックス または透過エッジを意味する 0 とします.- mark_background:
このフィールドは,マーカの縁の色である
mark_foregroundプロパティの値を有します.この値は(カレントのcolor_mapに関連する)色インデックス または透過エッジを意味する 0 とします.- data:
このフィールドは,"3次元"型の
tlistデータ構造体 を定義します. この構造体は, x, yおよびz座標をそれぞれdata.x,data.yおよびdata.zに含む各要素の行および列インデックスから構成されます. 実際のcolorベクトルまたは行列が指定された場合,data.colorという名前の相補フィールドが利用可能です. 指定されない場合,data.colorは利用できません. 曲面はcolor_modeおよびcolor_flagプロパティに基づき塗りつぶされます.- color_mode:
[-size(colormap) ; size(colormap)]の範囲の整数で,color_flagの値が0の時, 小平面の色を定義します. 前記のように,color_mode > 0の時,foreground色により,縁が描画されます.color_modeが0に設定された場合, 曲面のメッシュが描画されます: 表面には色がありません. 最後に,color_mode < 0の時, 表面は色-color_modeで塗られますが, 縁は表示されません.- color_flag:
このフィールドは小平面の色を設定するために使用される アルゴリズムを指定する際に使用されます.
color_mode,foregroundおよびhiddencolorに 関する規則はこの場合にも適用されます.color_flag == 0全ての小平面はcolorインデックスおよび
color_modeで定義された手法により 塗りつぶされます(上記参照).
color_flag == 1全ての小平面は
zに比例する小平面毎に1つのインデックスを 用いて塗りつぶされます.zの最小値はインデックス1の色で塗られ,zの最大値は最も大きなインデックスの色で塗られます. 加えて,小平面の縁もcolor_modeの値に基づき 塗られます(上記参照).
残る3つのケース(
color_flag== 2,3 または 4)は,Fac3dエンティティを指定した場合のみ 利用可能です. 次に,data.colorの値は(存在する場合,)小平面の色を (カレントのカラーマップのインデックスで) 設定するために使用されます そうでない場合, 小平面を塗りつぶす際に カレントのcolor_modeが使用されます.color_flag == 2 ('フラット' シェーディング)全ての小平面は
data.colorプロパティで 指定した色インデックスにより塗りつぶされます (小平面毎に1つの色が必要):data.colorはcolorベクトルを 有します:color(i)が正の場合, 小平面iの色を指定します. 小平面の境界はカレントの線種と色で描画されます.color(i)が負の場合,色id-color(i)が使用され,小平面の境界は描画されません.data.colorは大きさ(nf,n)のcolor行列を 有します.ただし,nは小平面の数,nfはポリゴン小平面を定義する点の数を意味します.nf個の頂点が各小平面を定義する場合, アルゴリズムは(colorインデックス行列の)各色インデックスの平均値を計算します: 同じ小平面のnf個の頂点は同じ色インデックスの値を有します.
color_flag == 3 ('補間' シェーディング)小平面は頂点の色を補間した結果に基づき塗りつぶされます. 頂点の色のインデックスは
data.colorプロパティで 指定されます (各頂点毎に1つの色が必要). 以下の2種類のケースがありえます:data.colorがcolorsベクトルを有する場合 : この場合, 補間シェーディングモードを完成するにはデータが少なすぎます. この処理を行うには,大きさ (nf,n) のcolor行列が必要です (ただし,nは小平面の数,nfはポリゴン小平面を定義する点の数を意味します). 各小平面について,このアルゴリズムは, 単一の小平面のcolorインデックスの値を,小平面の境界を定義するnf個の頂点の色インデックスにコピーします.data.colorが大きさ(nf,n)の色行列を有する場合 (前記のnfおよびnの定義参照), 補間シェーディングモードはこれらの色インデックスにより完了することが できます.
color_flag == 4 (Matlabライクな 'フラット' シェーディング)color_flag==2と同じですが,data.colorが行列の場合,わずかな違いがあります. 全ての小平面はdata.colorプロパティで 指定された色インデックスにより塗りつぶされます (各小平面について1つの色が必要). 以下の2つのケースがありえます:data.colorがcolorsベクトルを有する場合 :color(i)が正の場合, この値は小平面iの色を指定し, 小平面の境界はカレントの線種と色で描画されます.color(i)が負の場合, 色ID-color(i)が使用され,小平面の境界は 描画されません.data.colorは大きさ(nf,n)の色行列を有します. ただし,nは小平面の数,nfはポリゴン小平面を定義する点の数を意味します.nf個の頂点が各小平面を定義する場合, アルゴリズムはパッチ(小平面)を定義する最初の頂点の色を使用します.
- cdata_mapping:
Fac3dハンドルの仕様.'scaled'または'direct'を値とする文字列.data.colorが設定されている場合, 各インデックス色データは各頂点に単一の値を指定します.cdata_mappingは, これらのインデックスをカレントのカラーマップに線形にマップするようにスケーリングするか ('scaled'モード), このカラーマップを直接参照するか('direct' モード)のどちらかを 選択します. このプロパティはcolor_flagが2,3または4に等しい時に有用です.- hiddencolor:
このフィールドは曲面の小平面の背景を描画する際に使用される 色インデックスを有します. この値は正の整数(カレントのカラーマップの色インデックス)とします. この値が負の場合,"visible"平面以外に同じ色が背面側に適用されます.
- clip_state:
このフィールドはsurfaceの
clip_stateプロパティの 値を有します. 値は以下となります:"off"surfaceはクリップされません."clipgrf"surfaceはAxesボックスの外側でクリップ されます."on"surfaceはclip_boxプロパティで 指定された矩形の外側でクリップされます.
- clip_box:
このフィールドは
clip_boxプロパティを定義します. clip_state が "off" の場合, デフォルトで,この値は空の行列です. その他の場合, ベクトル[x,y,w,h](左上の点 幅 高さ) は表示する曲面の部分を定義しますが,clip_stateプロパティの値が変更されます.- use_color_material:
このフィールドは拡散色を面の色に使用できるように する際に使用されます.デフォルト値は,
"on"です.- material_shininess:
このフィールドは, 面の輝度レベルを定義します. このパラメータは, 面に拡散する輝度色を制御します. 任意の正の値を使用可能です. [0 10]の範囲にある値を使用すると良く, 小さい値は強いハイライトを生成し, 大きい値は単に検知できるレベルの ハイライトを生成します. デフォルト値は
"2"です.- ambient_color:
このフィールドは面の環境色を定義します. この色は,各要素が[0, 1]の範囲である 3要素ベクトル
"[red, green, blue]"により定義されます. デフォルト値は"[1 1 1]"です.- diffuse_color:
このフィールドは面の拡散色を定義します. この色は,各要素が[0, 1]の範囲である 3要素ベクトル
"[red, green, blue]"により定義されます. このフィールドは use_color_material が無効の場合のみ使用されます. デフォルト値は"[1 1 1]"です.- specular_color:
このフィールドは面の反射色を定義します. この色は,各要素が[0, 1]の範囲である 3要素ベクトル
"[red, green, blue]"により定義されます. デフォルト値は"[1 1 1]"です.- user_data:
このフィールドはsurfaceデータ構造体に任意のScilab変数を 保存し,再度取得する際に使用できます.
例
//図を作成 t=[0:0.3:2*%pi]'; z=sin(t)*cos(t'); [xx,yy,zz]=genfac3d(t,t,z); plot3d([xx xx],[yy yy],list([zz zz+4],[4*ones(1,400) 5*ones(1,400)])) h=get("hdl") //カレントのエンティティ(ここではsurface)のハンドルを取得 a=gca(); //get current axes a.rotation_angles=[40,70]; a.grid=[1 1 1]; //グリッドを作成 a.data_bounds=[-6,0,-1;6,6,5]; a.axes_visible="off"; //軸は隠されている a.axes_bounds=[.2 0 1 1]; f=get("current_figure"); //親の図のハンドルを取得 f.color_map=hotcolormap(64); //図のカラーマップを変更 h.color_flag=1; //z に基づく色 h.color_mode=-2; //小平面境界を削除 h.color_flag=2; //指定色に基づく色 h.data.color=[1+modulo(1:400,64),1+modulo(1:400,64)]; //影付き h.color_flag=3; scf(2); // 2番目のウインドウを作成し,surfコマンドを使用 subplot(211) surf(z,'cdata_mapping','direct','facecol','interp') subplot(212) surf(t,t,z,'edgeco','b','marker','d','markersiz',9,'markeredg','red','markerfac','k') e=gce(); e.color_flag=1 // 高度 (z座標)に比例する色インデックス e.color_flag=2; // デフォルトモードに戻す e.color_flag= 3; // 補間影モード (data.colorフィールドが指定されていないため,デフォルトの青色に基づく)
参照
| Report an issue | ||
| << surf | 3d_plot | annotation >> |