明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 2938|回复: 13

[讨论]ssget的问题!!

  [复制链接]
发表于 2008-9-9 08:21:00 | 显示全部楼层 |阅读模式

用SSGET函数"W"模式窗口选择或者仅用单点选取时,与图幅大小,当时图的缩放比例有关系吗?怎么我有时侯就选不上,有时候选的上!!

  (command "zoom" "e")
  (setq pt1 (list sz_etext_x (+ sz_etext_y 0.99)))
  (setq pt2 (list (+ sz_etext_x 6.0) (+ sz_etext_y 2.02)))
  (setq pt (ssget "_w" pt1 pt2 (LIST(CONS 8 lay))))

发表于 2008-9-9 09:04:00 | 显示全部楼层
"W"模式窗口选择或者仅用单点选取时,与图幅大小,当时图的缩放比例是有关系的,不在当前屏幕上的实体是选不上的
 楼主| 发表于 2008-9-9 17:31:00 | 显示全部楼层

这个我知道,在取得选择集之前我加了("zoom" "e"),但还是有时侯选不上啊!!

发表于 2008-9-9 21:38:00 | 显示全部楼层
不知你的PT1 PT2 从何得来,会否是你忘了坐标转换问题.
 楼主| 发表于 2008-9-10 08:29:00 | 显示全部楼层

没有 坐标转换啊,你帮我看看。。。

(defun c:yzx()
  (setvar "cmdecho" 0)
  (setq sz_exp  (ssget "x" (list(cons 0 "text")(cons 8 "*exptext"))))
  (command "zoom" "e")
  (setq n 0)
  (if sz_exp
  (repeat(sslength sz_exp)
  (setq sz1 (entget(ssname sz_exp n)))
  (setq text (cdr(assoc 1 sz1)))
  (setq sz_etext_x (cadr(assoc 10 sz1)))
  (setq sz_etext_y (caddr(assoc 10 sz1)))
 
  (setq pt1 (list sz_etext_x (+ sz_etext_y 0.99)))
  (setq pt2 (list (+ sz_etext_x 6.0) (+ sz_etext_y 2.02)))
  (setq lay (vl-string-subst "MAP" (SUBSTR (cdr(assoc 8 sz1)) 3 3) (cdr(assoc 8 sz1))))
  (setq pt (ssget "_w" pt1 pt2 (LIST(CONS 8 lay))))
 
 
  (if (= nil pt)(progn
  (textscr)
  (princ (strcat "\n========" text "problem!!!========" ))
  ))
  (setq n (+ n 1))
  )
  )
  (setvar "cmdecho" 1)
  (GC)
  (princ)
)

 楼主| 发表于 2008-9-10 12:39:00 | 显示全部楼层

没有人说,自己顶!!

发表于 2008-9-10 13:16:00 | 显示全部楼层
帮你加了转换坐标系功能。
不知你选择文字附近的什么东西。
(defun c:yzx ( /  sz_exp n sz1 text pt sz_etext_x sz_etext_y pt1 pt2 lay)
  (setvar "cmdecho" 0)
  (if (not (setq sz_exp  (ssget "x" '((0 . "text") (8 . "*exptext"))))) (exit))
  (command "zoom" "e")
  (setq n 0)
  (repeat (sslength sz_exp)
      (setq sz1 (entget (ssname sz_exp n))
            n (+ n 1)
            text (cdr (assoc 1 sz1))
            pt (trans (cdr (assoc 10 sz1)) 0 1)
            sz_etext_x (car pt)
            sz_etext_y (cadr pt)
            pt1 (list sz_etext_x (+ sz_etext_y 0.99))
            pt2 (list (+ sz_etext_x 6.0) (+ sz_etext_y 2.02))
            pt (cdr (assoc 8 sz1))
            lay (vl-string-subst "MAP" (substr pt 3 3) pt)
            pt (ssget "_w" pt1 pt2 (list (cons 8 lay)))
      )
      (if (not pt)
          (progn (textscr)
                 (princ (strcat "\n========" text "problem!!!========" ))
          )
      )
  )
  (setvar "cmdecho" 1)
  (gc)
  (princ)
)
发表于 2008-9-10 18:54:00 | 显示全部楼层
ssget有精度要求的.如果你ZOOME后范围很大,而你要选的只是很小的一部分时,就会出错.
发表于 2008-9-10 21:58:00 | 显示全部楼层
楼上大叔所言极是!
 楼主| 发表于 2008-9-11 13:10:00 | 显示全部楼层

原来如此啊,谢谢八楼的兄弟。。

不过那要怎么解决这个问题呢。

另外,7楼的程序加了坐标转换后(我看了,转换前后坐标没有变)和我原来的程序执行情况一样,也有问题!

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

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-11-6 07:10 , Processed in 0.173876 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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