Status Code (TH)

Status Codes ใช้ประกอบคำสั่งในการสร้าง planar polylines (polylines ที่อยู่บนระนาบ x-y เดียวกัน) เช่น ในคำสั่ง

FPRISM_	top_material, bottom_material, side_material, hill_material,
	n, thickness, angle, hill_height,
	x1, y1, s1,
	...
	xn, yn, sn

s1 หมายถึง status code สำหรับ coordination ที่ 1 และ sn หมายถึง status code สำหรับ coordination ที่ n

Status Code Syntax

Status Codes เป็น binary integer ซึ่งมีค่าอยู่สองกรณี กรณีแรกคือ ระหว่าง 0 ถึง 127 และกรณีที่สองคือ -1 ซึ่งกรณีที่ 2 นี้เป็นค่าพิเศษที่ใช้จบ polylines ถ้ามี coordinates ใดก็ตามที่อยู่หลัง status code (-1) นี้ GDL จะแปลความว่าเป็นการเริ่มต้นการสร้าง hole หรือการเจาะรูใน polygon นั้น ๆ

ใน GDL Reference Guide เราจะเห็นข้อกำหนดว่า

si = j1 + 2*j2 + 4*j3 + 8*j4 + 64*j7 [+ a_code] , where each j can be 0 or 1.

พร้อมรายละเอียดเพิ่มเติมว่า j1, j2, j3, … หมายถึงอะไร เช่น

j1 = lower horizontal edge

j2 = vertical edge

j3 = upper horizontal edge

“where each j can be 0 or 1” นั้น มีความหมายเดียวกันกับ Boolean หรือ true/false (true = 1, false = 0)ถ้าเราต้องการให้แสดงเส้นตามแนวนอนด้านล่าง (j1 = 1) และต้องการแสดงเส้นตามแนวนอนด้านบน (j3 = 1) แต่ไม่ต้องการแสดงเล้นในแนวตั้งเลย (j2 = 0) ผลลัพธ์ si (“s”tatus code สำหรับจุด “i”) จะเกิดจากการแทนค่า j1, j2, j3, … ด้วย 1 และ 0 ในกรณีนี้ si จะมีค่าเท่ากับ 5 (มาจาก si = 1 + 2*(0) + 4*(1)) ซึ่งใน GDL เราสามารถเขียนค่าสำหรับ status code นี้ได้ทั้ง 5 หรือ 1+0+4 หรือ 1+4 ทั้ง 3 แบบนี้มีความหมายเดียวกัน โดยที่แบบแรก โปรแกรมจะใช้เวลาในการคำนวณน้อยกว่า ในขณะที่แบบที่สองและสาม จะมีการคำนวณมากกว่า แต่ก็ทำให้เราสามารถอ่าน script ได้ง่ายกว่า เหมาะสำหรับ developing/debugging script

a_code หมายถึง Additional Status Codes การที่ syntax ระบุว่า [ + a_code] นั้น หมายความว่า อาจจะมี a_code รวมอยู่ในค่า status codes หรือไม่มีก็ได้

Additional Status Codes

Additional Status Codes ใช้ระบุ “วิธี” สร้าง/เขียน polylines (segments/arcs) เช่น ในการสร้าง polyline จากจุด (1, 1) ไปยังจุด (3, 1) นั้น เราสามารถสร้างได้หลายวิธี เช่น ใช้การระบุจุด endpoint ที่แท้จริง (Segment by absolute endpoint,), ใช้การระบุจุด endpoint แบบสัมพัทธ์ (Segment by relative endpoint) หรือใช้การระบุความยาวและทิศทาง (Segment by length and direction)

GDL Reference Guide ระบุการเขียนทั้งสามวิธีข้างต้นไว้ดังนี้

  1. x, y, s โดยที่ 0 < s < 100
  2. dx, dy, 100 + s
  3. l, a, 200 + s

(สามารถดูรายละเอียดอื่น ๆ เพิ่มเติมใด้จาก GDL Reference Guide)

ตัวอย่าง หากต้องการสร้างสี่เหลี่ยมขนาด 1 x 1 m. โดยที่จุดล่างซ้ายอยู่ที่ตำแหน่ง (1, 1) เราสามาถเขียน coordinates พร้อมกับ status codes ของจุดทั้ง 4 จุดได้ดังนี้

วิธีที่ 1 (Segment by absolute endpoint)

1, 1, 1+2+4+8,

2, 1, 1+2+4+8,

2, 2, 15,

1, 2, 15

(สังเกตว่าเราจะเขียน 1+2+4+8 หรือ15 ก็ได้)

วิธีที่ 2 (Segment by relative endpoint)

1, 1, 1+2+4+8,

1, 0, 100+1+2+4+8,

0, 1, 100+15,

-1, 0, 100+15

วิธีที่ 3 (Segment by length and direction)

1, 1, 1+2+4+8,

1, 0, 200+1+2+4+8,

1, 90, 200+15,

1, 180, 200+15

การเขียนทั้ง 3 วิธี จะให้ผลลัพธ์คือสี่เหลี่ยมขนาด 1 x 1 m. โดยที่จุดล่างซ้ายอยู่ที่ตำแหน่ง (1, 1) เหมือนกัน

หากต้องการทดลองนำ coordinates ทั้ง 4 จุดมาใช้ในคำสั่ง FPRISM_ จะได้ script ดังนี้

วิธีที่ 1

FPRISM_	topMat, bottomMat, sideMat, hillMat,
	4, 1.5, 45, 0.5,
	1, 1, 1+2+4+8,
	2, 1, 1+2+4+8,
	2, 2, 15,
	1, 2, 15

วิธีที่ 2

FPRISM_	topMat, bottomMat, sideMat, hillMat,
	4, 1.5, 45, 0.5,
	1, 1, 1+2+4+8,
	1, 0, 100+1+2+4+8,
	0, 1, 100+15,
	-1, 0, 100+15

วิธีที่ 3

FPRISM_	topMat, bottomMat, sideMat, hillMat,
	4, 1.5, 45, 0.5,
	1, 1, 1+2+4+8,
	1, 0, 200+1+2+4+8,
	1, 90, 200+15,
	1, 180, 200+15

หมายเหตุ

  1. หากต้องการทดสอบ script นี้ (ใน 3D script) ต้องมีการสร้าง parameters ใหม่ทั้งหมด 4 ตัว โดยทุกตัวมี parameter type เป็น Surface และแต่ละตัวมี variable ดังนี้ topMat, bottomMat, sideMat และ hillMat
  2. สำหรับคำสั่ง FPRISM_ ในที่นี้ 2 บรรทัดแรกจะเป็นการกำหนด parameters ต่าง ๆ ของคำสั่ง ส่วนบรรทัดที่เหลือจะเป็น coordinates ทั้งหมด

 

 

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.