hooboxu 发表于 2015-2-11 08:55:03

之前看到过以块内以某条直线水平转正的LSP,现在翻了二天还没找到。

有知道的朋友给个链接好吗?
谢谢了

Gu_xl 发表于 2015-2-13 16:38:28

本帖最后由 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)
          )
      )
      )
    )
)
)

hooboxu 发表于 2015-3-2 09:31:24

感谢G版,新年好,回去试试

hooboxu 发表于 2015-3-5 12:34:53

G版没有2015的吗
页: [1]
查看完整版本: 之前看到过以块内以某条直线水平转正的LSP,现在翻了二天还没找到。