明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1108|回复: 7

[函数] 不用command自动生成命名视图,修改已命名视图名

[复制链接]
发表于 2021-6-4 14:50 | 显示全部楼层 |阅读模式
本帖最后由 guosheyang 于 2021-6-4 21:34 编辑

曾经试图找到一个不用command命令来保存当前视图的vlisp命令,但最后发现都有问题,在论坛也没有搜到,后来自己尝试用autolisp的entmake基本方法写了个类似的,也可以用,共享于此,若有问题,请反馈,谢谢!     本代码有两个自定义命令  一个是对模型空间的视图自动命名保存,二是对已有的命名视图名加以改名
(defun c:ygs_bcst( / stmc)
    (setvar 'cmdecho 0)
    (setq stmc(getstring "\n请输入要命名屏幕视图的名称:"))
    (while(=(ygs_viewexist? stmc)t)
          (setq stmc(getstring"\n你指定的名称已存在,请重新指定视图名称"))
    )
(entmake
(list
(cons 0 "VIEW")
(cons 100 "AcDbSymbolTableRecord")
(cons 100 "AcDbViewTableRecord")
(cons 2 stmc);视图名称
(cons 41 (* (ygs_kgb)(getvar 'viewsize)));视图宽度
(cons 40 (getvar 'viewsize));;视图高度
(cons 42 50.0);;镜头长度 用默认值
。。。 命名规则 ,默认视图命名为”1”   如果已经有了“1” 则自动后面加一个1




本帖子中包含更多资源

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

x

评分

参与人数 3明经币 +3 收起 理由
bssurvey + 1 赞一个!
lee50310 + 1 赞一个!
菜卷鱼 + 1

查看全部评分

"觉得好,就打赏"
还没有人打赏,支持一下
 楼主| 发表于 2021-6-4 14:54 | 显示全部楼层
为了能够在论坛下载东西 所以收取1币    若用问题请大家反馈
回复 支持 1 反对 0

使用道具 举报

发表于 2022-1-1 15:20 | 显示全部楼层
非常强大的自定义视图程序,感谢
 楼主| 发表于 2022-1-1 15:33 | 显示全部楼层
pxt2001 发表于 2022-1-1 15:20
非常强大的自定义视图程序,感谢

谢谢你的肯定!元旦快乐!
发表于 2022-1-1 19:05 | 显示全部楼层
根据楼主的思路,拓展了一下功能。详演示。


加载doslib后,才能运行程序
;;功能:自动保存当前屏幕视图为命名视图
(defun c:v1 ()
  (vl-load-com)
  (setvar 'cmdecho 0)
  ;;================================
  (or all_lst (setq all_lst '("1目录  2墙表 3墙体平面图")))
  (Setq        kw
         ;; Dos_Editlist xdrx_ui_Editlist
         (Dos_Editlist
           "添加、删除或编辑项目,返回列表。PXT: 上下移动取列表第一项"
           "创建视图。输入view名称以空格隔开"
           all_lst
         )
  )
  (If kw
    (progn
      (setq all_lst kw)
      (Setq N-lst (Fsxm-Split (Car kw) " "))
      (Setq N-lst (vl-remove "" N-lst))
      (princ (strcat "\n创建了 "
                     (itoa (length N-lst))
                     "个视图,视图名称为: "
                     (Car kw)
             )
      )
      (foreach n N-lst
        (setq st_name n)
        (if (/= (ygs_viewexist? st_name) t)
          (entmake
            (list
              (cons 0 "VIEW")
              (cons 100 "AcDbSymbolTableRecord")
              (cons 100 "AcDbViewTableRecord")
              (cons 2 st_name)                ;视图名称
              (cons 41 (* (ygs_kgb) (getvar 'viewsize))) ;视图宽度
              (cons 40 (getvar 'viewsize))
              ;;视图高度
              (cons 42 (getvar 'lenslength))
              ;;镜头长度 用默认值
              (cons 50 (getvar 'viewtwist)) ;扭曲角度
              (cons 70 0)
              ;;View模型空间为0
              (cons 10 (trans (getvar 'viewctr) 1 2))
              ;;视图中心DCS
              (cons 11 (trans '(0 0 1) 2 0 t))
                                        ;来自目标的观察方向(wcs)
              (cons 12 (trans (getvar 'target) 1 0)) ;标点(WCS)
              (cons 72 1)                ;如果存在与此视图相关联的 UCS,则为 1,否则为
              (cons 110 (getvar 'ucsorg)) ;ucs原点
              (cons 111 (getvar 'ucsxdir)) ;ucs的X方向矢量
              (cons 112 (getvar 'ucsydir)) ;ucs的y方向矢量
            )
          )
        )
      )
      (setview (tblsearch "view" st_name))
    )
  )
  (setvar 'ucsicon 3)
  (setvar 'cmdecho 1)
  (princ)
)

(defun c:p ()
  (setq out nil)
  (setq        oviews (vla-get-views
                 (vla-get-activedocument (vlax-get-acad-object))
               )
  )
  (vlax-for each oviews
    (setq out (cons (vla-get-name each) out))
  )
  (setq out (reverse out))
  (if out
    (progn
      (xdrx_prompt "\n选择已经定义好的视图名称或输入序号<退出>:")
      (setq n         0
            dosv (mapcar '(lambda (x) (strcat (itoa (setq n (1+ n))) "-" x))
                         out
                 )
      )   
      (if (setq i (dos_popupmenu dosv))
        (command "view" "r" (nth i out))
      )
    )
  )
  (princ)
)


(defun Fsxm-Split (string strkey / po strlst xlen)
  (setq xlen (1+ (strlen strkey)))
  (while (setq po (vl-string-search strkey string))
    (setq strlst (cons (substr string 1 po) strlst))
    (setq string (substr string (+ po xlen)))
  )
  (reverse (cons string strlst))
)

本帖子中包含更多资源

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

x
 楼主| 发表于 2022-1-1 21:20 | 显示全部楼层
一次框选实现也应该可以
发表于 2022-1-1 23:23 来自手机 | 显示全部楼层
guosheyang 发表于 2022-1-1 21:20
一次框选实现也应该可以

你仔细看看我发的动图。(代码里面对话框需要doslib支持)
功能1:对话框一次性新增了三个视图(1目录,2墙表,3墙体平面图),视图名称可以对话框交互输入。
功能2:类似鼠标右键菜单的效果,快速切换之前定义好的视图。
发表于 2022-9-18 16:51 | 显示全部楼层
感谢大佬分享~
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-4-28 07:55 , Processed in 0.388447 second(s), 28 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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