이번 기사에서는 도형명 함수에 대해 해설합니다.
갑작스럽지만, CAD의 사용으로 이런 고민을 가지고 있지 않을까요.
그럴 때는 도형명 함수를 활용합시다!
도형의 이동이나 삭제, 사이즈의 변경 등 도형에 관한 수고로 귀찮은 작업을 자동화할 수 있습니다. AutoCAD의 작업을 효율화하고 편해지고 싶은 분은 꼭 봐 주세요.
도형명 함수는 도형명을 취득하거나 도형명을 이용해 도형을 조작하는 함수입니다. 레이블에 할당 된 도면에 각각의 모양, 그리고 이 호출되는 형상 이름을 .
후술하는 entget에서는 도형명으로부터 도형 정의 데이터를 취득할 수 있습니다. 도형에 대해 섬세한 조작을 할 수 있으므로 매우 편리합니다.
도형 정의 데이터란 간단히 말하면 도형을 정의하는 데이터 입니다. 도면층, 선종류, 좌표 등 도형을 정의하는 데 필요한 파라미터가 대응하는 그룹 코드와 세트로 되어 있습니다.
또, 파라미터의 재기입에 의해 도형을 조작하는 것이 가능합니다.
설명을 위해 요소를 일부 생략하고 있지만, 도형 정의 데이터는 다음과 같은 리스트로 표현됩니다.
((-1 . 도형명) (0 . "CIRCLE") (10 . 100.0 150.0 0.0))
각 요소의 왼쪽에 있는 숫자(-1, 0, 10)는 그룹 코드 이고 오른쪽은 매개변수를 나타냅니다. 그룹 코드는 각 파라미터에 할당된 숫자 입니다. 예를 들면 도형종이라면 "0", 좌표라면 "10" 등 다수 존재합니다.
미리 할당된 그룹 코드에 대한 설명은 다음과 같습니다.
그룹 코드 | 설명 |
-5 | APP: 불변 리액터 체인 |
-4 | APP : 조건 연산자 (반드시 ssget 과 함께 사용) |
-3 | APP : 확장 데이터 (XDATA) 표시 (고정) |
-2 | APP: 도형명 참조(고정) |
-1 | APP: 도형명 도형명은 도면을 열 때마다 바뀝니다. 저장되지 않음 (고정) |
0 | 도형 유형을 나타내는 텍스트 문자열 (고정) |
1 | 도형에 대한 주요 텍스트 값 |
2 | 이름 (속성 이름, 블록 이름 등) |
3-4 | 기타 텍스트 및 이름 값 |
5 | 도형 핸들, 최대 16 자리 16 진수 텍스트 문자열 (고정) |
6 | 선종명(고정) |
7 | 문자 스타일 이름 (고정) |
8 | 도면층 이름(고정) |
9 | DXF : 변수 이름 식별자 (DXF 파일의 HEADER 섹션에서만 사용됨) |
10 | 주요 포인트. 선 또는 문자 도형의 시작점, 원의 중심 등. DXF : 주요 점의 X 값 (이후 Y 및 Z 값 코드 20 및 30이옵니다) APP : 3D 점 (3 개의 실수 목록) |
11-18 | 기타 포인트 DXF : 다른 점의 X 값 (이후에는 Y 값의 코드 21-28 및 Z 값의 코드 31-38이옵니다). APP : 3D 점 (3 개의 실수 목록) |
20, 30 | DXF: 주요 점의 Y 및 Z 값 |
21-28, 31-37 | DXF: 다른 점의 Y 및 Z 값 |
38 | DXF: 도형의 고도(0이 아닌 경우) |
39 | 셰이프 두께 (0이 아닌 경우) (고정) |
40-48 | 배정도 부동 소수점 값(문자 높이, 척도 등) |
48 | 선종류 척도. 스칼라 배정도 부동 소수점 값. 기본값은 모든 도형 유형에 대해 정의됩니다. |
49 | 반복되는 배정밀도 부동 소수점 값. LTYPE [선종류] 테이블의 대시 길이와 같은 가변 길이 테이블의 경우 하나의 셰이프에 여러 그룹 49가 나타날 수 있습니다. 첫 번째 그룹 49 앞에는 항상 테이블 길이를 나타내는 그룹 7 x 가 나타납니다. |
50-58 | 각도 (DXF 파일의 경우 각도, AutoLISP 및 ObjectARX 응용 프로그램의 경우 라디안으로 출력) |
60 | 도형의 가시성. 정수 값. 존재하지 않는 경우나 0(제로)의 경우는 가시, 1 은 불가시를 나타냅니다. |
62 | 색 번호(고정) |
66 | 후속 도형 플래그(고정) |
67 | 공간, 모델 공간 또는 종이 공간 (고정) |
68 | APP: 뷰포트가 켜져 있고 화면에 표시되지 않았는지 여부를 나타냅니다. 즉, 비활성인지 아니면 꺼져 있는지를 나타냅니다. |
69 | APP: 뷰포트 식별 번호 |
70-78 | 반복 수, 플래그 비트, 모드 등의 정수 값 |
90-99 | 32비트 정수 값 |
100 | 서브 클래스 데이터 마커(파생 클래스명이 캐릭터 라인으로서 부속). 다른 특정 클래스에서 파생된 모든 개체 클래스와 셰이프 클래스에 필요합니다. 하위 클래스 데이터 마커는 동일한 개체에 대한 상속 체인 내에서 서로 다른 클래스에 의해 정의된 데이터를 분리합니다. 또한 ObjectARX에서 파생된 각 명확한 특정 클래스에 대한 DXF 이름이 필요합니다( 서브클래스 마커 참조). |
102 | 제어 문자열에서 "{<임의의 이름>" 또는 "}"가 뒤에옵니다. 확장 데이터 그룹 코드 1002와 비슷하지만 문자열이 "{"로 시작하면 응용 프로그램에서 해석되는 모든 문자열을 계속할 수 있습니다. 그 밖에 허용되는 유일한 제어 문자는 "}"로, 그룹의 종단을 나타냅니다. AutoCAD는 도면 감사를 제외하고는 이러한 문자열을 해석하지 않습니다. 이러한 문자열은 응용 프로그램에서 사용됩니다. |
105 | DIMVAR 기호 테이블 항목의 객체 핸들 |
110 | UCS 원점 (코드 72가 1 인 경우에만 나타납니다) DXF: X 값, APP: 3D 점 |
111 | UCS의 X 축 (코드 72가 1 인 경우에만 나타납니다) DXF: X 값, APP: 3D 벡터 |
112 | UCS Y 축 (코드 72가 1 인 경우에만 나타납니다) DXF: X 값, APP: 3D 벡터 |
120-122 | DXF : UCS 원점, UCS X 축, UCS Y 축 Y 값 |
130-132 | DXF : UCS 원점, UCS X 축, UCS Y 축 Z 값 |
140-149 | 배정도 부동 소수점 값 (예 : 점, 고도, 치수 스타일에 대한 다양한 설정) |
170-179 | 16 비트 정수 값 (예 : DIMSYTLE 설정을 나타내는 플래그 비트) |
210 | 압출 방향(고정) DXF: 돌출 방향의 X 값 APP: 3D 돌출 방향 벡터 |
220, 230 | DXF: 돌출 방향의 Y 및 Z 값 |
270-279 | 16비트 정수 값 |
280-289 | 16비트 정수 값 |
290-299 | 진위 플래그 값 |
300-309 | 모든 텍스트 문자열 |
310-319 | 모든 바이너리 청크. 그룹 코드 1004와 동일한 표현 형식 및 제한. 최대 127바이트의 데이터 청크를 나타내는 최대 254자의 16진수 문자열입니다. |
320-329 | 모든 객체 핸들. "있는 그대로" 얻은 핸들 값. INSERT [블록 삽입] 및 XREF [외부 참조] 명령 조작으로 변환되지 않습니다. |
330-339 | 소프트 포인터 핸들. 동일한 DXF 파일 또는 도면의 다른 객체에 대한 임의의 소프트 포인터. INSERT [블록 삽입] 및 XREF [외부 참조] 명령 조작으로 변환됩니다. |
340-349 | 하드 포인터 핸들. 동일한 DXF 파일 또는 도면의 다른 개체에 대한 모든 하드 포인터. INSERT [블록 삽입] 및 XREF [외부 참조] 명령 조작으로 변환됩니다. |
350-359 | 소프트 소유자 핸들. 동일한 DXF 파일 또는 도면의 다른 개체에 대한 모든 소프트 소유권 링크. INSERT [블록 삽입] 및 XREF [외부 참조] 명령 조작으로 변환됩니다. |
360-369 | 하드 소유자 핸들. 동일한 DXF 파일 또는 도면의 다른 개체에 대한 모든 하드 소유권 링크. INSERT [블록 삽입] 및 XREF [외부 참조] 명령 조작으로 변환됩니다. |
370-379 | 선 두께의 열거값(AcDb::LineWeight). 16비트 정수로 저장되어 전송됩니다. 사용자 지정 비 셰이프 개체는 전체 범위를 사용할 수 있지만 셰이프 클래스는 표현에 DXF 그룹 코드 371-379 만 사용합니다. 이는 AutoCAD와 AutoLISP가 모두 그룹 코드 370을 도형의 선 두께로 간주하기 때문입니다. 이렇게 하면 370을 사용하여 다른 "공통" 셰이프 필드처럼 작동할 수 있습니다. |
380-389 | 인쇄 스타일명의 타입의 열거 (AcDb::PlotStyleNameType). 16비트 정수로 저장되어 전송됩니다. 사용자 지정 비 셰이프 개체는 전체 범위를 사용할 수 있지만 위의 선 두께 범위와 동일한 이유로 셰이프 클래스는 해당 표현에 DXF 그룹 코드 381-389 만 사용합니다. |
390-399 | 인쇄 스타일 이름 개체의 핸들 값을 나타내는 문자열로, 기본적으로 하드 포인터이지만 하위 호환성을 해결하기 위해 다른 범위를 갖습니다. 오브젝트 ID(DXF의 핸들) 및 AutoLISP는 특수한 유형으로 저장되고 전송됩니다. 사용자 지정 비 셰이프 개체는 전체 범위를 사용할 수 있지만 위의 선 두께 범위와 동일한 이유로 셰이프 클래스는 해당 표현에 DXF 그룹 코드 391-399 만 사용합니다. |
400-409 | 16비트 정수 |
410-419 | 문자열 |
420-427 | 32비트 정수 값. True Color를 사용할 때 24비트 색상 값을 나타내는 32비트 정수입니다. 최상위 바이트(8비트)는 0, 최하위 바이트는 청색의 값(0 - 255)을 가지는 부호 없음의 문자, 다음에 녹색의 값으로, 상위 2위 바이트는 빨강의 값입니다. 이 정수 값을 16진수로 변환하면 다음 비트 마스크가 됩니다: 0x00RRGGBB. 예를 들어, 빨강==200, 녹색==100, 청==50의 true color는 0x00C86432로, DXF에서는 10진수로 13132850이 됩니다. |
430-437 | 문자열. True Color 에 사용하는 경우, 색의 이름을 나타내는 캐릭터 라인이 됩니다. |
440-447 | 32비트 정수 값. True Color에 사용하는 경우 투명 값 |
450-459 | 긴 정수 |
460-469 | 배정도 부동 소수점 값 |
470-479 | 문자열 |
480-481 | 하드 포인터 핸들. 동일한 DXF 파일 또는 도면의 다른 개체에 대한 모든 하드 포인터. INSERT [블록 삽입] 및 XREF [외부 참조] 명령 조작으로 변환됩니다. |
999 | DXF: 그룹 코드 999는 다음 줄이 주석 문자열임을 나타냅니다. SAVEAS [다른 이름으로 저장] 명령은 DXF 출력 파일에이 그룹을 삽입하지 않지만 OPEN [열기] 명령은 수락하고 주석으로 무시합니다. 그룹 999를 사용하여 사용자가 편집한 DXF 파일에 주석을 삽입할 수 있습니다. |
1000 | 확장 데이터의 ASCII 문자열 (최대 255 바이트 길이) |
1001 | 확장 데이터 등록 응용 프로그램 이름 (최대 31 바이트 길이의 ASCII 문자열) |
1002년 | 확장 데이터 제어 문자열(" { " 또는 " } ") |
1003년 | 확장 데이터의 레이어 이름 |
1004년 | 확장 데이터의 바이트 청크 (최대 127 바이트 길이) |
1005년 | 확장 데이터의 도형 핸들. 최대 16자리의 16진수 텍스트 문자열. |
1010 | 확장 데이터 포인트 DXF : X 값 (이후 그룹 1020 및 1030이옵니다) APP: 3D 포인트 |
1020, 1030 | DXF: 점의 Y 및 Z 값 |
1011 | 확장 데이터의 3D 월드 공간 위치 DXF : X 값 (이후 그룹 1021 및 1031이옵니다) APP: 3D 포인트 |
1021, 1031 | DXF: 3D 월드 공간 위치의 Y 및 Z 값 |
1012년 | 확장 데이터의 3D 월드 공간 변위 DXF : X 값 (이후 그룹 1022 및 1032가옵니다) APP: 3D 벡터 |
1022, 1032 | DXF: 3D 월드 공간 변위의 Y 및 Z 값 |
1013년 | 확장 데이터의 3D 월드 공간 방향 DXF : X 값 (이후 그룹 1022 및 1032가옵니다) APP: 3D 벡터 |
1023, 1033 | DXF: 3D 월드 공간 방향의 Y 및 Z 값 |
1040 | 확장 데이터의 배정도 부동 소수점 값 |
1041 | 확장 데이터의 거리 값 |
1042 | 확장 데이터의 척도 계수 |
1070 | 확장 데이터의 16비트 부호 있는 정수 |
1071 | 확장 데이터의 32비트 부호 있는 정수 |
그룹 코드와 파라미터는 닷으로 사이를 단락짓는 「닷 쌍」이라고 하는 특수한 리스트 형식이 되어 있습니다. 또한 점 쌍을 요소로 가진 목록을 연상 목록이라고합니다.
이번에 소개하는 도형명에 관한 함수는 다음의 6개입니다.
entsel은 사용자에게 도형 선택을 요청합니다. 그런 다음 선택한 도형에서 도형 이름을 가져오고 도형 이름과 선택한 좌표 목록을 반환합니다 .
도형명을 취득하고 싶은 도형을 도면상에서 선택하는 경우는 entsel 를 사용하는 것을 추천합니다. 도형 이름이 요소의 첫 번째이고 선택한 좌표가 두 번째이므로 car를 사용하여 도형 이름을 얻을 수 있습니다.
(entsel [문자열])
문자열사용자를 향한 메시지. 명령행에 표시할 수 있다. 선택 사항.
목록도형 이름과 선택한 좌표 목록입니다. 첫 번째 요소는 도형명, 두 번째가 선택한 좌표.
작성한 원의 도형명을 취득
(command "circle" (list 0 0) "D" 10)
(setq lst (entsel "원을 선택합니다."))
(setq figname (car lst))
작성한 원을 선택해 그 도형명을 취득하는 예입니다. entsel의 반환 값은 lst 변수에 저장됩니다. 그런 다음 car를 사용하여 변수 lst에서 셰이프 이름만 검색하여 변수 figname에 저장합니다.
entget은 셰이프 이름에서 셰이프 정의 데이터를 검색하는 함수입니다. 존재하지 않는 도형명의 경우는 nil 를 돌려줍니다.
내가 아는 한, 도형 정의 데이터의 연상리스트를 얻을 수 있는 것은 entget 뿐입니다. 취득한 연상 리스트가 없으면 도형 정의 데이터의 편집을 할 수 없기 때문에 사용 빈도가 높은 함수라고 할 수 있습니다.
(entget 도형명)
도형명도형 정의 데이터를 검색할 도형 이름.
연상 목록 / nil인수의 도형명을 포함한 도형 정의 데이터(연상 리스트)를 돌려준다.nil도형명이 존재하지 않는 경우는 nil를 돌려준다.
작성한 원의 도형 정의 데이터를 취득
(command "circle" (list 0 0) "D" 10)
(setq ent (entget (car (entsel "원을 선택합니다."))))
앞서 설명한 entsel과 car를 사용하여 도형명을 취득하고, 그 도형명으로부터 얻은 도형 정의 데이터를 변수 ent에 저장하는 예입니다.
도형명을 다른 변수에 격납하지 않고 그대로 entget의 인수로 하는 것으로, 프로그램을 1문에 정리할 수가 있습니다.
entnext는 지정된 도형 이름 다음에 만든 도형의 도형 이름을 반환하는 함수입니다. 인수를 생략하는 것도 가능해, 이 경우는 최초로 작성한 도형의 도형명을 돌려줍니다.
돌려주는 도형명이 도면에 존재하지 않는 경우는 nil 가 돌려주어집니다. 또한 인수가 nil이면 오류가 발생합니다.
(entnext [도형명])
도형명도면에 존재하는 도형의 도형명. nil을 지정하면 오류가 발생합니다. 선택 사항.
도형명 / nil지정된 도형명의 다음에 작성한 도형의 도형명이 돌려주어진다. 인수를 생략했을 경우는 도면상에서 최초로 작성한 도형의 도형명을 돌려준다.nil돌려주는 도형명이 존재하지 않는 경우의 반환값은 nil.
두 번째로 만든 도형 이름 얻기
(command "circle" (list 0 0) "D" 10)
(command "circle" (list 1 1) "D" 15)
(setq ss (ssget))
(entnext (ssname ss 0))
첫 번째로 만든 원의 도형 이름을 인수로 사용하여 두 번째로 만든 원의 도형 이름을 가져오는 예입니다. 도형을 선택하려면 ssget, 첫 번째 도형 이름을 얻기 위해 ssname을 사용합니다.
entlast는 마지막으로 만든 도형의 도형 이름을 얻는 함수입니다. 다른 함수와 달리 인수가 필요하지 않습니다. 도형을 작성한 직후에 도형 정의 데이터를 취득하고 싶을 때에 편리합니다.
(entlast)
인수 없음entlast는 인수를 사용하지 않는다.
도형명마지막으로 작성한 도형의 도형명을 돌려줍니다.
도면에서 마지막으로 작성한 도형의 도형 데이터를 취득
(command "circle" (list 0 0) "D" 10)
(command "circle" (list 1 1) "D" 15)
(setq ent (entget (entlast)))
마지막으로 작성한 원(두 번째로 작성한 원)의 도형 정의 데이터를 취득하는 예입니다. entlast와 entget로 얻은 도형 정의 데이터를 변수 ent에 저장합니다.
entmod는 기존 도형 정의 데이터를 새로운 도형 정의 데이터로 다시 쓰는 함수입니다. 도형 정의 데이터의 재기록이 가능하면, 획층 변경이나 좌표 이동 등 다양한 변경을 한 번에 실행하는 것이 가능 하게 됩니다.
(entmod 도형 정의 데이터)
도형 정의 데이터재기록 후의 도형 정의 데이터.
도형 정의 데이터 / nil재기록 된 도형 정의 데이터 (인수의 도형 정의 데이터)가 리턴된다.nil다시 쓰지 못하면 nil을 반환합니다.
만든 원의 중심 변경
(command "circle" (list 0 0) "D" 10)
(setq ent (entget (entlast)))
(setq new-ent (subst (cons 10 (list 5 5)) (assoc 10 ent) ent))
(entmod new-ent)
작성한 원의 도형 정의 데이터를 재기록하여 중심을 이동시키는 예입니다. 우선, entlast와 entget로 도형 정의 데이터를 취득합니다.
그런 다음 subst를 사용하여 중심 좌표를 (0,0)에서 (5,5)로 대체하고 새로운 도형 정의 데이터를 변수 new-ent에 저장합니다. 그런 다음 변수 new-ent로 entmod를 실행하여 원의 중심을 변경합니다.
entdel은 지정된 도형 이름의 도형을 삭제하는 함수입니다. 삭제된 셰이프 이름을 인수로 지정한 경우 셰이프를 복원할 수 있습니다.
삭제된 도형은 도면을 닫으면 완전히 제거되므로 도면을 닫은 후에는 도형을 복원할 수 없습니다.
(entdel 도형명)
도형명삭제 또는 복원할 도형의 도형 이름.
도형명인수의 도형명이 돌려주어진다.
마지막으로 만든 도형 삭제
(command "circle" (list 0 0) "D" 10)
(entdel (entlast))
작성한 원을 삭제하는 예입니다. entdel의 인수로 필요한 도형 이름은 entlast로 가져옵니다.
이번 정리
기능 | 구문 | 내용 |
entsel | (entsel [문자열]) | 도형 이름과 선택한 좌표 목록을 반환합니다. |
entget | (entget 도형명) | 도형 이름에서 도형 정의 데이터를 얻습니다. |
entnext | (entnext [도형명]) | 다음에 작성한 도형의 도형명을 돌려준다 |
entlast | (entlast) | 마지막으로 만든 도형의 도형 이름을 가져옵니다. |
entmod | (entmod 도형 정의 데이터) | 도형 정의 데이터 재작성 |
entdel | (entdel 도형명) | 도형 삭제 또는 복원 |
AutoLISP의 데이터 형식 변환 함수 (0) | 2021.12.25 |
---|---|
리스트의 요소를 취득하는 함수 nth, last, assoc (0) | 2021.12.25 |
AutoLISP 선택 세트 ssget (0) | 2021.12.24 |
지정된 횟수만큼 반복하는 함수 "repeat" (0) | 2021.12.24 |
AutoLISP의 변수 (0) | 2021.12.24 |
댓글 영역