54256 发表于 2013-7-3 08:45:11

怎样获得块内的直线

我选中一条直线,若这条直线是在块内的直线,怎么样取出这条直线的端点坐标


谢谢

zyhandw 发表于 2013-7-3 08:51:58

用nentsel应该就能行了吧,可以自己查阅下这个函数

阿霸jun 发表于 2013-7-3 09:22:00

遍历块内的对象,获取图元名,然后获取坐标点

54256 发表于 2013-7-3 09:38:34

阿霸jun 发表于 2013-7-3 09:22 static/image/common/back.gif
遍历块内的对象,获取图元名,然后获取坐标点

怎样遍历?

Gu_xl 发表于 2013-7-3 09:53:55

(defun c:tt ()
(if (and
      (setq e (nentselp "\n选择块内直线:"))
      (= "LINE" (cdr (assoc 0 (setq el (entget (car e))))))
      )
    (progn
      (setq p0 (cdr (assoc 10 el))
            p1 (cdr (assoc 11 el))
            )
      (if (cddr e)
      (progn
          (setq m (caddr e))
          (setq p0 (MXP m p0)
                p1 (MXP m p1)
                )
          )
      )
      (grdraw (trans p0 0 1) (trans p1 0 1) 1)
      )
    )

)
(defun mxv (m v)
(mapcar (function (lambda (r) (apply '+ (mapcar '* r v)))) m)
)
(defun mxp (m p)
(reverse (cdr (reverse (mxv m (append p '(1.0))))))
)

54256 发表于 2013-7-3 11:09:46

Gu_xl 发表于 2013-7-3 09:53 static/image/common/back.gif


请问,cddr是个什么函数

Gu_xl 发表于 2013-7-3 11:27:37

本帖最后由 Gu_xl 于 2013-7-3 11:29 编辑

54256 发表于 2013-7-3 11:09 static/image/common/back.gif
请问,cddr是个什么函数
(cddr lst) = (cdr (cdr list))
car、 cdr 可以任意组合,最多四层,操作顺序是自右向左!
cadr = (car (cdr lst))
组合诸如:cadddr/cdaadr/cadr/cdar ...

54256 发表于 2013-7-3 11:59:46

Gu_xl 发表于 2013-7-3 11:27 static/image/common/back.gif
(cddr lst) = (cdr (cdr list))
car、 cdr 可以任意组合,最多四层,操作顺序是自右向左!
cadr = (car ...

谢谢高手,长见识了

54256 发表于 2013-7-3 12:18:16

Gu_xl 发表于 2013-7-3 09:53 static/image/common/back.gif


(setq e (nentselp "\n选择块内直线:"))
这句话我的程序里没有出现的,我是通过SSGET获得对象的,
我的希望是,有这么一个子函数,输入是对象,若这个对象是块中的直线
则输出直线的2个端点

谢谢

Gu_xl 发表于 2013-7-3 12:34:26

54256 发表于 2013-7-3 12:18 static/image/common/back.gif
(setq e (nentselp "\n选择块内直线:"))
这句话我的程序里没有出现的,我是通过SSGET获得对象的,
我的 ...

这种想法是行不通的!你没有理解块定义对象和块的关系!ssget不可能获得块中的对象!
通过Insert块对象可以构造nentselp返回的矩阵,请在论坛搜索相关知识!
页: [1] 2
查看完整版本: 怎样获得块内的直线