明经通道 Visual LISP 函数  
vlax-tmatrix
 

返回 VLA 方法可用的 4x4 转换矩阵的适当表示

(vlax-tmatrix list)

参数

list

由表组成的表,其中每个子表包含 4 个数值,分别表示转换矩阵的各个元素。

返回值

类型为 SafeArray 的变体,表示 4x4 转换矩阵。

示例

定义转换矩阵并将其值指定为变量 tmatrix:

_$ (setq tmatrix (vlax-tmatrix '((1 1 1 0) (1 2 3 0) (2 3 4 5) (2 9 8 3))))
#<variant 8197 ...>

使用 vlax-safearray->list 以表的形式查看 tmatrix 的值:

_$ (vlax-safearray->list (vlax-variant-value tmatrix))
((1.0 1.0 1.0 0.0) (1.0 2.0 3.0 0.0) (2.0 3.0 4.0 5.0) (2.0 9.0 8.0 3.0))

下面的代码创建一条直线,并使用转换矩阵将其旋转 90 度:

(defun Example_TransformBy () ; / lineObj startPt endPt matList transMat) 

(vl-load-com)      ; 加载 ActiveX 支持
(setq acadObject   (vlax-get-acad-object))
(setq acadDocument (vla-get-ActiveDocument acadObject))
(setq mSpace       (vla-get-ModelSpace acadDocument))

;; 创建直线

 (setq startPt (getpoint "拾取起点:"))
 (setq endPt (vlax-3d-point (getpoint startPt "拾取终点:")))
 (setq lineObj (vla-addline mSpace (vlax-3d-point startPt) endPt))

;;; 用转换矩阵初始化 transMat 变量
;;; 该矩阵将对象绕点 (0,0,0) 旋转 90 度。
;;; 先创建包含 4 个子表的列表,其中每个子表
;;; 包含 4 个数值,代表转换矩阵的元素

 (setq matList (list '(0 -1 0 0) '(1 0 0 0) '(0 0 1 0) '(0 0 0 1)))

;;; 使用 vlax-tmatrix 将表转换为变体。

 (setq transmat (vlax-tmatrix matlist))

;;;  用定义的转换矩阵转换直线

 (vla-transformby lineObj transMat)
 (vla-zoomall acadObject)

 (princ "直线已被转换。")
 (princ)
)

明经通道 版权所有 未经许可 不得传播

 评论