2002.07.09 更新
斜投影変形の使い方 2000.05.05
1.引き延ばし 2000.05.05
2.弧の伸縮 2002.07.0 2000.06.14
3.直線の伸縮 2002.02.03・2000.06.14
4.線の伸縮 2000.06.14・2000.05.05
(伸縮のモジュールを分離。円弧も伸縮できます。)
5.水
平方向倍率変形 2000.05.05
6.鉛
直方向倍率変形 2000.05.05
7.倍率変
形
ここからは、テクニカルイラス
トを描くに便利です。アイソメ図ではなく、左右で形を変えてあります。
8.斜投影変形1 2000.05.05
9.斜投影変形2 2000.05.05
10.削除・窓の切り抜き 2001.12.02
1.アイソメ図の作成と同じように、平面図、正面図、側面図を描いて下さ
い。
少し離して下さい。
2.平面図、正面図、側面図に在る、同じ基準点を基に変形します。
ここからは[斜投影変形1]を使う場
合で説明します。
3.平面図の変形は、Ma_meta01 z と入力して下さい。
(注)入力コマンドの後に付いている、パラメータ
[z] は半角の小文字にして下さい。
4.** 変形の基準点を指定して下さい。**
と指示が出ますので、[2]で決めてある、基準点を指定します。
5.同じようにして、正面図は [x]、側面図は
[y]のパラメータを使って、変形して下さい。
6.移動コマンドを使い、各面を同じ基準点に移動(コピー可)します。
7.サイコロに各面の図が描かれていると考えて、離れている、図形の頂点を
合わせるように、移動させます。
8.必要な補完線を描いて完成します。
DEFINE Ma_stretch_move
PARAMETER
Del_copy
{0=移動 1=コピー}
STRETCH Assistance
IF (Gl_stretch_direction = 'U')
ELSE_IF
(Gl_stretch_direction = 'H')
MOVE HORIZONTAL
ELSE_IF (Gl_stretch_direction
= 'V')
MOVE VERTICAL
END_IF
IF (Del_copy =
0)
{移動なら}
DEL_OLD
ELSE_IF (Del_copy =
1)
{コピーなら}
COPY
END_IF
END_DEFINE
LOCAL
Angle_unit
{ラディアンへの変換値}
LOCAL
Point_angle_temp
{指定点の角度}
LOCAL
Point_area
{指定点の領域}
LOCAL
Arc_center
{中心点位置}
LOCAL
Arc_radius
{半径}
LOCAL
Arc_angle_s
{始点端の角度}
LOCAL
Arc_angle_e
{終点端の角度}
LOCAL
Vista_angle_s
{指定店から始点端の角度}
LOCAL
Vista_angle_e
{指定店から終点端の角度}
LOCAL
Arc_point_s
{始点端の位置}
LOCAL
Arc_point_e
{終点端の位置}
LOCAL
Arc_angle_m
{指定端の場所}
LOCAL
Point_instruction
{伸縮指定点}
INQ_ENV 6
LET Angle_unit (INQ
3)
{ラディアンへの変換値}
INQ_ELEM
Point_temp
{要素情報の取得}
LET Arc_center (INQ
101)
{中心点位置}
LET Arc_radius (INQ
3)
{半径}
{ 指定点の角度}
LET Point_angle_temp (ANG (Point_temp - Arc_center)
* Angle_unit)
IF (Point_angle_temp < 0)
LET Point_angle_temp (2 * PI +
Point_angle_temp)
END_IF
{ 始点端の角度}
IF ((INQ 4) >= 0)
LET Arc_angle_s ((INQ 4) * Angle_unit)
ELSE
LET Arc_angle_s (2 * PI + (INQ 4) *
Angle_unit)
END_IF
{ 終点端の角度}
IF ((INQ 5) >= 0)
LET Arc_angle_e ((INQ 5) * Angle_unit)
ELSE
LET Arc_angle_e (2 * PI + (INQ 5) *
Angle_unit)
END_IF
LET Arc_point_s (INQ
102)
{始点端の位置}
LET Arc_point_e (INQ
103)
{終点端の位置}
LET Vista_angle_s (ABS (Arc_angle_s -
Point_angle_temp))
{指定点から始点端の角度}
IF (Vista_angle_s > PI)
LET Vista_angle_s (Vista_angle_s - PI)
END_IF
LET Vista_angle_e (ABS (Arc_angle_e -
Point_angle_temp))
{指定点から終点端の角度}
IF (Vista_angle_e > PI)
LET Vista_angle_e (Vista_angle_e - PI)
END_IF
{端位置の記憶}
IF (Vista_angle_s >
Vista_angle_e)
{終点端に近ければ}
LET Arc_angle_m
's'
{指定端}
LET Arc_angle2
'e'
{他端}
ELSE
LET Arc_angle_m
'e'
{指定端}
LET Arc_angle2
's'
{他端}
END_IF
{ 伸縮位置の入力}
IF (Arc_angle_m =
's')
{始端からなら正方向}
READ PNT '** 伸縮する位置を指示して下さい。
**'
RUBBER_ARC_CEN_BEG Arc_center
Arc_point_s
Point_instruction
ELSE_IF (Arc_angle_m =
'e')
{終端からなら反方向}
READ PNT '** 伸縮する位置を指示して下さい。
**'
RUBBER_ARC_CEN_END Arc_center
Arc_point_e
Point_instruction
END_IF
GET_PROPERTIES
Point_temp
{要素の特性の取得変更}
DELETE Point_temp
END
{前の線を削除}
{ 更新書き込み}
IF (Arc_angle_m =
's')
{始点基準なら}
ARC CEN_BEG_END Arc_center
Arc_point_s
Point_instruction
ELSE
ARC CEN_BEG_END Arc_center
(Arc_center + (PNT_RA Arc_radius (ANG
(Point_instruction
- Arc_center))))
Arc_point_e
END_IF
END
END_DEFINE
LOCAL
Line_pnt1
{指定の端位置}
LOCAL
Line_pnt2
{他の端位置}
LOCAL
Line_angle
{線の角度}
LOCAL
Point_instruction
{伸縮指定点}
LOCAL
Point_symmetry
{新縮点の相対位置}
LOCAL
Point_instruction_get
{伸縮位置}
IF (LEN ((INQ 101) - Point_temp) < LEN ((INQ
102) - Point_temp))
LET Line_pnt1 (INQ
101)
{指定の端位置}
LET Line_pnt2 (INQ
102)
{他の端位置}
ELSE
LET Line_pnt1 (INQ
102)
{指定の端位置}
LET Line_pnt2 (INQ
101)
{他の端位置}
END_IF
LET Line_angle (ANG (Line_pnt1 -
Line_pnt2))
{線の角度(相手基準)}
READ PNT '** 伸縮する位置を指示して下さい。 **' RUBBER_LINE_ANG
Line_pnt2 Line_angle Point_instruction
LET Point_symmetry (Point_instruction - Line_pnt2)
LET Point_instruction_get (Line_pnt2 +
(Point_symmetry +
(MIRR Point_symmetry Line_angle)) / 2) {線上の伸縮位置}
MODIFY DEL_OLD Point_temp SCALE TWO_PTS Line_pnt2 Line_pnt2 Line_pnt1 Point_instruction_get END {変形}
END_DEFINE
LOCAL
Point_temp
{線の指定点}
{ 現在の環境の記憶}
INQ_ENV 3
LET Line_color_standard (INQ
201)
{線色}
LET Line_linetype_standard (INQ
301)
{線種}
LET Line_pensize_standard (INQ
10)
{ペン・サイズ}
LET Line_linesize_standard (INQ
12)
{線サイズ}
LOOP
LOOP
READ PNT '**
線又は弧上の、長さを調整する端側付近を指示して下さい。
**' Point_temp
INQ_ELEM
Point_temp
{要素情報の取得}
EXIT_IF (((INQ 403) = LINE) OR ((INQ
403) =
ARC)) {線又は弧なら}
END_LOOP
{ 要素の種類を記憶}
IF ((INQ 403) = LINE)
Ma_stretch_line_straight
Point_temp
ELSE
Ma_stretch_line_arc
Point_temp
END_IF
{ 復元}
COLOR
Line_color_standard
{線色}
LINEPATTERN
Line_linetype_standard
{線種}
IF (Line_pensize_standard <> 0)
PENSIZE
Line_pensize_standard
{ペン・サイズ}
END_IF
IF (Line_linesize_standard <> 0)
LINESIZE
Line_linesize_standard
{線サイズ}
END_IF
END_LOOP
END_DEFINE
DEFINE Ma_metamorphose_h
LOCAL Suuti_0
LOCAL Suuti
LOCAL Ritu_1
LOCAL Ritu_2
LOCAL Ritu_3
LOCAL Genten
READ PNT '** 変形の原点を指示して下さい。 **' Genten
READ NUMBER '** 水平方向に拡大、縮小を行いますので、率の数値を入力して下さい。 **'
Suuti_0
LET Suuti (ABS Suuti_0)
LET Ritu_1 (PNT_XY (0 - Suuti) 0)
LET Ritu_2 (PNT_XY Suuti 0)
LET Ritu_3 (PNT_XY (0 - Suuti) 1)
CS_REF_PT Genten
MODIFY Assistance DEL_OLD AFFINE -1,0 1,0 -1,1
Ritu_1 Ritu_2
Ritu_3
CS_REF_PT 0,0
END_DEFINE
DEFINE Ma_metamorphose_v
LOCAL Suuti_0
LOCAL Suuti
LOCAL Ritu_1
LOCAL Ritu_2
LOCAL Ritu_3
LOCAL Genten
READ PNT '** 変形の原点を指示して下さい。 **' Genten
READ NUMBER '** 鉛直方向に拡大、縮小を行いますので、率の数値を入力して下さい。 **'
Suuti_0
LET Suuti (ABS Suuti_0)
LET Ritu_1 (PNT_XY 0 (0 - Suuti))
LET Ritu_2 (PNT_XY 1 (0 - Suuti))
LET Ritu_3 (PNT_XY 0 Suuti)
CS_REF_PT Genten
MODIFY Assistance DEL_OLD AFFINE 0,-1 1,-1 0,1
Ritu_1 Ritu_2
Ritu_3
CS_REF_PT 0,0
END_DEFINE
DEFINE Ma_metamorphose_s
LOCAL Suuti_0
LOCAL Suuti
LOCAL Ritu_1
LOCAL Ritu_2
LOCAL Ritu_3
LOCAL Genten
READ PNT '** 相似変形の原点を指示して下さい。 **' Genten
READ NUMBER '** 相似変形を行いますので、率の数値を入力して下さい。 **'
Suuti_0
LET Suuti (ABS Suuti_0)
LET Ritu_1 (PNT_XY (0 - Suuti) (0 - Suuti))
LET Ritu_2 (PNT_XY Suuti (0 - Suuti))
LET Ritu_3 (PNT_XY (0 - Suuti) Suuti)
CS_REF_PT Genten
MODIFY Assistance DEL_OLD AFFINE -1,-1 1,-1 -1,1
Ritu_1
Ritu_2 Ritu_3
CS_REF_PT 0,0
END_DEFINE
DEFINE Ma_meta01
PARAMETER
Pa_face
{x=面、y=面、z=面}
LOCAL Lo_point1
LOCAL Lo_point2
LOCAL Lo_point3
LOCAL Lo_point1_1
LOCAL Lo_point2_2
LOCAL Lo_point3_2
READ PNT '** 変形の基準点を指定して下さい。**' Lo_point1
IF (Pa_face = 'x')
LET Lo_point2 (PNT_XY ((X_OF Lo_point1)
- 1)
(Y_OF Lo_point1))
LET Lo_point3 (PNT_XY (X_OF Lo_point1)
((Y_OF
Lo_point1) + 1))
LET Lo_point1_2 Lo_point1
LET Lo_point2_2 (PNT_XY ((X_OF
Lo_point1) -
1) ((Y_OF Lo_point1) + (TAN 3)))
LET Lo_point3_2 Lo_point3
ELSE_IF (Pa_face = 'y')
LET Lo_point2 (PNT_XY ((X_OF Lo_point1)
+ 1)
(Y_OF Lo_point1))
LET Lo_point3 (PNT_XY (X_OF Lo_point1)
((Y_OF
Lo_point1) + 1))
LET Lo_point1_2 Lo_point1
LET Lo_point2_2 (PNT_XY ((X_OF
Lo_point1) +
0.5) ((Y_OF Lo_point1) + (0.5 * TAN 15)))
LET Lo_point3_2 Lo_point3
ELSE_IF (Pa_face = 'z')
LET Lo_point2 (PNT_XY ((X_OF Lo_point1)
- 1)
(Y_OF Lo_point1))
LET Lo_point3 (PNT_XY (X_OF Lo_point1)
((Y_OF
Lo_point1) + 1))
LET Lo_point1_2 Lo_point1
LET Lo_point2_2 (PNT_XY ((X_OF
Lo_point1) -
1) ((Y_OF Lo_point1) + (TAN 3)))
LET Lo_point3_2 (PNT_XY ((X_OF
Lo_point1) +
0.5) ((Y_OF Lo_point1) + (0.5 * TAN 15)))
END_IF
MODIFY Assistance DEL_OLD AFFINE Lo_point1
Lo_point2 Lo_point3
Lo_point1_2 Lo_point2_2 Lo_point3_2
END_DEFINE
DEFINE Ma_meta02
PARAMETER
Pa_face
{x=面、y=面、z=面}
LOCAL Lo_point1
LOCAL Lo_point2
LOCAL Lo_point3
LOCAL Lo_point1_1
LOCAL Lo_point2_2
LOCAL Lo_point3_2
READ PNT '** 変形の基準点を指定して下さい。**' Lo_point1
IF (Pa_face = 'x')
LET Lo_point2 (PNT_XY ((X_OF Lo_point1)
- 1)
(Y_OF Lo_point1))
LET Lo_point3 (PNT_XY (X_OF Lo_point1)
((Y_OF
Lo_point1) + 1))
LET Lo_point1_2 Lo_point1
LET Lo_point2_2 (PNT_XY ((X_OF
Lo_point1) -
1) ((Y_OF Lo_point1) + (TAN 3)))
LET Lo_point3_2 Lo_point3
ELSE_IF (Pa_face = 'y')
LET Lo_point2 (PNT_XY ((X_OF Lo_point1)
+ 1)
(Y_OF Lo_point1))
LET Lo_point3 (PNT_XY (X_OF Lo_point1)
((Y_OF
Lo_point1) + 1))
LET Lo_point1_2 Lo_point1
LET Lo_point2_2 (PNT_XY ((X_OF
Lo_point1) +
0.25) ((Y_OF Lo_point1) + (0.25 * TAN 67)))
LET Lo_point3_2 Lo_point3
ELSE_IF (Pa_face = 'z')
LET Lo_point2 (PNT_XY ((X_OF Lo_point1)
- 1)
(Y_OF Lo_point1))
LET Lo_point3 (PNT_XY (X_OF Lo_point1)
((Y_OF
Lo_point1) + 1))
LET Lo_point1_2 Lo_point1
LET Lo_point2_2 (PNT_XY ((X_OF
Lo_point1) -
1) ((Y_OF Lo_point1) + (TAN 3)))
LET Lo_point3_2 (PNT_XY ((X_OF
Lo_point1) +
0.25) ((Y_OF Lo_point1) + (0.25 * TAN 67)))
END_IF
MODIFY Assistance DEL_OLD AFFINE Lo_point1
Lo_point2 Lo_point3
Lo_point1_2 Lo_point2_2 Lo_point3_2
END_DEFINE
LOCAL
Row_first
{処理パーツIDの少}
LOCAL
Row_last
{処理パーツIDの多}
LOCAL
Id_no
{元パーツのID番号}
LOCAL
Centerpoint_org
{元パーツの原点}
LOCAL
Scale_org
{元パーツの尺度}
LOCAL
Scale_target
{処理パーツの尺度}
LOCAL
Centerpoint
{処理パーツの原点}
LOCAL
Point1
{切り取り指示位置}
LOCAL Point3
{ 指示位置の分解値}
LOCAL Point_1x
LOCAL Point_1y
LOCAL Point_3x
LOCAL Point_3y
{ 補正切り取り位置}
LOCAL
Point_c1
{左下}
LOCAL
Point_c2
{左上}
LOCAL
Point_c3
{右上}
LOCAL
Point_c4
{右下}
{ カレント・パーツの位置の座標}
LOCAL
Point_w1
{左下}
LOCAL
Point_w2
{左上}
LOCAL
Point_w3
{右上}
LOCAL
Point_w4
{右下}
LET Sign_word
'$$element_spill$$'
{処理外要素のキーワード}
CHANGE_GLOBAL_INFO Sign_word
''
{キーワードをクリア}
RESET_PART_NUMBER
{ID番号の整理}
{ 切り取り範囲の入力}
READ PNT '**
切り抜く、角の位置を指示して下さい。(下から上への方向は、全てのパーツ/上から下への方向は、パーツ域を指定)**'
Point1
READ PNT '**
切り抜く、角の位置を指示して下さい。(下から上への方向は、全てのパーツ/上から下への方向は、パーツ域を指定)**'
RUBBER_BOX Point1 Point3
{ 左下・右上に補正}
LET Point_1x (X_OF Point1)
LET Point_1y (Y_OF Point1)
LET Point_3x (X_OF Point3)
LET Point_3y (Y_OF Point3)
IF (Point_1x > Point_3x)
IF (Point_1y > Point_3y)
LET Point1 (PNT_XY Point_3x
Point_3y)
LET Point2 (PNT_XY Point_3x
Point_1y)
LET Point3 (PNT_XY Point_1x
Point_1y)
LET Point4 (PNT_XY Point_1x
Point_3y)
ELSE
LET Point1 (PNT_XY Point_3x
Point_1y)
LET Point2 (PNT_XY Point_3x
Point_3y)
LET Point3 (PNT_XY Point_1x
Point_3y)
LET Point4 (PNT_XY Point_1x
Point_1y)
END_IF
ELSE
IF (Point_1y > Point_3y)
LET Point1 (PNT_XY Point_1x
Point_3y)
LET Point2 (PNT_XY Point_1x
Point_1y)
LET Point3 (PNT_XY Point_3x
Point_1y)
LET Point4 (PNT_XY Point_3x
Point_3y)
ELSE
LET Point2 (PNT_XY Point_1x
Point_3y)
LET Point4 (PNT_XY Point_3x
Point_1y)
END_IF
END_IF
INQ_ENV 7
LET Id_org (INQ
302)
{元パーツのID番号}
LET Id_org ('~' + Id_org)
LET Centerpoint_org (INQ
105)
{元パーツの原点位置}
INQ_ENV 19
LET Scale_org (INQ
4)
{元パーツの尺度}
IF (Point_1y >
Point_3y)
{パーツ指定なら}
PRT_EDITOR
{パーツ構造エディタを表示}
READ STRING '** 切り抜き開始のパーツ欄を指示して下さい。
**' Row_first
READ STRING '** 切り抜き終了のパーツ欄を指示して下さい。
**' Row_last
SHOW_TABLE OFF
'PBT_GENTAB'
{パーツ構造エディタの消去}
LET Row_first (VAL (SUBSTR Row_first 2
(LEN
Row_first)))
LET Row_last (VAL (SUBSTR Row_last 2
(LEN Row_last)))
IF (Row_first >
Row_last)
{大小の入れ替え}
LET Id_no Row_first
LET Row_first Row_last
ELSE
LET Id_no Row_last
END_IF
ELSE
{全パーツなら}
INQ_ENV 8
LET Id_no (inq
5)
{ID番号の最大値}
LET Row_first 1
END_IF
DISPLAY '** 実行すると復活できません。取り止めるなら [ESC]キーを押してください。その他のキーで実行します。**' {警告}
{ バーツデータの処理}
LOOP
EDIT_PART ('~' + (STR
Id_no))
{処理パーツへ移動}
INQ_ENV 19
LET Scale_target (INQ
4)
{処理パーツの尺度}
INQ_ENV 7
LET Centerpoint (INQ
105)
{処理パーツの原点位置}
{ 切り取り窓位置}
LET Point_c1 ((Point1 * Scale_org +
Centerpoint_org
- Centerpoint) / Scale_target) {補正描画位置1}
LET Point_c2 ((Point2 * Scale_org +
Centerpoint_org
- Centerpoint) / Scale_target) {補正描画位置2}
LET Point_c3 ((Point3 * Scale_org +
Centerpoint_org
- Centerpoint) / Scale_target) {補正描画位置3}
LET Point_c4 ((Point4 * Scale_org +
Centerpoint_org
- Centerpoint) / Scale_target) {補正描画位置4}
{ パーツの外周位置}
INQ_ENV 7
LET Point_w1 (INQ 101)
LET Point_w3 (INQ 102)
LET Point_w2 (PNT_XY (X_OF Point_w1)
(Y_OF Point_w3))
LET Point_w4 (PNT_XY (X_OF Point_w3)
(Y_OF Point_w1))
IF ((X_OF Point_c1) < (X_OF
Point_w3))
{関係のないパーツは処理から除く為}
IF ((X_OF Point_c3) >
(X_OF Point_w1))
IF ((Y_OF
Point_c1)
< (Y_OF Point_w3))
IF
((Y_OF
Point_c3) > (Y_OF Point_w1))
TRAP_ERROR
{エラーストップをOFF・要素無しパーツ用}
{
処理対象要素の除外目印(スピードUP)}
ADD_ELEM_INFO
Sign_word POLY Point_w1 Point_w2 Point_w3 Point_c3 Point_c4
Point_c1 Point_c2 Point_c3 Point_w3 Point_w4 Point_w1
ADD_ELEM_INFO
Sign_word POLY Point_w3 Point_w4 Point_w1 Point_c1 Point_c2
Point_c3 Point_c4 Point_c1 Point_w1 Point_w2 Point_w3
ADD_ELEM_INFO
Sign_word BOX Point_c1 Point_c3
LINE
RECTANGLE Point_c1 Point_c3
{切り取り穴}
SPLIT
SELECT ALL SUBTRACT INFOS Sign_word CONFIRM
{交差点での要素分割}
DELETE
SELECT BOX Point_c1 Point_c3 CONFIRM
END
{削除}
DISPLAY_NO_WAIT
Id_no
{動作表示}
MERGE
SELECT ALL SUBTRACT INFOS Sign_word CONFIRM
{分割要素の再結合}
CHECK_ERROR
{エラーストップをON}
CHANGE_ELEM_INFO
Sign_word '' INFOS Sign_word {目印隠滅}
END_IF
END_IF
END_IF
END_IF
LET Id_no (Id_no - 1)
EXIT_IF (Id_no < Row_first)
DISPLAY_NO_WAIT
Id_no
{動作表示}
END_LOOP
EDIT_PART Id_org {元パーツへ戻る}
END_DEFINE
気をつけて作りました、使用してのトラブルに責任は持てませんが、
自由にお使い下さい。(伏 見 表)