2013년 6월 24일 월요일

tekla template

문자열 제어

"(CAMBER은 ="+  중간 ( GetValue를 ( "MAINPART.FINISH"), 발견 ( GetValue를 ( "MAINPART.FINISH") GetFieldFormula - 1, 2) ( "ValueField_1")) + ")"

ValueField_1의 값은 "("
"("을 직접 대입했을 경우 구문 오류를 일으켜서 따로 vlauefield로 설정 후 대입해서 원하는 결과를 얻을수 있었다.

행 조건은
경우 ( 발견 ( GetValue를 ( "MAINPART.FINISH"), GetFieldFormula ( "ValueField_1")) ! = "-1")를 다음
  출력 ()
그렇지 않으면
  스텝 오버 ()
ENDIF

가 값을 차지 못하면 -1을 반환하는 듯해서 찾을 수 있습니다.


조립 위치 중 "P"글자의 위치를​​ 알아 네고 0 위치부터 P의 앞에 앞에까지만 출력
숫자 인 뎃스주의.
미드 ( GetValue를 ( "ASSEMBLY_POSITION_CODE"), "0" 찾을 ( GetValue를 ) ( "ASSEMBLY_POSITION_CODE"), "P"-1)

PL4.5 * 200.5 * 1000 일 경우 PL4.5는 규격 (철판 두께)이므로 그데로 두면서 폭 200.5 만
소수점을 잘라야한다면.

mid(GetValue("PROFILE"),0,find(GetValue("PROFILE"),"*"))+mid(mid(GetValue("PROFILE"),find(GetValue("PROFILE"),"*"),length(GetValue("PROFILE"))),0,find(mid(GetValue("PROFILE"),find(GetValue("PROFILE"),"*"),length(GetValue("PROFILE"))),"."))

만약 중첩

if (a ==의 b) then
   와 B 형는 같다.
else
   if(== ℃) then
      와 C는 같다.
   else
      if  (== d를)  then
         와 D는 같다.
      else
        if  (== f를)  then
            와 F는 같다.
         else
            if  (==를 들면)  then
               와 H는는 같다.
           else
              와 같은 것은 없다.
           endif
         endif
      endif
   endif
endif

별도의 문법은없고 (다른 안됨 안됨, SWICH는 경우) 그냥 겹쳐서 쓴다.


ISSET ()

/ /  속성이 값을 가지고 있는지를 확인
/ / "USERDEFINED.comment"속성의 값이 있다면 행 출력
만약  ( ISSET ( "USERDEFINED.comment"))  다음
   출력 ()
그렇지 않으면
   스텝 오버 ()
ENDIF 

날짜 형식

날짜 형식을 바꾸는 것은 아니고 문자열을 바꾸는 것

http://teklastructures.support.tekla.com/190/en/rep_defining_own_date_format


P / P (포인트 간 거리)

부재의 시작점과 끝점 사이의 거리를 얻을수있다.  SQRT (
sqsum (
( GetValue를 ( "ASSEMBLY.MAINPART.END_X")
-GetValue를 ( "ASSEMBLY.MAINPART.START_X"))
( GetValue를 ( "ASSEMBLY.MAINPART.END_Y")
-GetValue를 ( "ASSEMBLY.MAINPART.START_Y")) 
( GetValue를 ( "ASSEMBLY.MAINPART.END_Z")
- GetValue를 ( "ASSEMBLY.MAINPART.START_Z")) 
)
)

출처는 T & P

리포트 작성 후 리포트 내용을 클릭 (선택)했을 때 모델이 하이라이트

리포트 작성시 "ID :"+ GetValue를 ( "ID") 를 행에 넣어 주면된다. 

auto Lisp

오토 리습 객체 관련 함수


캐드 화면상에서 객체 선택을 요청하고 선택한 객체의 정보 (DXF 코드)를 커멘드 창에 출력한다.
( entget ( ssname ( ssget ) 0))

자동 리스프 중 빈번히 쓰이면서 유용한 함수들을 포함하는 예제 다.
선택한 객체의 DXF 코드 중 62 번의 값을 3으로 변경하는 함수 (색 변경)
( defun는의 colorchange ()
  ( setq sset ( ssget ))
  ( setq N 0)
  ( 반복 ( sslength의 sset)
  ( setq SNAME ( ssname의 sset의 N))
  ( setq의 ENT ( entget의 SNAME))
  ( entmod ( SUBST ( 죄수 62 3) ( ASSOC 62 ENT) ENT))
( setq의 N ( 1 + N))
)
  ( 공주 역 )
  )

ssget

(setq 선택 세트 (ssget))
선택을 요청한 후 저장

(선택 세트를 setq (ssget "P"))
전에 만들어진 선택을 설정 저장

(선택 세트를 setq (ssget "L"))
마지막으로 작성된 객체를에 설정 저장

(선택 세트를 setq (ssget "W"pointlist1의 pointlist2))
선택 윈도우

(선택 세트를 setq (ssget "F"pointlist1의 pointlist2))
팬스

(선택 세트를 setq (ssget "WP"pointlist1의 pointlist2))
다각형

(setq 선택 세트 (ssget "X"))
모든

(setq 선택 세트 (ssget "I"))
pickfirst 값이 활성 (1) 일 경우 해당 선택 후 명령


ssget 필터

(선택 세트 setq (ssget '((0. "텍스트"))))
유저에 선택을 요청하며 텍스트 만 선택 할수 있음

(선택 세트 setq (ssget "P" '((0. "선"))))
에서 라인을 설정 이전 만

(선택 세트 setq (ssget "W"PT1의 PT2 '((8. "floor9"))))
포인트리스트 윈도우 선택 층 "floor9"

(선택 세트를 setq (ssget "X" '((0. "원"))))
도면에있는 모든 원 선택

(선택 세트를 setq (ssget "I" '((0. "라인") (62. 5))))
선택된 객체 중 색상이 5 (파랑) 값을 가지는 라인


ssget 관계 연산자 (관계 연산)

(ssget "X" '((0. "원") (-4. "> =") (40. 2)))
정수, 실수, 포인트, 백터 (?)의 경우 관계 연산이가는하다.


ssget 논리 연산

(ssget "X" '((-4. "<OR")
                       (-4. "<AND") (0. "ciecle") (40. 1) (-4. "AND>")
                  (-4. "OR>")))

(setq <또는 '(-4. "<OR") or>'(-4."OR> "))
(ssget "X"(목록 '(0. "원") <or는 최고 기간 도중 '(40. 30) '(40. 90) or>))
필터리스트 표현주의


nentsel???
(setq 응답 
 (+; 추가
 (* (자동차 (n 번째 0 매트릭스)) (CADR의 edata)), M00 * X
 (* (자동차 (n 번째 1 매트릭스)) (caddr의 edata)), M10 * Y
 (* (자동차 (n 번째 2 매트릭스)) (cadddr의 edata)), M20 * Z
 (차 (n 번째 3 행렬)); M30
 )
)


도를 라디안으로 변환

(defun는 학위 -> 라디안 (numberOfDegrees) 
(* PI (/ numberOfDegrees 180.0)))

Converts dataType

(atof string) 문자열 -> 실수
(atoi string) 문자열 -> 정수
(itoa int)    정수 -> 문자열


Converts unit

(cvunit value from-unit to-unit)

Command: (cvunit 1 "minute" "second")
60.0
Command: (cvunit 1 "gallon" "furlong")
nil
Command: (cvunit 1.0 "inch" "cm")
2.54
Command: (cvunit 1.0 "acre" "sq yard")
4840.0
Command: (cvunit '(1.0 2.5) "ft" "in")
(12.0 30.0)
Command: (cvunit '(1 2 3) "ft" "in")
(12.0 24.0 36.0)

잘 안쓰는의 AutoLISP

(acad_colordlg colornum [flag] )
color선택 대화상자를 띄운다.
선택색상의 번호 리턴
colornum = 창이열렸을떼 기본값
flag = nil 일경우 byBlock, byLayer비할성화

 




(acad_strlsort list) 
알파벳순으로 정렬

 



(grdraw from to color [highlight])
두점을 연결하는 백터를 그린다.
라인이아님. 



(grvecs vlist [trans]) 
grdraw와 비슷.





2013년 6월 23일 일요일

visual lisp

autocad에는 autoLisp을 개발하는데 유용한 에디터를 제공한다.
command창에 vlide혹은 vlisp를 치면 visual lisp에디터가 실행된다.

visual lisp은 세로운 언어가 아니라 autoLisp에서 cad의 객체를 다루는 함수가추가되

일종의 라이브러리라고 봐도 될까 싶다.

다음은 auto Lisp과 visual Lisp이 잘정리 되어있는 사이트다.

AfraLISP
찌릭의 네이버 블로그

AfraLISP의 내용을 옮긴다.

visual lisp 을 쓰기위해선 함수를 로드해야하는것같다.
(vl-load-com)

cad 어플리캐이션오브젝트를 가져온다.
(setq acadObject(vlax-get-acad-object))

cad오브젝트에서 Perferences(환경설정)속성을 가저온다.
(setq prefsObject(vlax-get-property acadObject 'Preferences))

환경설정에서 파일속성을 가져온다.
(setq tabnameObject(vlax-get-property prefsObject 'Files))

작업지원경로(SupportPath)를 가져온다.
(setq thePath(vlax-get-property tabnameObject 'SupportPath))

작업지원경로문자열에 temp경로를 추가한다.
- strcat은 문자열 인수들을 합쳐서 하나의 문자열로 만든다.
(setq thePath(strcat thePath ";" "c:\\TEMP"))

작업지원 경로를 추가한다.
(vlax-put-property tabnameObject 'SupportPath thePath)


vla는 기존의 entity를다룰경우
vlax는 object를 다룰 경우인것 같다.(아마도)
함수이름은 대부분 내용을 알수있을 법하게 직관적으로 작성되어있다.그나마 외우는부담이 좀 적다만...

visual Lisp가 auto Lisp보다 우월하거나 한것이 아니다.
서로 상충되며 각각의 쓰임에 맞게 쓸수있도록 해야겟다.