本帖最后由 Gu_xl 于 2015-2-13 16:39 编辑
需加载XLRX_API!
 - (defun c:tt ()
- (while (setq e (nentselp))
- (if (> (length e) 2)
- (progn
- (setq pt (trans (cadr e) 1 0)
- m (caddr e) ;_ 转换矩阵
- invM (XLRX-Mat-Inverse m) ;_ 逆矩阵
- e1 (car e) ;_ 选择的子对象
- e (last (last e)) ;_ 选择的图块
- ;;m0 (XLRX-Mat-blockTransform2Def e) ;_ 图块引用->图块定义转换矩阵
- ;;m1 (XLRX-Mat-blockTransform2Ref e) ;_ 图块定义->图块引用转换矩阵
- )
- (if (member (xlrx-get e1 "isA")
- '("AcDbLine" "AcDbPolyline"
- "AcDb2dPolyline" "AcDb3dPolyline"
- "AcDbCircle" "AcDbArc"
- "AcDbEllipse" "AcDbSpline"
- )
- )
- (progn
- (setq pt (XLRX-Mat-MxP invM pt)) ;_ 点转换到块定义
- (setq pt (xlrx-Curve-getClosestPointTo e1 pt))
- (setq vec (xlrx-Curve-getFirstDeriv e1 pt)
- pt1 (mapcar '+ pt vec)
- )
- (setq pt (XLRX-Mat-MxP m pt)
- pt1 (XLRX-Mat-MxP m pt1)
- )
- (setq ang (angle pt pt1))
- (cond ((>= (/ pi 2) ang 0) (setq ang (- ang)))
- ((>= (* pi 1.5) ang (/ pi 2)) (setq ang (- pi ang)))
- ((>= (* pi 2) ang (* pi 1.5)) (setq ang (- (* pi 2) ang))
- )
- )
- (setq m (XLRX-Mat-Rotation pt ang)) ;_ 构建旋转矩阵
- (XLRX-TRANSFORMBY e m)
- )
- )
- )
- )
- )
- )
|