AutoCAD
Advertisement
;|

These enhanced input functions prompt for user input
External dependencies:
WIKI-3PTTOBULGE
WIKI-SEGMENT-LENGTH

|;
(DEFUN
   WIKI-GETANGLEX (GX-STARTINGPOINT GX-PROMPT GX-DEFAULTVALUE
                   GX-INITIALVALUE / GX-INPUT
                  )
  (SETQ
    GX-DEFAULTVALUE
     (COND
       (GX-DEFAULTVALUE)
       (GX-INITIALVALUE)
       (0.0)
     )
  )
  (COND
    ((AND
       GX-STARTINGPOINT
       (SETQ
         GX-INPUT
          (GETANGLE
            GX-STARTINGPOINT
            (STRCAT
              "\n"
              GX-PROMPT
              " <"
              (ANGTOS GX-DEFAULTVALUE)
              ">: "
            )
          )
       )
     )
     GX-INPUT
    )
    ((AND
       (NOT GX-STARTINGPOINT)
       (SETQ
         GX-INPUT
          (GETANGLE
            (STRCAT
              "\n"
              GX-PROMPT
              " <"
              (ANGTOS GX-DEFAULTVALUE)
              ">: "
            )
          )
       )
     )
     GX-INPUT
    )
    (GX-DEFAULTVALUE)
  )
)

;;;WIKI-GETDISTX
;;;Returns a distance
(DEFUN WIKI-GETDISTX (GX-POINT1 GX-PROMPT GX-DEFAULTVALUE GX-INITIALVALUE)
  (CAR (WIKI-GETDISTPOINT GX-POINT1 GX-PROMPT GX-DEFAULTVALUE GX-INITIALVALUE))
)
;;;WIKI-GETDISTPOINT
;;;Returns a distance, the endpoint of the distance, and the bulge used for the distance.
;;;'(distance endpoint bulge)
(DEFUN
   WIKI-GETDISTPOINT (GX-POINT1 GX-PROMPT GX-DEFAULTVALUE
                      GX-INITIALVALUE / GX-POINT2 GX-POINT3 GX-BULGE
                      GX-DISTANCE
                     )
  (SETQ
    GX-DEFAULTVALUE
     (COND
       (GX-DEFAULTVALUE)
       (GX-INITIALVALUE)
     )
  )
  ;;If starting point wasn't provided, get it.
  (COND
    ((NOT GX-POINT1)
     (SETQ GX-POINT1 (GETPOINT "\nSpecify first point: "))
    )
  )
  ;;If there is now a starting point, get the second point or Arc keyword.
  (COND
    (GX-POINT1
     (INITGET "Arc")
     (SETQ
       GX-POINT2
        (GETPOINT
          GX-POINT1
          (STRCAT
            "\n"
            GX-PROMPT
            " [Arc]"
            (IF GX-DEFAULTVALUE
              (STRCAT " <" (RTOS GX-DEFAULTVALUE) ">")
              ""
            )
            ": "
          )
        )
     )
    )
  )
  (SETQ
    GX-DISTANCE
     (COND
       ;;If
       (  ;;point2 was not entered
          (NOT GX-POINT2)
        ;;then return the default value.
        GX-DEFAULTVALUE
       )
       ;;Else if point2 isn't "Arc"
       ((/= "Arc" GX-POINT2)
        ;;then return the distance between point1 and point2
        (DISTANCE GX-POINT1 GX-POINT2)
       )
       ;;Else enter arc mode.
       (T
        ;;Prompt for the second and third arc points
        (SETQ
          GX-POINT2
           (GETPOINT
             (STRCAT "\nSpecify point on arc: ")
           )
          GX-POINT3
           (GETPOINT
             (STRCAT "\nSpecify end point of arc: ")
           )
        )
        (COND
          ;;If the second and third arc point were provided, then
          ((AND GX-POINT2 GX-POINT3)
           ;;Return the length of the arc.
           (WIKI-SEGMENT-LENGTH
             GX-POINT1
             GX-POINT3
             (SETQ
               GX-BULGE
                (WIKI-3PTTOBULGE
                  (WIKI-FLATTEN GX-POINT1)
                  (WIKI-FLATTEN GX-POINT2)
                  (WIKI-FLATTEN GX-POINT3)
                )
             )
           )
          )
        )
       )
     )
  )
  (LIST
    GX-DISTANCE
    (COND
      (GX-POINT3)
      (GX-POINT2)
    )
    GX-BULGE
  )
)

;;WIKI-GETINTX
;;Provided for legacy compatability and user experience.
(DEFUN
   WIKI-GETINTX (GX-PROMPT GX-DEFAULTVALUE GX-INITIALVALUE)
  (WIKI-GETINTXX GX-PROMPT GX-DEFAULTVALUE GX-INITIALVALUE 0)
)
;;;WIKI-GETINTXX
;;;Extended (getint) with default value and drawing text selection
;;;Three modes:
;;;1. If a default or initial value is supplied, GETINTX prompts with it and allows user to enter Select from drawing text mode.
;;;2. If no default is supplied and MODE is 0, the first prompt is for standard input, with fallback to selecting value from drawing text.
;;;3. If no default is supplied and MODE is 1, the first prompt is for drawing text selection, with fallback to standard input.
;;;Returns an INT or nil if nothing provided.
(DEFUN
   WIKI-GETINTXX (GX-PROMPT GX-DEFAULTVALUE GX-INITIALVALUE
                  GX-PROMPTMODE / GX-RESPONSE
                 )
  ;;Log all calls to this function.
  (WIKI-LOG
    (STRCAT
      "WIKI-GETINTX GX-PROMPT="
      GX-PROMPT
      " GX-DEFAULT="
      (IF GX-DEFAULTVALUE
        (ITOA GX-DEFAULTVALUE)
        "nil"
      )
      " GX-INITIALVALUE="
      (IF GX-INITIALVALUE
        (ITOA GX-INITIALVALUE)
        "nil"
      )
    )
  )
  (SETQ
    GX-DEFAULTVALUE
     (COND
       (GX-DEFAULTVALUE)
       (GX-INITIALVALUE)
     )
  )
  ;;First prompt
  (COND
    ;;If a default value was supplied, prompt with it and allow user to enter Select from drawing text mode.
    (GX-DEFAULTVALUE
     (INITGET "Select")
     (SETQ
       GX-RESPONSE
        (GETINT
          (STRCAT
            "\n"
            GX-PROMPT
            " or [Select from drawing] <"
            (ITOA GX-DEFAULTVALUE)
            ">: "
          )
        )
     )
    )
    ;;Else if mode is 0, prompt for standard input
    ((= GX-PROMPTMODE 0)
     (SETQ
       GX-RESPONSE
        (GETINT
          (STRCAT
            "\n"
            GX-PROMPT
            " or <Select from drawing>: "
          )
        )
     )
    )
    ;;Else if mode is 1, prompt for object select
    ((= GX-PROMPTMODE 1)
     (SETQ
       GX-RESPONSE
        (NENTSEL
          (STRCAT
            "\nSelect object with "
            GX-PROMPT
            " or <enter manually>: "
          )
        )
     )
    )
  )
  ;;Second prompt if necessary
  (COND
    ;;If
    ((AND
       ;;no response
       (NOT GX-RESPONSE)
       ;;and there's a default value,
       GX-DEFAULTVALUE
     )
     ;;No second prompt
     NIL
    )
    ;;Else if
    ((OR (AND
           ;;no response
           (NOT GX-RESPONSE)
           ;;and mode is 0,
           (= GX-PROMPTMODE 0)
         )
         ;;or response was Select
         (= GX-RESPONSE "Select")
     )
     ;;Prompt for object select
     (SETQ
       GX-RESPONSE
        (NENTSEL
          (STRCAT "\nSelect object with " GX-PROMPT ": ")
        )
     )
    )
    ;;Else if
    ((AND
       ;; no response
       (NOT GX-RESPONSE)
       ;;and mode is 1,
       (= GX-PROMPTMODE 1)
     )
     ;;Prompt for standard input
     (SETQ GX-RESPONSE (GETINT (STRCAT "\n" GX-PROMPT ": ")))
    )
  )
  ;;Return the integer if provided
  (COND
    ;;If
    ((AND
       ;;there's a response
       GX-RESPONSE
       ;;and it's an integer,
       (= (TYPE GX-RESPONSE) 'INT)
     )
     ;;Then return it
     GX-RESPONSE
    )
    ;;Else if
    ((AND
       ;;there's a response
       GX-RESPONSE
       ;;and it's an entsel,
       (= (TYPE GX-RESPONSE) 'LIST)
     )
     ;;Then return it
     ;;Then convert it to an integer
     (ATOI
       (CADR
         (WIKI-EXTRACT (CDR (ASSOC 1 (ENTGET (CAR GX-RESPONSE)))))
       )
     )
    )
    ;;Else
    (T
     ;;Return the default
     GX-DEFAULTVALUE
    )
  )
)

;;WIKI-GETREALX
;;Provided for legacy compatability and user experience.
(DEFUN
   WIKI-GETREALX (GX-PROMPT GX-DEFAULTVALUE GX-INITIALVALUE)
  (WIKI-GETREALXX GX-PROMPT GX-DEFAULTVALUE GX-INITIALVALUE 0)
)
;;;WIKI-GETREALXX
;;;Extended (getreal) with default value and drawing text selection
;;;Three modes:
;;;1. If a default or initial value is supplied, GETREALX prompts with it and allows user to enter Select from drawing text mode.
;;;2. If no default is supplied and MODE is 0, the first prompt is for standard input, with fallback to selecting value from drawing text.
;;;3. If no default is supplied and MODE is 1, the first prompt is for drawing text selection, with fallback to standard input.
;;;Returns an REAL or nil if nothing provided.
(DEFUN
   WIKI-GETREALXX (GX-PROMPT GX-DEFAULTVALUE GX-INITIALVALUE
                   GX-PROMPTMODE / GX-RESPONSE
                  )
  ;;Log all calls to this function.
  (WIKI-LOG
    (STRCAT
      "WIKI-GETREALX GX-PROMPT="
      GX-PROMPT
      " GX-DEFAULT="
      (IF GX-DEFAULTVALUE
        (RTOS GX-DEFAULTVALUE 2)
        "nil"
      )
      " GX-INITIALVALUE="
      (IF GX-INITIALVALUE
        (RTOS GX-INITIALVALUE 2)
        "nil"
      )
    )
  )
  (SETQ
    GX-DEFAULTVALUE
     (COND
       (GX-DEFAULTVALUE)
       (GX-INITIALVALUE)
     )
  )
  ;;First prompt
  (COND
    ;;If a default value was supplied, prompt with it and allow user to enter Select from drawing text mode.
    (GX-DEFAULTVALUE
     (INITGET "Select")
     (SETQ
       GX-RESPONSE
        (GETREAL
          (STRCAT
            "\n"
            GX-PROMPT
            " or [Select from drawing] <"
            (RTOS GX-DEFAULTVALUE 2)
            ">: "
          )
        )
     )
    )
    ;;Else if mode is 0, prompt for standard input
    ((= GX-PROMPTMODE 0)
     (SETQ
       GX-RESPONSE
        (GETREAL
          (STRCAT
            "\n"
            GX-PROMPT
            " or <Select from drawing>: "
          )
        )
     )
    )
    ;;Else if mode is 1, prompt for object select
    ((= GX-PROMPTMODE 1)
     (SETQ
       GX-RESPONSE
        (NENTSEL
          (STRCAT
            "\nSelect object with "
            GX-PROMPT
            " or <enter manually>: "
          )
        )
     )
    )
  )
  ;;Second prompt if necessary
  (COND
    ;;If
    ((AND
       ;;no response
       (NOT GX-RESPONSE)
       ;;and there's a default value,
       GX-DEFAULTVALUE
     )
     ;;No second prompt
     NIL
    )
    ;;Else if
    ((OR (AND
           ;;no response
           (NOT GX-RESPONSE)
           ;;and mode is 0,
           (= GX-PROMPTMODE 0)
         )
         ;;or response was Select
         (= GX-RESPONSE "Select")
     )
     ;;Prompt for object select
     (SETQ
       GX-RESPONSE
        (NENTSEL
          (STRCAT "\nSelect object with " GX-PROMPT ": ")
        )
     )
    )
    ;;Else if
    ((AND
       ;; no response
       (NOT GX-RESPONSE)
       ;;and mode is 1,
       (= GX-PROMPTMODE 1)
     )
     ;;Prompt for standard input
     (SETQ GX-RESPONSE (GETREAL (STRCAT "\n" GX-PROMPT ": ")))
    )
  )
  ;;Return the real number if provided
  (COND
    ;;If
    ((AND
       ;;there's a response
       GX-RESPONSE
       ;;and it's an integer,
       (= (TYPE GX-RESPONSE) 'REAL)
     )
     ;;Then return it
     GX-RESPONSE
    )
    ;;Else if
    ((AND
       ;;there's a response
       GX-RESPONSE
       ;;and it's an entsel,
       (= (TYPE GX-RESPONSE) 'LIST)
     )
     ;;Then return it
     ;;Then convert it to an real
     (ATOF
       (CADR
         (WIKI-EXTRACT (CDR (ASSOC 1 (ENTGET (CAR GX-RESPONSE)))))
       )
     )
    )
    ;;Else
    (T
     ;;Return the default
     GX-DEFAULTVALUE
    )
  )
)

;;;WIKI-GETPOINTX
(DEFUN
   WIKI-GETPOINTX (GX-STARTINGPOINT GX-PROMPT GX-DEFAULTVALUE
                   GX-INITIALVALUE / GX-INPUT
                  )
  (SETQ
    GX-DEFAULTVALUE
     (COND
       (GX-DEFAULTVALUE)
       (GX-INITIALVALUE)
       ('(0.0 0.0 0.0))
     )
  )
  (SETQ
    GX-PROMPT
     (STRCAT
       GX-PROMPT
       " <"
       (RTOS (CAR GX-DEFAULTVALUE))
       ","
       (RTOS (CADR GX-DEFAULTVALUE))
       ","
       (RTOS (CADDR GX-DEFAULTVALUE))
       ">: "
     )
  )
  (SETQ
    GX-INPUT
     (IF GX-STARTINGPOINT
       (GETPOINT GX-STARTINGPOINT GX-PROMPT)
       (GETPOINT GX-PROMPT)
     )
  )
  (IF (NOT GX-INPUT)
    GX-DEFAULTVALUE
    GX-INPUT
  )
)

(DEFUN
   WIKI-GETSTRINGX
   (GX-PROMPT GX-DEFAULTVALUE GX-INITIALVALUE / GX-INPUT)
  (SETQ
    GX-DEFAULTVALUE
     (COND
       (GX-DEFAULTVALUE)
       (GX-INITIALVALUE)
       ("")
     )
  )
  (COND
    ((/= ""
         (SETQ
           GX-INPUT
            (GETSTRING
              (STRCAT "\n" GX-PROMPT " <" GX-DEFAULTVALUE ">: ")
            )
         )
     )
     GX-INPUT
    )
    (GX-DEFAULTVALUE)
  )
)
;;;  WIKI-SEGMENT-LENGTH
(DEFUN
   WIKI-SEGMENT-LENGTH
;;;  Returns curve or straight length of a segment.
                       (2DPNT1 2DPNT2 BULGE / D DELTA DOVER2 L R)
  (SETQ
    ;;Make sure points are truly 2d
    2DPNT1
     (WIKI-FLATTEN 2DPNT1)
    2DPNT2
     (WIKI-FLATTEN 2DPNT2)
    D (/ (DISTANCE 2DPNT1 2DPNT2) 2)
  ) ;_ end of setq
  (COND
    ((/= 0 BULGE)
     (SETQ
       DOVER2
        (ABS (* 2 (ATAN BULGE)))
       DELTA
        (* 2 DOVER2)
       R (/ D (SIN DOVER2))
     ) ;_ end of setq
     (* DELTA R)
    )
    (T (* D 2))
  ) ;_ end of cond
)
Advertisement