找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 1352|回复: 4

[求助] 在学Autolisp,想问问各位大虾怎么获得一个块的坐标?

[复制链接]
发表于 2020-1-6 23:34:16 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
(entsel)这个函数可以获得图元的名称和坐标,但是只能每次点选图元获得一个结果,且不能给这个函数传递参数。我需要的是能用autolisp语言经过一次选择就能获得全部图元坐标的方法。此外我要选的图元也不能转成对象。
我希望获得是后面这个坐标值,但是不希望一个一个的点选图元。

$ (entsel)
(<图元名: 7ff42ad1edb0> (1.1205e+008 8.38455e+007 0.0))
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

已领礼包: 511个

财富等级: 财运亨通

发表于 2020-1-7 11:50:57 | 显示全部楼层
本帖最后由 pxr201419 于 2020-1-7 16:01 编辑

不论是不是块内对象,使用nentselp函数,(entget (car(nentselp "\n选择对象:")))
就得到了所选对象的dxf,用entsel得到的后面那个坐标是点选对象时鼠标的坐标,而不是对象的坐标
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-1-7 20:32:42 | 显示全部楼层
pxr201419 发表于 2020-1-7 11:50
不论是不是块内对象,使用nentselp函数,(entget (car(nentselp "\n选择对象:")))
就得到了所选对象的dxf ...

谢教。entsel函数的返回值的确如您所说。nentselp也确实能获得图块的坐标,缺点在于它只能每次单选。我需要的效果是款选。。这个函数也不接受参数传递。。有点无可奈何、
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-1-7 20:34:18 | 显示全部楼层
新人求助!被困扰好久了。。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 511个

财富等级: 财运亨通

发表于 2020-1-8 09:50:28 | 显示全部楼层
;;;读取块内点、文字、圆(弧)的坐标,保存为txt文件
;;;支持嵌套块,对块的转角无要求
;;;要求各级块的xyz三个比例的绝对值保持一致
(prompt "\n读取块内点、文字、圆(弧)的坐标")
(prompt "\n运行命令:tt5")(princ)
(defun c:tt5()
   (defun multiplyjz(lst1 lst2)
      (setq i_t 0 alst nil)
      (while (< i_t 4)
         (setq j_t 0 blst nil st1 (nth i_t lst1) i_t (1+ i_t))
         (while (< j_t 4)
            (setq st2 (nth j_t lst2) j_t (1+ j_t))
            (setq blst (append blst (list (apply '+ (mapcar '(lambda (x y)(* x y)) st1 st2))))))
         (setq alst (append alst (list blst)))))
   (defun transposejz(lst)
      (mapcar '(lambda(a b c d)(list a b c d)) (car lst) (cadr lst) (caddr lst)(last lst)))
   (defun getjz  (ee)
      (setq st_e (entget ee))
      (setq zb (cdr (assoc 10 st_e)))
      (setq zbx (car zb)
            zby (cadr zb))
      (setq sac_x (cdr (assoc 41 st_e))
            sac_y (cdr (assoc 42 st_e))
            sac_z (cdr (assoc 43 st_e))
            jx (last (assoc 210 st_e)))
      (setq cosj (cos (cdr (assoc 50 st_e)))
            sinj (sin (cdr (assoc 50 st_e))))
      (setq jz_xy (append (list (list 1.0 0.0 0.0 zbx))
                          (list (list 0.0 1.0 0.0 zby))
                          (list (list 0.0 0.0 1.0 0.0))
                          (list (list 0.0 0.0 0.0 1.0)))
            jz_xz (append (list (list cosj sinj 0.0 0.0))
                          (list (list (* -1 sinj) cosj 0.0 0.0))
                          (list (list 0.0 0.0 1.0 0.0))
                          (list (list 0.0 0.0 0.0 1.0)))
            jz_ss (append (list (list sac_x 0.0 0.0 0.0))
                          (list (list 0.0 sac_y 0.0 0.0))
                          (list (list 0.0 0.0 sac_z 0.0))
                          (list (list 0.0 0.0 0.0 1.0))))
      (setq jz_jx '((-1.0 0.0 0.0 0.0) (0.0 1.0 0.0 0.0) (0.0 0.0 -1.0 0.0) (0.0 0.0 0.0 1.0)))
      (setq jz (multiplyjz (multiplyjz jz_xy jz_xz) jz_ss))
      (if (= jx -1.0)
         (setq jz (append (list (mapcar '(lambda (x) (* x -1.0)) (car jz)))(list(cadr jz))
                          (list (mapcar '(lambda (x) (* x -1.0)) (caddr jz))) (list(last jz)))))
      jz)
   (defun getx(st)
      (rtos (cadr (assoc 10 st)) 2 3))
   (defun gety(st)
      (rtos (caddr (assoc 10 st)) 2 3))
   (setvar "osmode" 0)
   (setq ss (ssadd) ss0 (ssadd))
   (cond ((and (setq e (car (entsel "选择块:")))
               (= (cdr (assoc 0 (entget e))) "INSERT"))
          (setq blst (list e (getjz e)))
          (while blst
             (setq e     (car blst)
                   bn    (cdr (assoc 2 (entget e)))
                   e1    (tblobjname "block" bn))
             (while
                (setq e1  (entnext e1))
                (setq st  (entget e1)
                      p1  (cdr (assoc 10 st))
                      typ (cdr (assoc 0 st)))
                (cond ((= typ "INSERT")
                       (setq blst (append blst (list e1 (multiplyjz (cadr blst) (transposejz (getjz e1)))))))
                      ((member typ '("POINT""TEXT""MTEXT""CIRCLE""ARC"))
                       (setq st1 (vl-remove nil (mapcar '(lambda(x)(if (member (car x) (list -1 5 62)) nil x)) st)))
                       (setq new (entmakex st))
                       (vla-transformby (vlax-ename->vla-object new) (vlax-tmatrix (cadr blst)))
                       (ssadd new ss)(ssadd new ss0))))
             (setq blst  (cddr blst)))
          (cond ((and ss (> (sslength ss) 0))
                 (cond ((setq fiL (getfiLed "数据保存位置" "" "txt" 33))
                        (setq fL (open fiL "w"))
                        (write-line (strcat "图元类别" "\t" "X坐标" "\t" "Y坐标" "\t" "文字内容") fl)
                        (while (> (sslength ss) 0)
                           (setq e (ssname ss 0)
                                 st (entget e)
                                 typ (cdr (assoc 0 st)))
                           (cond ((= typ "TEXT")
                                  (write-Line (strcat typ "\t" (getx st) "\t" (gety st)"\t" (cdr (assoc 1 st))) fl))
                                 ((= typ "MTEXT")
                                  (vl-cmdf "explode" e)
                                  (setq st (entget (entlast)))
                                  (ssadd (entlast) ss0)
                                  (write-Line (strcat typ "\t" (getx st) "\t" (gety st)"\t" (cdr (assoc 1 st))) fl))
                                 ((member typ '("POINT""CIRCLE""ARC"))
                                  (write-Line (strcat typ "\t" (getx st) "\t" (gety st)) fl)))
                           (ssdel e ss))
                        (close fl)
                        (startapp "notepad" fil)))
                 (vl-cmdf "erase" ss0 "")
                 ))))
   (princ))
敬请测试
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2024-9-23 10:27 , Processed in 0.175320 second(s), 37 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表