top of page

PML Cơ Bản (Phần 3)

Updated: Dec 30, 2020

Ở phần 1 và 2 Happy đã giới thiệu các thành phần cơ bản trong PML như biến, biểu thức, cấu trúc điều kiện, cấu trúc vòng lặp. Ở phần này Happy sẽ giới thiệu đến các bạn một phần mà chắc hẳn các bạn rất mong chờ: đối tượng (Element) trong PDMS, nào bắt đầu thôi!!

Hình 1: PML Cơ Bản

1. Làm việc với đối tượng trong PDMS/E3D

- Mỗi đối tượng trong PDMS/E3D (Pipe, Bran, Bran mem, Equi, Box, Stru…)được truy xuất như là một Dbref object (Database reference object). Trong môi trường design, các đối tượng được liệt kê trong Hierarchy Explore, trong Explore mỗi đối tượng luôn được thể hiện theo cấu trúc: Type + Tên đối tượng

Hình 2: Design Explorer

- Mỗi đối tượng có thể được đặt tên hoặc không, nếu được đặt tên thì tên đó luôn bắt đầu bằng ký tự /. Ngoài ra mỗi đối tượng còn có một số định danh (reference number) có dạng: =x/y trong đó x là số db number và y là số được cấp tự động. Số ref này được cấp tự động mỗi khi một item được tạo mới và không thể thay đổi và thường không trùng nhau trong cùng một project.

- Đối tượng đang được chon được gọi là CE (current element) hoặc biến Global !!CE (trong PML2)

- Có nhiều cách để select đến một đối tượng bất kỳ khi đã biết tên hoặc ref number. Ví dụ muốn select một Pipe tên /150-A-3:

Cách 1: click chuột vào đối tượng tên /150-A-3 trong Design explorer

Cách 2: click chuột trái vào đối tượng trong cửa sổ 3D (nếu có)

Cách 3: gõ tên đối tượng, đơn giản ta chỉ cần gõ /150-A-3 và Enter trong command line:

/150-A-3

Cách 4: set current element bằng câu lênh:

!!ce = /150-A-3

Khi thực hiện theo cách 2, 3 và 4, Hierarchy explore cũng sẽ tự động highlight đối tượng

Hình 3: Select Đối Tượng

- Biến !!ce là một Dbref object mặc đinh và nó là đối tượng đang được chọn. Bạn cũng có thể tự tạo một dbref object và gán cho nó một đối tượng bất kỳ.

Ví dụ trong Sample project, mình tạo một dbref object tên !Item và gán cho nó element tên /150-B-6 (ref =23584/5542), mình sẽ dùng câu lệnh:

!item = /150-B-6

Hoặc

!item = =23584/5542

2. Truy xuất thuộc tính của đối tượng

Trong PDMS/E3D mỗi đối tượng đều chưa một loạt các thuộc tính hay Attribute, để xem tất cả thuộc tính của current element, dùng lệnh Query:

Q ATT

Ta cũng dễ dàng xem được thuộc tính của đối tượng hoặc gán giá trị của thuộc tính đó vào biến nếu biết tên của thuộc tính

Ví dụ: Đối tượng hiện tại là một Elbow, ta muốn xem vị trí của đối tượng hiện tại, ta dùng lệnh:

Q Pos

Hoặc gán tên của đối tượng hiện tại vào biến:

Cách 1: Var !Pos1 Position

Với cách này biến !pos1 luôn là dạng string, bất kể thuộc tính phía sau thuộc dạng gì

Cách 2:

!Pos2 = !!ce.Position

Với cách này, biến !pos2 thu được là một Position object tương ứng với Att position.

Để xem giá trị của biến ta có thể dùng lệnh

Q var !tenbien

Hình 4: Xem Thuộc Tính Position Của Elbow

3. Tập hợp đối tượng (collection)

Một method không thể thiếu trong PML là collection (tập hợp). Cấu trúc cơ bản có dạng:

Var !array coll All (Type of item) with (Condition) for (Owner)

Trong cấu trúc trên:

- (Type of item) có thể có hoặc không. Là loại (Type) của đối tượng cần collect. Một số type có thể dùng: Bran mem, Pipe, Bran, Stru, Equi… có thể collect nhiều type khác nhau và đặt cách nhau trong dấu ngoặc

- With (Condition): có thể có hoặc không, chỉ collect nếu đối tượng trả về Condition là true.

Ta có thể dùng toán hàm luận lý (or, and, not, gt, lt…) để làm điều kiện khi collect đối tượng. Hoặc một hàm cực kỳ hữu ích: matchwild(Chuỗi 1, Chuỗi 2) hàm này sẽ trả về giá trị True nếu Chuỗi 1 có chứa Chuỗi 2, trong chuỗi 2 có thể dùng dấu * mang nghĩ là một ký tự bất kỳ.

- For (Owner): có thể có hoặc không, giới hạn chỉ collect những phần tử con của Onwer.

- Collection sẽ trả về một mảng chứa ref number (dưới dạng string) của những item thỏa điều kiện. Ở đây kết quả sẽ nhận được trong mảng có tên !array.

4. Ví dụ kết thúc:

Trong ví dụ này ta sẽ viết một macro đơn giản: tìm tất cả những pipe có chứa ký tự ‘B’ trong zone /PIPES và thêm đối tượng đó vào 3D view, đồng thời trả về kết quả tìm được bao nhiêu line.

Trình tự thực hiện như sau:

Bước 1: Collect tất cả Pipe( tức Type là ‘PIPE’) với tên có chữ B (ta sẽ dùng hàm Matchwild(name, ‘*B*’)) và chỉ collect trong zone /PIPES như vây ta có câu lệnh collection như sau:

Var !Array coll all (PIPE) with (Matchwild(name, ‘*B*’)) for /PIPES

Bước 2: Dùng vòng lặp do chạy qua từng element trong mảng !Array, selection đối tượng đó, và add đối tượng ra 3D view( dùng lệnh Add CE)

Bước 3: trả về số lượng pipe đã collect được

Ta có code như sau:

--Collect item with name contains char B

Var !Array coll all (PIPE) with (Matchwild(name, ‘*B*’)) for /PIPES

--Loop through every item in array

Do !element val !Array

--slelect element

!!ce = $!element

--Add current element to 3D view

Add ce

Enddo

--Get size off array

!size = !Array.size()

--Print to command line

$p Find $!size elements

Save đoạn code trên vào file D:\Sample.mac. Và gọi macro trong command line bằng lệnh $M “D:\Sample.mac”

Hình 5: Chạy Macro Sample.mac

Chúc các bạn cuối tuần vui vẻ, hẹn gặp lại các bạn vào thứ bảy tuần sau nhé!

bottom of page