The trans function translates coordinates from one coordinate system to another. See on-line help for details.

This can be confusing because "from one coordinate system to another" is difficult if you only have a choice between the current UCS (1) and World UCS (0). Plan of approach in Lisp:

  • Save current UCS.
  • Make WCS active.
  • Get all the points you need.
  • As an option: You can now even create another UCS based on these points.
  • Use trans to be able to use points in the active UCS, for example a function such as angle.
  • When everything is done: Activate the saved UCS.

If we convert those steps into code, the following sample fragments can help:

Save current UCS:

(if (not current-ucs-tmp)
   (setq current-ucs-tmp (list (getvar "ucsorg") (trans (list 1 0 0) 1 0) (trans (list 0 1 0) 1 0)))


(command "._ucs" "_w")

Collect points:

   pt-a (getpoint (tra "\nSpecify apex point: "))
   pt-1 (getpoint (tra "\nSpecify end point 1: "))
   pt-2 (getpoint (tra "\nSpecify end point 2: "))

Create a new UCS:

(command "._ucs" "_3p" "_non" pt-a "_non" pt-1 "_non" pt-2)

Do something with the points, below shows how points behave and how they can be manipulated.

(princ (strcat "\nAngle from apex to point 2 in WCS is: " (rtos (angle pt-a pt-2)) "."))
(princ (strcat "\nAngle from apex to point 2 in plane trough points with point 1 on x-axis is: " (rtos (angle (trans pt-a 0 1) (trans pt-2 0 1))) "."))

Back to where we started:

(if current-ucs-tmp ; restore ucs
      (command "._ucs" "_3p" (trans (nth 0 current-ucs-tmp) 0 1) (trans (nth 1 current-ucs-tmp) 0 1) (trans (nth 2 current-ucs-tmp) 0 1))
      (setq current-ucs-tmp nil)

This site is hosted by NedCAD.

De inhoud van deze site wordt aangeboden zoals het is, zonder enige vorm van garantie en heeft verschillende licenties. Meer informatie over licenties staat hier.