明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
楼主: xiaocainiao

[提问] 求助!用lisp如何循环进入选择的视口内

[复制链接]
 楼主| 发表于 2022-5-21 12:57 | 显示全部楼层
pzweng 发表于 2022-5-21 12:43
你为什么不直接改视口的注释比例呢?没在布局图里出过图纸,感觉CAD的注释性非常的不好用

没找到直接改视口注释比例的的函数、而且注释性比较特殊、必须是比例列表里面存在的比例才能切换
回复

使用道具 举报

发表于 2022-5-21 13:35 | 显示全部楼层
xiaocainiao 发表于 2022-5-21 12:57
没找到直接改视口注释比例的的函数、而且注释性比较特殊、必须是比例列表里面存在的比例才能切换

摸索了一下,在视口的模型空间改和改视口比例效果完全不了样,视口比例一改的话图纸也缩放了,直接在模型空间改CANNOSCALE变量,只是让注释进行缩放
回复

使用道具 举报

 楼主| 发表于 2022-5-21 15:45 | 显示全部楼层
pzweng 发表于 2022-5-21 13:35
摸索了一下,在视口的模型空间改和改视口比例效果完全不了样,视口比例一改的话图纸也缩放了,直接在模型 ...

是的、注释性就是这点不好、它和视口比例是分开的、必须要进视口才能切换、视口比例直接选择视口就可以改
回复

使用道具 举报

 楼主| 发表于 2022-5-31 15:22 | 显示全部楼层
pzweng 发表于 2022-5-17 19:25
(defun c:ms (/ e doc)
  (setq doc (vla-get-ActiveDocument (vlax-get-acad-object)))
  (vla-put-mspa ...

我今天又试了一下这个代码、发现不行、它只能进入屏幕可见范围内的视口、屏幕外的进不去、所以还得用Z+O的形式
回复

使用道具 举报

发表于 2022-5-31 20:14 | 显示全部楼层
pzweng 发表于 2022-5-21 12:43
你为什么不直接改视口的注释比例呢?没在布局图里出过图纸,感觉CAD的注释性非常的不好用

说的对,之前用过这个,很不好用。最后放弃了。
回复

使用道具 举报

发表于 2022-6-1 08:00 | 显示全部楼层
xiaocainiao 发表于 2022-5-31 15:22
我今天又试了一下这个代码、发现不行、它只能进入屏幕可见范围内的视口、屏幕外的进不去、所 ...

那个代码需要你自己改一下,并不能完全满足你的要求
回复

使用道具 举报

 楼主| 发表于 2022-6-1 08:06 | 显示全部楼层
pzweng 发表于 2022-6-1 08:00
那个代码需要你自己改一下,并不能完全满足你的要求

我已经改成ssget “X”模式了、但还是进入不了屏幕外的视口中、只能在可见的视口中循环。感觉就是CAD本身的限制
回复

使用道具 举报

发表于 2022-6-1 10:00 | 显示全部楼层
xiaocainiao 发表于 2022-6-1 08:06
我已经改成ssget “X”模式了、但还是进入不了屏幕外的视口中、只能在可见的视口中循环。感觉就是CAD本身 ...

(defun c:ms (/ e doc ctab state ss sc _dxf id)
  (defun _dxf (c e) (cdr (assoc c (entget e))))
  (if (and
        (setq doc (vla-get-activedocument (vlax-get-acad-object)))
        (= (getvar 'tilemode) 0)
        (setq ctab (getvar 'ctab))
        (setq state (vla-get-mspace doc))
        (null (vla-put-mspace doc :vlax-false))
        (setq ss (ssget "X" '((0 . "VIEWPORT"))))
        (setq sc "1:5")
      )
    (progn
      (vla-zoomall (vlax-get-acad-object))
      (vla-put-mspace doc :vlax-true)
      (repeat (setq i (sslength ss))
        (setq e (ssname ss (setq i (1- i))))
        (if (and (/= 1 (setq id (_dxf 69 e))) (= (_dxf 410 e) ctab))
          (progn (setvar 'cvport id) (setvar 'cannoscale sc))
        )
      )
    )
  )
  (vla-put-mspace doc :vlax-false)
  (vla-zoomprevious (vlax-get-acad-object))
  (vla-put-mspace doc state)
  (princ)
)
回复

使用道具 举报

 楼主| 发表于 2022-6-1 10:23 | 显示全部楼层
本帖最后由 xiaocainiao 于 2022-6-1 10:25 编辑
pzweng 发表于 2022-6-1 10:00
(defun c:ms (/ e doc ctab state ss sc _dxf id)
  (defun _dxf (c e) (cdr (assoc c (entget e))))
  ...

这个和ZOOM+O貌似差不多、不过我现在加了一个判断、就是先判断当前布局内所有的视口中、有没有视口不再屏幕内、如果有就先执行ZOOM+O、没有就不执行ZOOM+O、目前就想到这个笨方法了
回复

使用道具 举报

 楼主| 发表于 2022-6-1 10:30 | 显示全部楼层
xiaocainiao 发表于 2022-6-1 10:23
这个和ZOOM+O貌似差不多、不过我现在加了一个判断、就是先判断当前布局内所有的视口中、有没有视口不再屏 ...

你这个相当于先全部显示所有图形、然后执行命令、最后再恢复到上一个视图、反正不管怎么弄、都得让图形先在屏幕内显示出来才行
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-27 21:29 , Processed in 0.435725 second(s), 17 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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