ต่อจาก
บทที่ ๓
ในบทที่แล้วได้แสดงวิธีการสร้างและจัดวางวัตถุในเบื้องต้นไปแล้ว สำหรับบทนี้จะเป็นการนำวัตถุมาจับกลุ่มและวางเป็นตารางอย่างเป็นระบบมากขึ้น
การจัดกลุ่มวัตถุแล้วจัดเรียง
วิธีหนึ่งที่สะดวกในการใช้จัดวางวัตถุก็คือนำวัตถุมาจับกลุ่มกันโดยเป็นออบเจ็กต์ VGroup แล้วใช้เมธอดสำหรับจัดเรียง
เริ่มจากเมธอด .arrange() ใช้สำหรับจัดเรียงโดยเอาวัตถุทั้งหมดในกลุ่มมาเรียงต่อกันตามทิศที่กำหนด
ตัวอย่างการใช้
import manimlib as mnm
class Manimala(mnm.Scene):
def construct(self):
text1 = mnm.Text('ซ้าย',color='#aaeeaa',size=3)
text2 = mnm.Text('ขวา',color='#eeaaaa',size=4)
vg = mnm.VGroup(text1,text2)
vg.arrange(mnm.RIGHT)
self.add(vg)
วัตถุที่จะนำมารวมกลุ่มใน VGroup จะมีกี่ตัวก็ได้ ซึ่งก็จะเรียงไล่ไปตามลำดับที่ใส่
ค่าที่ต้องใส่ใน .arrange() คือทิศทางการเรียง โดยค่าตั้งต้นคือ RIGHT คือจะเรียงจากซ้ายไปขวา
อีกตัวอย่าง คราวนี้ลองเปลี่ยนเป็น UP เรียงตามแนวตั้งโดยวางขึ้นไปด้านบนเรื่อยๆ
import manimlib as mnm
class Manimala(mnm.Scene):
def construct(self):
text1 = mnm.Text('ล่าง',color='#aaeeaa',size=2.4)
text2 = mnm.Text('กลาง',color='#eeaaaa',size=3.6)
text3 = mnm.Text('บน',color='#aaaaee',size=4.8)
vg = mnm.VGroup(text1,text2,text3)
vg.arrange(mnm.UP)
self.add(vg)
การจัดกลุ่มวัตถุที่จัดกลุ่มแล้ว
ออบเจ็กต์ที่ได้จากการจัดกลุ่มแล้วอาจนำมาจัดกลุ่มอีกรอบได้
เช่นลองจัดกลุ่มเรียงแนวตั้งแล้วค่อยรวมแนวนอน
import manimlib as mnm
class Manimala(mnm.Scene):
def construct(self):
text1 = mnm.Text('ขวาล่าง',color='#aaeeaa',size=2.5)
text2 = mnm.Text('ขวาบน',color='#eeaaaa',size=3.5)
text3 = mnm.Text('ซ้าย',color='#aaaaee',size=4.5)
vg1 = mnm.VGroup(text1,text2)
vg1.arrange(mnm.UP)
vg2 = mnm.VGroup(vg1,text3)
vg2.arrange(mnm.LEFT)
self.add(vg2)
ลองจัดแนวนอนก่อนค่อยรวมแนวตั้ง
import manimlib as mnm
class Manimala(mnm.Scene):
def construct(self):
text1 = mnm.Text('ขวาบน',color='#aaeeaa',size=2.5)
text2 = mnm.Text('ซ้ายบน',color='#eeaaaa',size=3.5)
text3 = mnm.Text('ล่าง',color='#aaaaee',size=4.5)
vg1 = mnm.VGroup(text1,text2)
vg1.arrange(mnm.LEFT)
vg2 = mnm.VGroup(vg1,text3)
vg2.arrange(mnm.DOWN)
self.add(vg2)
จัดในแนวนอน ๒ แถว แล้วเอามารวมกันในแนวตั้งอีกที
import manimlib as mnm
class Manimala(mnm.Scene):
def construct(self):
text1 = mnm.Text('ขวาบน',color='#aaeeaa',size=2)
text2 = mnm.Text('กลางบน',color='#eeaaaa',size=3)
text3 = mnm.Text('ซ้ายบน',color='#aaaaee',size=1.5)
vg1 = mnm.VGroup(text1,text2,text3)
vg1.arrange(mnm.LEFT)
text4 = mnm.Text('ซ้ายล่าง',color='#eeeeaa',size=3.5)
text5 = mnm.Text('ขวาล่าง',color='#aaeeee',size=2.5)
vg2 = mnm.VGroup(text4,text5)
vg2.arrange(mnm.RIGHT)
vg3 = mnm.VGroup(vg1,vg2)
vg3.arrange(mnm.DOWN)
self.add(vg3)
การกำหนดระยะเว้นห่างในการจัดเรียง
ระยะห่างระหว่างแต่ละตัวที่นำมาจัดเรียงกำหนดได้โดยใส่คีย์เวิร์ด buff ใน .arrange()
ตัวอย่าง
import manimlib as mnm
class Manimala(mnm.Scene):
def construct(self):
text1 = mnm.Text('ก',color='#aaeeaa',size=6)
text2 = mnm.Text('ข',color='#eeaaaa',size=5)
text3 = mnm.Text('ค',color='#aaaaee',size=7)
vg = mnm.VGroup(text1,text2,text3)
vg.arrange(mnm.RIGHT,buff=2)
self.add(vg)
การจัดเรียงวัตถุเป็นตาราง
หากต้องการนำวัตถุมาจัดเรียงกันเป็นตารางก็ทำได้โดยใช้เมธอด .arrange_in_grid() โดยระบุจำนวนหลักแนวนอนที่คีย์เวิร์ด n_cols
ตัวอย่างเช่น
import manimlib as mnm
class Manimala(mnm.Scene):
def construct(self):
vg = mnm.VGroup(
mnm.Text('ก',size=2),
mnm.Text('ข',size=2.3),
mnm.Text('ค',size=2.6),
mnm.Text('ง',size=2.9),
mnm.Text('จ',size=3.2),
mnm.Text('ช',size=3.5),
mnm.Text('ญ',size=3.8),
)
vg.arrange_in_grid(n_cols=3,buff=0.5)
self.add(vg)
ในการเรียงนั้นปกติจะเรียงในแนวนอนให้เต็มแถวก่อนแล้วจึงไล่ไปแถวถัดไป แต่ถ้าจะให้เรียงในแนวตั้งก่อนให้ใส่ fill_rows_first=False แล้วกำหนดจำนวนแถวแนวตั้งที่คีย์เวิร์ด n_rows
ตัวอย่าง
import manimlib as mnm
class Manimala(mnm.Scene):
def construct(self):
vg = mnm.VGroup(
mnm.Text('หนึ่ง',size=3),
mnm.Text('สอง',size=3.3),
mnm.Text('สาม',size=3.6),
mnm.Text('สี่',size=3.9),
mnm.Text('ห้า',size=4.2),
)
vg.arrange_in_grid(n_rows=2,buff=1.1,fill_rows_first=False)
self.add(vg)
ค่าระยะห่างที่ใส่ในคีย์เวิร์ด buff นั้นเป็นการกำหนดระยะเว้นห่างทั้งในแนวตั้งและแนวนอน แต่หากต้องการให้แนวตั้งและนอนเว้นระยะต่างกันก็กำหนดแยกได้โดยใช้คีย์เวิร์ด h_buff กับ v_buff แทน
เช่น
import manimlib as mnm
class Manimala(mnm.Scene):
def construct(self):
vg = mnm.VGroup(
mnm.Text('อี',size=3),
mnm.Text('เอ้อร์',size=3),
mnm.Text('ซาน',size=3),
mnm.Text('ซื่อ',size=3),
mnm.Text('อู่',size=3),
mnm.Text('ลิ่ว',size=3),
)
vg.arrange_in_grid(n_cols=2,h_buff=1.5,v_buff=0.2)
self.add(vg)
การคัดลอกวัตถุซ้ำๆทำเป็นตาราง
หากมีวัตถุตัวหนึ่งที่ต้องการสร้างให้มีหลายๆอันเอามาไล่เรียงเป็นตารางก็อาจทำได้โดยใช้เมธอด .get_grid()
ตัวอย่างการใช้
import manimlib as mnm
class Manimala(mnm.Scene):
def construct(self):
text = mnm.Text('๑๒',color='#aacc55')
grid = text.get_grid(n_rows=9,n_cols=11,buff=0.5)
self.add(grid)
อ่านบทถัดไป >>
บทที่ ๕