Or if you want to continue to change ucs from already entmake ucs, try this :
Code:
;; Vector Cross Product - Lee Mac
;; Args: u,v - vectors in R^3
(defun v^v ( u v )
(list
(- (* (cadr u) (caddr v)) (* (cadr v) (caddr u)))
(- (* (car v) (caddr u)) (* (car u) (caddr v)))
(- (* (car u) (cadr v)) (* (car v) (cadr u)))
)
)
;; Unit Vector - Lee Mac
;; Args: v - vector in R^n
(defun unit ( v )
( (lambda ( n ) (if (equal 0.0 n 1e-14) nil (vxs v (/ 1.0 n)))) (norm v))
)
;; Vector x Scalar - Lee Mac
;; Args: v - vector in R^n, s - real scalar
(defun vxs ( v s )
(mapcar '(lambda ( n ) (* n s)) v)
)
;; Vector Norm - Lee Mac
;; Args: v - vector in R^n
(defun norm ( v )
(sqrt (apply '+ (mapcar '* v v)))
)
(defun c:entmucs ( / adoc ut ut21 ut22 ut3 ucsent ucsenta ) (vl-load-com)
(setq adoc (vla-get-activedocument (vlax-get-acad-object)))
(setq ut (getpoint "\nTocka u osi presjeka : "))
(setq ut21 (getpoint ut "\nTocka na pozitivnoj strani presjeka : "))
(setq ut22 (getpoint ut "\nTocka u ravni od koje podjesavam Z osu novog ucsa : "))
;namjestanje ucsa++
(setq ut3 (mapcar '+ ut (v^v (mapcar '- ut21 ut) (mapcar '- ut22 ut))))
(entmake (list
(cons 0 "UCS")
(cons 100 "AcDbSymbolTableRecord")
(cons 100 "AcDbUCSTableRecord")
(cons 2 "test")
(cons 70 0)
(cons 10 (trans ut 1 0))
(cons 11 (unit (mapcar '- (trans ut21 1 0) (trans ut 1 0))))
(cons 12 (unit (mapcar '- (trans ut3 1 0) (trans ut 1 0))))
(cons 79 0)
(cons 146 0.0)
)
)
(setq ucsent (tblobjname "UCS" "test"))
(setq ucsenta (vlax-ename->vla-object ucsent))
(vla-put-activeucs adoc ucsenta)
(vla-put-name (vla-get-activeucs adoc) "tst")
(vl-cmdf "_.UCS" "d" "tst")
(princ)
)