明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 2892|回复: 6

[已解答] 请高手帮写一个缩放到矩形的代码

[复制链接]
发表于 2013-10-24 15:57 | 显示全部楼层 |阅读模式
请高手帮写一个缩放到矩形的代码
我有一个设想,就是在A图层中,画N个方框。这些步骤是手工做的。
再写代码,搜索到这N个方框,将屏幕缩放到每个方框的大小,有几个就缩放几次。则如果看到了我需要的区域,我退出插件运行,则屏幕就到达了我的目的位置。
这样就很容易找到自己的目的位置了。至少不用太费时间和手脚。
希望是真代码,不要是伪代码。

本帖被以下淘专辑推荐:

发表于 2013-10-24 17:35 | 显示全部楼层
本帖最后由 llsheng_73 于 2013-10-24 17:36 编辑

  1. (defun SStoES(s / m n e)
  2.   (if s(progn
  3.    (setq n(sslength s)m 0)
  4.    (while(< m n)
  5.      (setq e(if e(append e(list(ssname s m)))(list(ssname s m)))m(1+ m))))
  6.     )e)

  7. (defun c:flzoom();;命令可以自己改
  8.   (setq ss(ssget"X"'((0 . "LWPOLYLINE"))));; 要不要手动选择自己考虑或者加上图层限制(ssget"X"'((0 . "LWPOLYLINE")(8 . "图层名")))
  9.   (setq ss(sstoes ss))
  10.   (foreach e ss()
  11.     (vla-getboundingbox(vlax-ename->vla-object e)'p1 'p2)
  12.     (setq p1(vlax-safearray->list p1)
  13.     p2(vlax-safearray->list p2)
  14.     stay nil)
  15.     (command"ZOOM""W"p1 p2)
  16.     (while (null stay)(setq stay (getstring"\n想停留在这一区域ESC,任意键到下一区域......")))
  17.     )
  18.   )

点评

好极了!谢谢  发表于 2013-10-24 18:01

评分

参与人数 1明经币 +1 金钱 +5 收起 理由
清风明月名字 + 1 + 5 很给力!

查看全部评分

 楼主| 发表于 2013-10-25 20:56 | 显示全部楼层
下面代码加了一个指定图层
(defun SStoES(s / m n e)
;;;来源:2楼 请高手帮写一个缩放到矩形的代码-AutoLISP/Visual LISP 编程技术-CAD论坛-明经CAD社区 - Powered by Discuz!
;;;http://bbs.mjtd.com/forum.php?mo ... mp;page=1#pid614906
;;;  请高手帮写一个缩放到矩形的代码
;;;我有一个设想,就是在A图层中,画N个方框。这些步骤是手工做的。
;;;再写代码,搜索到这N个方框,将屏幕缩放到每个方框的大小,有几个就缩放几次。则如果看到了我需要的区域,我退出插件运行,则屏幕就到达了我的目的位置。
;;;这样就很容易找到自己的目的位置了。至少不用太费时间和手脚。
;;;希望是真代码,不要是伪代码。
  (if s(progn
   (setq n(sslength s)m 0)
   (while(< m n)
     (setq e(if e(append e(list(ssname s m)))(list(ssname s m)))m(1+ m))))
    )e)

(defun c:缩放到000缩放到轻多义线图层中的多段线();;命令可以自己改
  (setq ss(ssget"X"'((0 . "LWPOLYLINE")(8 . "000缩放到轻多义线"))));; 要不要手动选择自己考虑或者加上图层限制(ssget"X"'((0 . "LWPOLYLINE")(8 . "图层名")))
  (setq ss(sstoes ss))
  (foreach e ss()
    (vla-getboundingbox(vlax-ename->vla-object e)'p1 'p2)
    (setq p1(vlax-safearray->list p1)
    p2(vlax-safearray->list p2)
    stay nil)
    (command"ZOOM""W"p1 p2)
    (while (null stay)(setq stay (getstring"\n想停留在这一区域ESC,任意键到下一区域......")))
    )
  )
 楼主| 发表于 2013-10-25 20:58 | 显示全部楼层
这是配合上面代码用的,
(DEFUN C:在000缩放到轻多义线图层中画矩形 ( )
(setq oldOsmode (getvar "osMode"))
        (setvar "osMode" 0)
        
        

(princ "\n选取矩形的两个对角点,画矩形:")
(command "RECTANG" PAUSE PAUSE) ;;通过对角坐标画一个矩形。
(setq 图元名 (entlast));选择集的集合,其实是图元名集合

(setq 新图层点对 (cons 8 "000缩放到轻多义线"))
  
      (setq 图元组码 (entget 图元名))
      
        (setq 旧图层点对 (assoc '8 图元组码))
        (setq 图元组码 (subst 新图层点对 旧图层点对 图元组码))
        (entmod 图元组码)
       (command "-layer" "P" "N" "000缩放到轻多义线" "")
  (setvar "osMode" oldOsmode)
  (princ )
      
)
 楼主| 发表于 2013-10-25 20:59 | 显示全部楼层
这也是配合2楼代码用的
(DEFUN C:在000缩放到轻多义线图层中画轻多义线 ( )
; 在000缩放到轻多义线图层中画轻多义线
(setq oldOsmode (getvar "osMode"))
(setvar "osMode" 0)
(princ "\n选取轻多义线的点,画轻多义线:")
(command "pline" PAUSE) ;;画一个轻多义线。
(command PAUSE) ;;没有这一句,一定是画成封闭多义线
(setq 图元名 (entlast));选择集的集合,其实是图元名集合
(setq 新图层点对 (cons 8 "000缩放到轻多义线"))
(setq 图元组码 (entget 图元名))
(setq 旧图层点对 (assoc '8 图元组码))
(setq 图元组码 (subst 新图层点对 旧图层点对 图元组码))
(entmod 图元组码)
(command "-layer" "P" "N" "000缩放到轻多义线" "")
(setvar "osMode" oldOsmode)
  (princ )   
)
 楼主| 发表于 2013-10-25 21:00 | 显示全部楼层
有了上面的三套代码,你就可以在你设定的缩放区域不停地循环去看,到了目的区域就停下来
发表于 2013-10-27 12:20 | 显示全部楼层
llsheng_73 发表于 2013-10-24 17:35

热心好人.........支持一个.....赞
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-5-19 06:32 , Processed in 0.218803 second(s), 31 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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