Share
Sign In
PML BASIC
Pml Basic 6 - Object Collection()
B
Bito
👍
** GPTS로 학습시킨후 뽑아낸 글입니다 어색만 부분이나 있을수 있습니다
오류 있으면 댓글 달아주세요 추후 수정 예정입니다.**
Object Collection은 기존 PML1 방식보다 사용하기 번거롭습니다.
하지만 2개이상의 Search Scope를 설정 할 수 있다는 장점, Collect 되는 Data 타입이 String이 아닌 Dbref라는점에서 좀 더 효율적인 collect가 필요할떄 사용합니다.
1. OBJECT COLLECTION의 정의
OBJECT COLLECTION은 E3D에서 기본 제공되는 Object로 특정 범위(Scope), 타입(Type), 필터(Filter) 등을 설정하여 조건에 맞는 객체들을 수집합니다.
구문:
!oCollection = OBJECT COLLECTION()
이 구문을 통해 Object Collection을 생성할 수 있습니다.
2. OBJECT COLLECTION의 주요 메서드
OBJECT COLLECTION은 데이터를 수집하고 필터링하기 위한 다양한 메서드를 제공합니다. 여기서는 자주 사용되는 메서드와 그 예제를 설명합니다.
2.1 SCOPE(STRING scope)
SCOPE 메서드는 Object Collection이 데이터를 수집할 범위를 설정합니다. Scope는 WORLD(전체 모델), CE(현재 요소), 또는 특정 영역 등으로 설정할 수 있습니다. Scope를 설정하면 그 범위 내에서만 객체를 수집합니다.
예제:
!oCollection.SCOPE(WORLD)
이 예제에서는 전체 모델(WORLD) 범위에서 객체를 수집하도록 설정합니다.
2.2 ADDSCOPE(STRING scope)
ADDSCOPE 메서드는 추가적인 범위를 설정하여 여러 범위에서 데이터를 수집할 수 있게 합니다. 이 메서드를 사용하면 초기 SCOPE에서 지정한 범위 외에 다른 범위도 추가로 포함시킬 수 있습니다.
예제:
!oCollection.addscope(REF OF /ZONE1)
이 예제에서는 /ZONE1이라는 특정 영역을 추가하여, 초기 SCOPE 외에도 이 영역에서 데이터를 수집하도록 설정합니다.
2.3 TYPE(STRING type)
TYPE 메서드는 수집할 객체의 타입을 지정합니다. 이 메서드를 사용하면 특정 타입의 객체들만 수집할 수 있습니다.
예제:
!oCollection.TYPE('PIPE')
이 예제에서는 'PIPE' 타입의 객체들만 수집하도록 설정합니다.
2.4 FILTER(STRING expression)
FILTER 메서드는 수집된 객체들 중 특정 조건에 부합하는 객체들만 필터링할 수 있도록 합니다. OBJECT EXPRESSION을 사용하여 원하는 조건을 지정할 수 있습니다.
예제:
!oCollection.FILTER(OBJECT EXPRESSION(|NAME EQ 'PIPE-1001'|))
이 예제에서는 이름이 'PIPE-1001'인 객체만 수집된 객체들 중에서 필터링합니다.
2.5 RESULTS()
RESULTS 메서드는 설정된 조건들(SCOPE, TYPE, FILTER)에 따라 수집된 객체들을 반환합니다. 반환된 결과는 dbref 타입의 배열이며, 이 배열을 사용해 후속 작업을 수행할 수 있습니다.
예제:
!result = !oCollection.RESULTS()
이 예제에서는 수집된 객체들을 결과로 반환합니다.
3. OBJECT COLLECTION의 사용법
OBJECT COLLECTION은 주로 특정 조건에 맞는 객체들을 수집하고, 수집된 객체들을 활용해 다양한 작업을 수행하는 데 사용됩니다. 일반적인 사용 과정은 다음과 같습니다:
1.
Object Collection 객체 생성: !oCollection = OBJECT COLLECTION()
2.
Scope 설정: !oCollection.SCOPE(...) 또는 !oCollection.addscope(...)
3.
타입 지정: !oCollection.TYPE(...)
4.
필터 적용: !oCollection.FILTER(...)
5.
결과 얻기: !result = !oCollection.RESULTS()
이 과정에서 Scope와 Type을 설정하고, 필터를 통해 필요한 데이터를 정확하게 수집한 후, 수집된 결과를 활용해 작업을 수행할 수 있습니다.
4. OBJECT COLLECTION을 사용한 예제
다양한 예제를 통해 OBJECT COLLECTION의 활용 방법을 더욱 자세히 알아보겠습니다.
예제 1: 전체 모델에서 모든 파이프 수집
$* Object Collection 객체 생성 !oCollection = OBJECT COLLECTION() $* Scope를 WORLD로 설정하여 전체 모델에서 수집 !oCollection.SCOPE(WORLD) $* 파이프 타입의 객체들만 수집하도록 설정 !oCollection.TYPE('PIPE') $* 설정된 조건에 따라 객체들을 수집 !pipes = !oCollection.RESULTS() $* 수집된 파이프들의 이름을 출력 DO !pipe values !pipes $P $!pipe.NAME ENDDO
설명: 이 예제는 전체 모델에서 타입이 'PIPE'인 모든 객체를 수집하고, 그 객체들의 이름을 출력합니다.
예제 2: 특정 이름을 가진 객체들 수집
$* Object Collection 객체 생성 !oCollection = OBJECT COLLECTION() $* Scope를 현재 요소(CE)로 설정 !oCollection.SCOPE(CE) $* 추가적으로 특정 영역을 포함하도록 설정 !oCollection.addscope(REF OF /ZONE1) $* 이름이 'VALVE'로 시작하는 객체들만 수집하도록 필터링 !oCollection.FILTER(OBJECT EXPRESSION(|MATCHWILD(NAME, 'VALVE*')|)) $* 설정된 조건에 따라 객체들을 수집 !valves = !oCollection.RESULTS() $* 수집된 객체들의 타입을 출력 DO !valve values !valves $P !$valve.TYPE ENDDO
설명: 이 예제는 현재 요소와 특정 영역에서 이름이 'VALVE'로 시작하는 객체들을 수집하고, 그 객체들의 타입을 출력합니다.
예제 3: 특정 범위 내의 모든 ZONE 수집 및 속성 평가
$* Object Collection 객체 생성 !oCollection = OBJECT COLLECTION() $* Scope를 현재 요소(CE)로 설정 !oCollection.SCOPE(CE) $* 'ZONE' 타입의 객체들만 수집하도록 설정 !oCollection.TYPE('ZONE') $* 설정된 조건에 따라 객체들을 수집 !zones = !oCollection.RESULTS() $* 각 ZONE의 이름을 추출하는 블록 생성 !block = OBJECT BLOCK('!zones[!EvalIndex].NAME') $* 블록을 평가하여 ZONE 이름들의 배열 생성 !zoneNames = !zones.EVALUATE(!block) $* 수집된 ZONE 이름들을 출력 DO !zoneName values !zoneNames $P $!zoneName ENDDO
설명: 이 예제는 현재 요소 내의 모든 'ZONE' 타입의 객체를 수집하고, 각 ZONE의 이름을 평가하여 출력합니다.
예제 4: 특정 속성 값에 따라 객체 필터링
$* Object Collection 객체 생성 !oCollection = OBJECT COLLECTION() $* Scope를 WORLD로 설정하여 전체 모델에서 수집 !oCollection.SCOPE(WORLD) $* 특정 속성(TYPE)이 'FLANGE'인 객체들만 수집하도록 필터링 !oCollection.FILTER(OBJECT EXPRESSION(|TYPE EQ 'FLANGE'|)) $* 설정된 조건에 따라 객체들을 수집 !flanges = !oCollection.RESULTS() $* 수집된 객체들의 특정 속성(DIAMETER)을 출력 DO !flange values !flanges $P !flange.ATTRIBUTE('DIAMETER') ENDDO
설명: 이 예제는 전체 모델에서 TYPE 속성이 'FLANGE'인 객체를 수집하고, 그 객체들의 DIAMETER 속성 값을 출력합니다.
5. 종합 예시: 다양한 속성에 따른 객체 수집
OBJECT COLLECTION은 특정 속성에 따라 객체를 필터링하여 수집할 수 있습니다. 아래는 다양한 속성(예: 무게, 길이, 재질, 반지름, 직경 등)에 따른 객체 수집 예시입니다.
예제 5: 무게가 100 이상인 객체들 수집
$* Object Collection 객체 생성 !oCollection = OBJECT COLLECTION() $* Scope를 WORLD로 설정하여 전체 모델에서 수집 !oCollection.SCOPE(WORLD) $* 무게(WEIGHT)가 100 이상인 객체들만 수집하도록 필터링 !oCollection.FILTER(OBJECT EXPRESSION(|WEIGHT GT 100|)) $* 설정된 조건에 따라 객체들을 수집 !elements = !oCollection.RESULTS() $* 수집된 객체들의 이름을 출력 DO !element values !elements $P $!element.NAME ENDDO
예제 6: 길이가 50 이하인 객체들 수집
$* Object Collection 객체 생성 !oCollection = OBJECT COLLECTION() $* Scope를 WORLD로 설정하여 전체 모델에서 수집 !oCollection.SCOPE(WORLD) $* 길이(LENGTH)가 50 이하인 객체들만 수집하도록 필터링 !oCollection.FILTER(OBJECT EXPRESSION(|LENGTH LE 50|)) $* 설정된 조건에 따라 객체들을 수집 !elements = !oCollection.RESULTS() $* 수집된 객체들의 이름을 출력 DO !element values !elements $P $!element.NAME ENDDO
예제 7: 재질이 'STEEL'로 시작하는 객체들 수집
$* Object Collection 객체 생성 !oCollection = OBJECT COLLECTION() $* Scope를 WORLD로 설정하여 전체 모델에서 수집 !oCollection.SCOPE(WORLD) $* 재질(MATR)이 'STEEL'로 시작하는 객체들만 수집하도록 필터링 !oCollection.FILTER(OBJECT EXPRESSION(|MATCHWILD(MATR, 'STEEL*') GT 0|)) $* 설정된 조건에 따라 객체들을 수집 !elements = !oCollection.RESULTS() $* 수집된 객체들의 이름을 출력 DO !element values !elements $P $!element.NAME ENDDO
예제 8: 반지름이 10보다 큰 객체들 수집
$* Object Collection 객체 생성 !oCollection = OBJECT COLLECTION() $* Scope를 WORLD로 설정하여 전체 모델에서 수집 !oCollection.SCOPE(WORLD) $* 반지름(RADIUS)이 10보다 큰 객체들만 수집하도록 필터링 !oCollection.FILTER(OBJECT EXPRESSION(|RADIUS GT 10|)) $* 설정된 조건에 따라 객체들을 수집 !elements = !oCollection.RESULTS() $* 수집된 객체들의 이름을 출력 DO !element values !elements $P $!element.NAME ENDDO
예제 9: 직경이 20 이하인 객체들 수집
$* Object Collection 객체 생성 !oCollection = OBJECT COLLECTION() $* Scope를 WORLD로 설정하여 전체 모델에서 수집 !oCollection.SCOPE(WORLD) $* 직경(DIAMETER)이 20 이하인 객체들만 수집하도록 필터링 !oCollection.FILTER(OBJECT EXPRESSION(|DIAMETER LE 20|)) $* 설정된 조건에 따라 객체들을 수집 !elements = !oCollection.RESULTS() $* 수집된 객체들의 이름을 출력 DO !element values !elements $P $!element.NAME ENDDO
6. !!collectAllFor 함수
!!collectAllFor 함수는 OBJECT COLLECTION의 사용을 간소화하여, 더 빠르고 간편하게 객체를 수집할 수 있도록 도와줍니다. 이 함수는 조건에 맞는 객체를 한 번에 수집하여 반환합니다.
구문:
!!collectAllFor(!types is STRING, !expr is STRING, !item is DBREF) is ARRAY
예제:
!result = !!collectAllFor('PIPE', |MATCHWILD(NAME, 'TEST*')|, CE)
이 예제는 현재 요소에서 이름이 'TEST'로 시작하는 'PIPE' 타입의 객체들을 한 번에 수집하여 반환합니다. 이 함수는 복잡한 수집 작업을 단순화할 수 있는 매우 유용한 도구입니다.
결론
OBJECT COLLECTION은 PML에서 매우 강력한 도구로, 특정 조건에 부합하는 객체들을 수집하고 필터링하는 데 탁월한 성능을 발휘합니다. 이 도구를 사용하면 모델 내에서 필요한 데이터를 정확하게 수집하고, 후속 작업을 효율적으로 수행할 수 있습니다. 또한 !!collectAllFor와 같은 함수는 이러한 작업을 더욱 간소화할 수 있습니다.
이제 OBJECT COLLECTION을 사용하여 다양한 범위와 조건에서 데이터를 수집하고, 필요에 따라 필터링하여 원하는 결과를 얻을 수 있습니다. 이를 통해 AVEVA E3D 및 PDMS와 같은 시스템에서 더 효율적이고 관리하기 쉬운 코드를 작성할 수 있습니다.
Bi
Subscribe to 'bittokki'
Welcome to 'bittokki'!
By subscribing to my site, you'll be the first to receive notifications and emails about the latest updates, including new posts.
Join SlashPage and subscribe to 'bittokki'!
Subscribe
👍
Other posts in 'PML BASIC'See all
Bito
Pml Basic 9 - Object block()
** GPTS로 학습시킨후 뽑아낸 글입니다 어색만 부분이나 있을수 있습니다 오류 있으면 댓글 달아주세요 추후 수정 예정입니다.** OBJECT BLOCK의 정의와 사용 방법에 대한 심화 설명 OBJECT BLOCK은 PML에서 Array의 각 요소에 특정 작업을 수행하는 표현식을 포함하는 객체로, 복잡한 데이터 처리 작업을 효율적으로 수행할 수 있도록 도와줍니다. 이를 통해 개발자는 반복적인 작업을 간단하게 처리할 수 있으며, 코드를 보다 간결하게 작성할 수 있습니다. 1. OBJECT BLOCK의 정의 OBJECT BLOCK은 특정 표현식을 포함하는 블록 객체를 생성하는데, 이 블록 객체는 Array의 각 요소를 순회하며 해당 표현식을 평가합니다. 이를 통해 데이터의 변형, 필터링 또는 특정 조건에 따라 다른 값을 생성하는 등의 작업을 간단하게 수행할 수 있습니다. 구문: Expression: 이 표현식은 Array의 각 요소에 대해 수행할 작업을 정의합니다. 예를 들어, Array의 각 요소에 대해 특정 필드를 추출하거나, 연산을 수행할 수 있습니다. !EvalIndex 변수는 현재 Array 요소의 인덱스를 참조할 수 있으며, 이를 통해 Array 내에서 요소를 순회하면서 해당 요소에 접근할 수 있습니다. 2. 사용 방법 OBJECT BLOCK은 EVALUATE 메서드와 함께 사용되어 Array의 각 요소에 대해 블록 객체를 평가하고, 이를 통해 새 Array를 생성합니다. 이 과정은 Array 내의 데이터를 변환하거나 필터링하는 데 유용합니다. 구문: EVALUATE 메서드: EVALUATE() 메서드는 Array의 각 요소에 대해 블록 객체를 평가하고, 평가된 결과를 포함하는 새 Array를 반환합니다. 이 방법은 대규모 데이터셋을 처리할 때 특히 유용하며, 데이터의 재구조화 또는 조건부 필터링 등을 수행할 수 있습니다. 3. 예제 예제 1: 참조 목록에서 이름을 추출 예제 2: 특정 영역의 이름 추출 예제 3: Array 요소에 대한 수치 연산 예제 4: 문자열 Array 처리
Bito
Pml Basic 8 - Object Table()
** GPTS로 학습시킨후 뽑아낸 글입니다 어색만 부분이나 있을수 있습니다 오류 있으면 댓글 달아주세요 추후 수정 예정입니다.** OBJECT TABLE은 PML에서 데이터의 집합을 표 형식으로 표현하는 데 사용되는 객체입니다. 이 TABLE은 특정 컬렉션(데이터베이스 참조의 Array)과 컬럼을 정의하는 COLUMN ARRAY로 구성됩니다. OBJECT TABLE과 OBJECT COLUMN을 사용하면 데이터의 조직화와 구조화를 쉽게 관리할 수 있습니다. 1. OBJECT TABLE의 구조 OBJECT TABLE은 기본적으로 두 가지 주요 요소로 구성됩니다: COLLECTION: TABLE에 포함될 데이터를 참조하는 dbref 타입의 Array입니다. 이 Array는 특정 조건에 맞는 데이터베이스 요소들을 수집하여 생성됩니다. COLUMN ARRAY: TABLE에 포함된 각 컬럼을 정의하는 OBJECT COLUMN들의 Array입니다. 각 COLUMN은 해당 컬럼에 대한 데이터를 표현하는 표현식과 추가적인 속성을 포함합니다. 구문: 2. OBJECT COLUMN의 정의 OBJECT COLUMN은 TABLE의 각 컬럼을 정의하는 객체로, 표현식, 정렬 가능 여부, 그룹화 가능 여부, 컬럼 제목 등의 속성을 포함합니다. EXPRESSION: 이 표현식은 각 컬럼의 데이터를 결정합니다. 예를 들어, 특정 dbref의 이름이나 타입을 추출하는 표현식을 사용할 수 있습니다. BOOLEAN (정렬 가능 여부): 이 컬럼이 정렬 가능한지 여부를 나타냅니다. BOOLEAN (그룹화 가능 여부): 이 컬럼이 그룹화 가능한지 여부를 나타냅니다. STRING (컬럼 제목): 이 컬럼의 제목을 나타내는 문자열입니다. 구문: 3. OBJECT TABLE 및 OBJECT COLUMN을 사용한 예제 아래는 OBJECT TABLE과 OBJECT COLUMN을 사용하는 예제입니다. 예제 1: 간단한 테이블 생성 이 예제에서는 'PIPE'라는 타입을 가진 모든 요소를 수집하고, 그 요소들의 SITE, ZONE, NAME을 각 컬럼에 표현하는 테이블을 생성합니다. 4. OBJECT TABLE 메서드 OBJECT TABLE에는 다양한 메서드가 존재하며, 이를 통해 테이블의 데이터에 접근하거나 조작할 수 있습니다. PrimaryKey()
Bito
Pml Basic 7 - Object FILE()
** GPTS로 학습시킨후 뽑아낸 글입니다 오류있으면 댓글 달아주세요 추후 수정 예정입니다.** OBJECT FILE의 개념과 사용 방법에 대한 자세한 설명 OBJECT FILE은 PML에서 FILE들을 다룰떄 사용합니다. 1. OBJECT FILE의 정의 OBJECT FILE은 파일 작업을 수행하기 위해 PML에서 제공하는 객체입니다. 이 객체를 사용하여 파일을 열고, 읽고, 쓰고, 닫는 작업을 할 수 있습니다. 파일 작업은 주로 보고서를 생성하거나, 데이터를 외부로 저장하거나, 외부 데이터를 시스템으로 가져올 때 사용됩니다. 구문: 이 구문을 통해 OBJECT Object File를 생성할 수 있습니다. 생성된 !Object File를 사용하여 파일 작업을 수행할 수 있습니다. 2. Object File의 생성 Object File를 생성하려면 다음과 같이 파일 경로를 지정하여 객체를 생성합니다. 구문: 이 구문을 통해 !MyFile이라는 Object File를 생성하여, 이후 파일 작업을 수행할 준비를 합니다. 3. 파일 열기 및 닫기 파일 작업을 수행하기 전에 파일을 열어야 하며, 작업이 끝난 후에는 파일을 닫아야 합니다. 파일 열기: Open() 메서드는 파일을 지정된 모드로 엽니다. 모드에는 'READ', 'WRITE', 'OVERWRITE', 'APPEND' 등이 있습니다. 파일 닫기: Close() 메서드는 열려 있는 파일을 닫습니다. 4. 파일에서 데이터 읽기