2012년 4월 10일 화요일

입력함수







getpoint <pt> [prompt]
      이 함수는 하나의 점을 입력하도록 대기한다. 인수인 점 Pt는 현재의 UCS내의 2D 또는 3D 좌표이다. 출력좌표는 3D 점이다.
       (setq pt1 (getpoint) )
       (setq pt1 (getpoint "Pick a point : "))

인수 pt가 있으떤 고무밴드 라인을 표시한다.
    (setq pt2 (getpoint pt1 "Pick a point : "))
    (setq pt2 (getpoint'(3.0 5.5) "Pick a point : "))

Program

  MGETPT.LSP

  프로그램 기능
이 프로그램은 화면에 여러 개의 점을 적으며 모든 점에 대한 3D 좌표 list를 출력 시킨다.

  프로그램 LIST
      (defun c:MGETPT (/ point pl )
         ( whi le
                (setq point (getpoint "\n Pick point" ) )
                (setq pl (append pl (list point) ))
         )
        (princ "\n-- List of points --" )
        (terpri)
        (princ pl )
        ( princ )
     )
     ,,:
getreal [prompt]
      이 함수는 실수를 입력하도록 대기하고 그 실수를 출력한다
   (setq real (getreal ) )
   (setq real (getreal "Enter length of line : ") )

getstring [cr] [prompt]
      이 함수는 문자열을 입력하도록 대기하고 그 문자열을 출력한다.
   입력할 최대문자수는 132자이다. 이것을 초과하면 132자에서 문자열이 끊긴다. 문자열에 '\'를 입력하면 두 개의 "\\"로 변환되는데 이것이 출력되어 다른 함수가 사용할 file명 Path를 포함할 수도 있으므로 그렇게 된다.

    cr이 주어지고 그 값이 nil이면 문자열에 공백을 넣을 수 있다. (그래서 반드시 앤터로 끝나야 한다. ) 그렇지 않으면 입력 문자열은 스페이스바나 엔터에 의해 종료된다. 또한, 사용자가 입력할 키워드를 미리 정해 둘 경우에는 getkword함수를 써야 한다

      (setq str ("getstring "Type string : ")
      입력: AutoLISP --> "AutoLISP".

      (setq str (getstring T "Type string ")
      입력: AutoLISP( spacebar)PROGRAM --> "AutoLISP PROGRAM"

          (위에서 T가 없으면 (spacebar)부분에서 입력이 종료되어 버린다. )

      (setq str (getstring "Enter file name to load : ")
      입력 :\ACAD12\PRJT05\TPIPE --> "\\ACAD12\\PRJT05\\TPIPE"


getdist [pt] [Prompt]
      이 함수는 길이를 입력하도록 대기하고 입력한 길이 또는 두 점간의 길이를 계산하여 출력한다. 점 Pt가 주어지면 화면에 고무밴드 라인이 나타나며, pt는 현재의 UCS내의 2D 또는 3D 점이다.
      init함수에 64비트를 설정하면 z좌표값은 무시되고 20거리를 출력할 수 있다.

     (setq dist (getdist) ) "
     (setq dist (getdist pt1 ) )"
     (setq dist (getdist "Pick or Enter distance : "))"
     (setq dist (getdist pt1 "Pick endpoint : ") )"

getcorner <pt> [prompt]
      getpoint처럼 한 점을 출력하는 것은 같으나 다른 점은 다음과 같다.
        1. 인수 Pt가 있어야 한다.
       2. Pt점에서부터 사각형 틀이 표시된다.

getorient [pt] [prompt]
      이 함수는 getangle파 같은 기능을 한다.
다만 다음 사항이 다르다.
    1. 출력되는 각도가 시스템변수 ANGBASE(0도 지점)와 ANGDIR(각도증가 방향)의 영향을 받지 않는다.
    2. ANGBASE와 ANGDIR의 값이 어떻든지 getorient는 항상 radian 0도 지점을 오른쪽(동쪽,3시방향)에 두고 각도 증가는 시계반대 방향으로 각도를 잰다. (AutoCAD 사용자는 UNITS명령으로 일반적으로 이와 같이 설정해 놓고 있다. ) 입력 각도와 getorient로 출력되는 각도는 서로 다르다
    3. getorient에 의해 각도를 입력할 때는 ANGBASE와 ANGDIR의 현재 값을 기준으로 한다.
     4, 그러나 일단 입력된 각도는 ANGBASE와 ANGDIR의 현재 값을 무시하고 위의 2번항과 같이 잰다

그래서 사용자가 UNITS명령이나 시스템변수 ANGBASE와 ANGDIR을 사용해서 0도지점과 각도 증가 방향을 바꾸면 약간의 변환 과정을 거쳐야 한다.
절대각도인 entity가 진행할 방향각을 구하기 위해서는 getangle을 사용하는 반면 상대각도인 rotate각도를 입력할 때는 getorient를 사용해야 한다.

getkword [prompt]
      사용자가 키워드를 입력하도록 대기하며, 키워드 리스트는 getkword를 호출하기 전에 initget함수를 사용하여 설정해 놓아야 한다. 이 함수는 사용자가 입력한 문자열에 부합되는 키워드를 출력한다. 키워드에 없는 문자열은 무시되며 null입력이 허용되면 null은 nil로 출력된다. 키워드가 전혀 설정되어 있지 않으면 nil이 출력된다.
       ( initget 1 "YES NO")
       (setq ans (getkword "Answer (YES/NO) : ") )

initget [bits] [string]
      이 함수는 다른 함수가 사용할 여러 가지의 option을 사전에 설정해 주고 항상 nil을 출력한다. initget을 사용하는 함수는 다음과 같다.
        getxxx (단, getstring, getenv, getvar는 제외)
        entsel nentsel nentselp
  인수 bits는 정수로서 다음과 같다.

     INITGET함수 BIT코드표
-------------------------------------------------------------------------------
   bits            의미
-------------------------------------------------------------------------------
1               null입력을 허용치 않는다.
2               0인 값을 허용치 않는다.
4               음수 값을 허용치 않는다.
8               LIMCHECK가 ON상태에서도 설계 한계점을 검사하지 앉는다.
16             (현재 사용하지 않는다. )
32             고무밴드라인이나 박스를 dashed line 으로 표시 한다.
64             getdist에 한해 3D의 Z좌표를 무시한다.
128             임의 키보드입력을 허용한다.
 -------------------------------------------------------------------------------

getint [prompt]

   이 함수는 사용자의 정수 입력을 대기하고 그 정수를 출력한다.
정수범위는 -32,768 - 32,768이다.

Program

AUTONUM.LSP

프로그램 기능
   지정한 길이 내에 지정한 숫자들을 순서대로 배열한다

프로그램 LIST
    (defun c:AUTONUM (/ SNO ENO PT DIST ANG HGT NO STR)
             ( setq SNO (getint "\n>>> Starting number: " ) )
             (setq ENO (getint "\n>>> Ending number: " ) )
             ( setq PT (getpoint "\n>>> from point; " ) )
             ( setq DIST '(getdist PT "\n>>> Distance between numbers: "
             (setq ANG (getangle PT "\n>>> Angle for array/<0>: " ) )

           (if (: ANG nil) (setq ANG 0))
           (setq HGT (getdist PT "\n>>> Text height, " ) )
           (if (> SNO ENO)
                 (setq NO -1 )
                 (setq NO 1)

           )::if
           (repeat (+ 1 (abs (- SNO ENO)))
                 (setq STR ( itoa SNO) )
                 (command "text" "s" "standard" PT HGT ANG STR)
                 (setq SNO (+ SNO NO))
                 (setq PT (polar PT ANG DIST) )
           ) : : repeat
           ( princ )

프로그램 설명
    ( setq SNO (getint "\n>>> Starting number: " ) )
    (setq ENO (getint "\n>>> Ending number " ) )
계산을 위한 숫자가 아니므로 문자열로 입력받는다.

     (setq PT (getpoint "\n>>> from point: ") )
 점을 입력하면 그 점의 3차원 좌표(x,y,z)가 PT에 저장된다.
     ( setq DIST (getdist PT "\n>>> Distance between numbers: " ) )
getdist에 인수 PT를 붙이면 고무밴드 drag line이 나타난다.
     ( setq ANG (getangle PT "\n>>> Angle for array numbers<0>: " ) )
getangle에도 인수 PT를 붙이면 고무밴드 drag line이 나타난다.
     (if (: ANG nil) (setq ANG 0))
각도를 입력하지 않으면 즉 ENTER를 누르면 0도로 한다.
     (setq HGT (getdist PT "\n>>> Text height, " ) )
text의 높이 입력은 getdist를 사용한다.
     (if (> SNO ENO)
if조건 문으로서 시작 숫자가 종료 숫자보다 클 때,
( i f-then-el so )
           (setq NO -1 )
           (setq NO 1)
변수 NO를 -1로 설정하고 (then)
그렇지 않으면 변수 NO를 -1로 설정한다. (else)
     (repeat (+ 1 (abs (- SNO ENO)))
repeat반복문이 다.
반복 횟수는 두 개의 숫자를 뺀 숫자를 절대값으로 만든 후에 1을 더한 수가 된다.
           (setq STR ( itoa SNO) )
정수 SNO를 문자열로 변환시킨다.

           (command "text" "s" "standard" PT HGT ANG STR)
입력된 data와 계산한 결과로 text명령을 실행한다.
          (setq SNO (. SNO NO))
매 번 숫자가 증가되도록 한다.

           (setq PT (polar PT ANG DIST) )
PT를 재 정의하여 숫자의 위치가 매번 규칙적으로 변경되도록 한다.


Program
ANGDIS.LSP

프로그램 기능
   지정한 두 점간의 각도와 거리를 화면에 출력한다.

프로그램 LIST

(defun c:ANGDIS ( / pt1 pt2)
    (setq pt1 (getpoint "\nFirst point: " ) )
    (setq pt2 (getpoint "\nSecond point: ") )
    (setq ang (angle pt1 pt2) )
    (princ "\nAngle(degree) " )
    (princ (* (/ ang pi) 180.0))
    (setq dist (distance pt1 pt2) )
    (princ " Distance :")
    (princ dist )
    ( princ )
)


프로그램 설 명
         (setq pt1 (getpoint "\nFirst point: " ) )
         (setq pt2 (getpoint "\nSecond point: " ) )
점좌표값을 pt1 , pt2에 저장한다.

         (setq ang (angle pt1 pt2) )
pt1에서 pt2로 향한 radian각도를 재어 ang에 저장한다.

          (princ "Angle(degree) : " )
command line에 Angle이 표시된다.

         (princ (* (/ ang pi) 180.0))
radian각도를 degree단위로 변환시켜 화면에 나타낸다.

         (setq dist (distance pt1 pt2) )
두 점간의 거리를 재어 dist에 저장한다.

         (princ " Distance :")
         (princ dist)
거 리 를 표시 한다.



Program

MCIRCLE.LSP

프로그램 의 기능
   이 프로그램은 지정한 지름을 가진 원을 지정한 수량만큼 지정된 위치에 그린다

프로그램 리스트
    (defun C:MCIRCLE (/ NO DIA MUL CEN)
       (setq NO (getint "\n Number of circle: " ) )
       (setq DIA (getdist "\n Diameter of circle (pick or type) : "))
       (if (: DIA nil)
             (setq MUL MUL)
             (setq MUL DIA)
       )::if
       ( repeat NO
           (princ "\n Diameter of circle (pick or typel'")
           (princ MUL)
           (setq CEN (getpoint "\n Center-point of circle (pick or type) : "))
           (command ^Circle" CEN "d" MUL)
       ) : : repeat
    ): :defun
    ::;

프로그램 설 명
        (setq NO (getint "\n Number of circle: " ) )
그리고자 하는 원의 개수(NO)를 정수로 입력받는다. (get integer)
       (setq DIA (getdist ")sn Diameter of circle (pick or type) : "))
원의 지름을 입력 대기한다. (get distance)
       (if (: DIA nil)
             ( setq MUL MUL)

             (setq MUL DIA)
원을 두 개째 그릴 때는 이미 입력한 DIA를 사용한다.
       ( repeat NO
다음 과정을 개수 NO만큼 반복 수행(repeat)한다.
            (princ "\n Diameter of circle (pick or type) : ")
            (princ MUL)
지름의 현재 값을 출력한다. 프로그램이 가지고 있는 MUL을 내놓는다.
이 MVL을 NO횟수만큼 내놓아서 연속해서 원을 그릴 수 있도록 해준다.
    (setq CEN (getpoint "\n Center-point of circle (pick or type) :

                                                                                    "))
원의 중심점을 입력 대기한다.

            (command ^Circle" CEN "d" MUL)


AUTOCAD의 circle명령으로 NO횟수만큼 원을 그릴 수 있다.


Program

PBOX.LSP

프로그램의 기능
   이 프로그램은 pline으로 box를 그린다.

프로그램 리스트
    (defun DTR (a)
          (* pi (/ a 180.0))
    )
    l inriiipnnii#ifiiiiuuiiiinHiilitnpfiriiHniu

    (defun C: PBOX (/ pt1 p xlen ylen)
       (setq pt1 (getpoint "\n Start point of Pline box: ") )
       (setq xlen (getdist pt1 "\n x-length of Pbox (Pick or Type) : '
       (setq ylen (getdist pt1 "\n y-length of Pbox (Pick or Type) : '
       (setq pt2 (polar pt1 0 xlen) )
       (setq ptS (polar pt2 (dtr 90) ylen) )
       (setq pt4 (polar ptS (dtr 180) xlen)
      (command "pl me" pt1 pt2 pt3 pt4 ^Close")
      (command "rotate" "1· ". pt1) : 1=last
      ( terpri )
      ( princ "\n‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥ )
      (princ "\n x-length of Pbox : ")
      (princ xlen)
      (princ "\n y-length of Pbox : ")
      (princ ylen)
      (princ )
   )
   :::

프로그램 설명
    (defun DTR (a)
           (* pi (/ a 180,0))
    )

degree각도를 radlian으로 변환시키는 프로그램이다.
        (setq pt1 (getpoint "\n Start point of Pline box: ") )
점을 pick하면 pt1에는 좌표값이 저장된다.
        (setq xlen (getdist pt1 "\n x-length of Pbox (Pick or Type): ") )
        (setq ylen (getdist pt1 "\n y-length of Pbox (Pick or Type): "))
getdist 다음에 좌표값을 가진 pt1을 두면 화면에 고무밴드 drag line이 나타난다.
         (setq pt2 (polar pt1 0 xlen))
         (setq ptS (polar pt2 (dtr 90) ylen) )
         (setq pt4 (polar pt3 (dtr 180) xlen)
Polar함수가 출발점 -> 각도방향 릇 거리에 있는 점좌표를 구하여 각 변수에 저장한다.

            (command "pl me" pt1 pt2 pt3 pt4 ^Close" )
각 점좌표를 따라 pline으로 box를 그린다.

             (command "rotate" "1· ". pt1) : 1=last
그린 box를 rotate할 수 있도록 한다.
            ( terpri )
            ( princ "\n‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥ )

            (princ "\n x-length of Pbox : ")
            (princ xlen)
            (princ "\n y-length of Pbox : ")
            (princ ylen)
입력한 길이 값을 화면에 나타낸다.

출처

http://amadis.selfip.com:8080/tc/amadis/category/autolisp-1?page=2

댓글 없음 :

댓글 쓰기