乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
楼主: jaredmccullough

[编程交流] VB使用la切换视口

[复制链接]

6

主题

33

帖子

27

银币

初来乍到

Rank: 1

铜币
30
发表于 2022-7-6 22:51:34 | 显示全部楼层
很抱歉,当我说“应用”时,我的意思是“打开”或“关闭”一个层。这只是一个有益的方面的例子。
 
我有一个层说“部门视口”,它有5个视口。。。。我“打开”该层,所有5个视口帧都会出现。但是,我必须逐个转到每个视口帧并打开MVIEW>才能显示视口对象。希望这能澄清一点。这个文件本身对于这个网站来说太大了,所以我举了一个例子,我可以用这个例子来描述我的意图
回复

使用道具 举报

44

主题

3166

帖子

2803

银币

中流砥柱

Rank: 25

铜币
557
发表于 2022-7-6 22:55:06 | 显示全部楼层
 
别担心;也许是我对术语产生了兴趣。感谢您的澄清。
 
 
再一次,也许我只是在这条阻力最小的道路上被挂断了。。。为什么首先要关闭MVIEW-->呢?
 
我只会问,当一个图层关闭时,该图层上的任何内容都不可见或可绘制。。。这就是为什么大多数人只需将其为视口指定的图层设置为“无打印”,以便它们可以始终保持可见,但视口帧本身不会打印。
 
代码可以做你想做的事情,我只是想先理解一下逻辑,如果有一个更简单的解决方案。
 
HTH公司
回复

使用道具 举报

6

主题

33

帖子

27

银币

初来乍到

Rank: 1

铜币
30
发表于 2022-7-6 22:59:16 | 显示全部楼层
我给你一点想象的东西,想象一下:
 
布局1中间的单个方形视口,其框架设置为图层
“Viewport 1”,当前该层处于活动状态,并且Viewport MVIEW>处于打开状态。现在,我已经创建了5个其他视口(围绕它的小圆形视口)。这些视口的框架设置在“部门视口”层上。该层仅用于少数目的,仅在需要时“打开”,但现在“关闭”。如果我没有MVIEW>关闭这些较小的视口,当我关闭图层时,只有帧会消失,而不是对象,所以要让它们打开,我必须分别MVIEW>关闭每个,然后关闭“部门视口”图层。
 
这一理论在许多其他布局和视口中都有使用,这就是为什么我真的希望提出一些东西。
回复

使用道具 举报

44

主题

3166

帖子

2803

银币

中流砥柱

Rank: 25

铜币
557
发表于 2022-7-6 23:02:40 | 显示全部楼层
可以安全地假设您正在通过内置命令/菜单/按钮等修改这些视口层吗。?
回复

使用道具 举报

6

主题

33

帖子

27

银币

初来乍到

Rank: 1

铜币
30
发表于 2022-7-6 23:03:17 | 显示全部楼层
除了为图层指定视口帧并使用MVIEW关闭或打开带有它们的对象之外,我目前还没有对图层做任何操作。
回复

使用道具 举报

6

主题

33

帖子

27

银币

初来乍到

Rank: 1

铜币
30
发表于 2022-7-6 23:09:26 | 显示全部楼层
黑匣子你还在吗。。。对不起,我出差时间过长。。。。。或者其他人能帮我吗?
回复

使用道具 举报

44

主题

3166

帖子

2803

银币

中流砥柱

Rank: 25

铜币
557
发表于 2022-7-6 23:11:04 | 显示全部楼层
还在这里。。。回到这里,用你的例子。。。。
 
启用“Viewport 1”时,所有未启用“Viewport 1”MVIEW-->的视口关闭。。。然后,当从“Viewport 1”切换到“Department Viewports”(或任何其他层)时,“Viewport 1”上的所有视口都变为MVIEW-->关闭,“Department Viewports”上的视口变为MVIEW-->打开?
 
如果我正确理解你;柠檬挤压。
 
  1. (vl-load-com)
  2. ;;;--------------------------------------------------------------------;
  3. (defun ViewportReactor:Start ()
  4. (or *ViewportReactor*
  5.      (setq *ViewportReactor*
  6.             (vlr-sysvar-reactor
  7.               "My viewport reactor "
  8.               '(
  9.                 (:vlr-sysvarchanged . ViewportCallback:SysVarChanged)
  10.                )
  11.             )
  12.      )
  13. )
  14. (princ)
  15. )
  16. ;;;--------------------------------------------------------------------;
  17. (defun ViewportCallback:SysVarChanged (rea var / clayer)
  18. (if (and (= "CLAYER" (strcase (car var))) (cadr var))
  19.    (vlax-for x (vla-get-paperspace
  20.                  (vla-get-activedocument
  21.                    (vlax-get-acad-object)
  22.                  )
  23.                )
  24.      (if (= "AcDbViewport" (vla-get-objectname x))
  25.        (progn
  26.          (setq clayer (strcase (getvar 'clayer)))
  27.          (vl-catch-all-apply
  28.            'vla-put-viewporton
  29.            (list
  30.              x
  31.              (if (= clayer (strcase (vla-get-layer x)))
  32.                :vlax-true
  33.                :vlax-false
  34.              )
  35.            )
  36.          )
  37.          (vla-update x)
  38.        )
  39.      )
  40.    )
  41. )
  42. (princ)
  43. )
  44. ;;;--------------------------------------------------------------------;
  45. (ViewportReactor:Start)
  46. (princ)

 
[编辑]**此时不考虑锁定层。
回复

使用道具 举报

44

主题

3166

帖子

2803

银币

中流砥柱

Rank: 25

铜币
557
发表于 2022-7-6 23:15:25 | 显示全部楼层
... 和。NET(包括锁定层检查);快速编写,未经测试:
 
  1. using Autodesk.AutoCAD.ApplicationServices;
  2. using Autodesk.AutoCAD.DatabaseServices;
  3. using Autodesk.AutoCAD.Runtime;
  4. using acApp = Autodesk.AutoCAD.ApplicationServices.Application;
  5. using System.Collections.Generic;
  6. [assembly: ExtensionApplication(typeof(CADTutor.Sample.ViewportsToggle.Events))]
  7. namespace CADTutor.Sample.ViewportsToggle
  8. {
  9.    class Events : IExtensionApplication
  10.    {
  11.        void IExtensionApplication.Initialize()
  12.        {
  13.            acApp.DocumentManager.DocumentCreated += onDocumentCreated;
  14.            Document doc = acApp.DocumentManager.MdiActiveDocument;
  15.            doc.Database.SystemVariableChanged += onSystemVariableChanged;
  16.        }
  17.        void IExtensionApplication.Terminate()
  18.        {
  19.        }
  20.        static void onDocumentCreated(object sender, DocumentCollectionEventArgs e)
  21.        {
  22.            Document doc = e.Document;
  23.            if (doc != null)
  24.                doc.Database.SystemVariableChanged += onSystemVariableChanged;
  25.        }
  26.        static void onSystemVariableChanged(object sender,
  27.            Autodesk.AutoCAD.DatabaseServices.SystemVariableChangedEventArgs e)
  28.        {
  29.            if (e.Changed == true && e.Name.ToUpper() == "CLAYER")
  30.            {
  31.                Database db = HostApplicationServices.WorkingDatabase;
  32.                using (Transaction tr = db.TransactionManager.StartOpenCloseTransaction())
  33.                {
  34.                    BlockTableRecord btr =
  35.                        (BlockTableRecord)tr.GetObject(
  36.                            SymbolUtilityServices.GetBlockPaperSpaceId(db),
  37.                            OpenMode.ForRead);
  38.                    string clayer = db.Clayer.ToString().ToUpper();
  39.                    List<LayerTableRecord> layersToLock = new List<LayerTableRecord>();
  40.                    foreach (ObjectId id in btr)
  41.                    {
  42.                        Viewport vp =
  43.                            tr.GetObject(id, OpenMode.ForRead) as Viewport;
  44.                        if (vp != null)
  45.                        {
  46.                            string vpLayer = vp.Layer.ToUpper();
  47.                            LayerTableRecord ltr =
  48.                                (LayerTableRecord)tr.GetObject(vp.LayerId, OpenMode.ForWrite);
  49.                            if (ltr.IsLocked == true)
  50.                            {
  51.                                layersToLock.Add(ltr);
  52.                                ltr.IsLocked = false;
  53.                            }
  54.                            vp.UpgradeOpen();
  55.                            if (clayer == vp.Layer.ToUpper())
  56.                                vp.On = true;
  57.                            else
  58.                                vp.On = false;
  59.                        }
  60.                    }
  61.                    foreach (LayerTableRecord ltr in layersToLock)
  62.                        ltr.IsLocked = true;
  63.                    tr.Commit();
  64.                }
  65.            }
  66.        }
  67.    }
  68. }
回复

使用道具 举报

6

主题

33

帖子

27

银币

初来乍到

Rank: 1

铜币
30
发表于 2022-7-6 23:16:18 | 显示全部楼层
自从我第一篇文章以来,我可能忘记了提到我缺乏知识或与VLISP的交互或在Autocad中编码,但我应该把这些代码放在哪里呢?我看过VLISP编辑器,不知道代码是否要插入到那里。再次感谢您在BlackBox项目中帮助我
回复

使用道具 举报

44

主题

3166

帖子

2803

银币

中流砥柱

Rank: 25

铜币
557
发表于 2022-7-6 23:21:09 | 显示全部楼层
LISP,不同于。NET,是文档驻留的,必须将其加载到每个图形中,代码才能正常运行。。。这就是为什么你会看到如此多的LISP开发人员深情地谈论Acad。lsp(默认情况下每个会话加载一次),AcadDoc。lsp(每次打开图形时加载)和自动加载功能(允许按需加载。加载的lsp占用内存,实际加载需要一点时间)。
 
要尝试在论坛中发布的LISP,只需将代码粘贴到一个新的空文本文件中,并用“.lsp”文件扩展名保存它。。。然后,可以将其拖放到AutoCAD会话中进行测试,或使用AcadDoc中的加载功能。lsp等。。。有些人使用Appload Startup Suite,但我总是更喜欢Acad。lps和阿卡多克。而不是lsp(两个用户定义的文件)。
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

QQ|关于我们|小黑屋|乐筑天下 繁体中文

GMT+8, 2025-3-4 11:15 , Processed in 0.507491 second(s), 70 queries .

© 2020-2025 乐筑天下

联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表