明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 753|回复: 2

【K:DrawMkBox】矩形对角点生成标记叉并判断是否关闭视口

[复制链接]
发表于 2024-4-25 23:02:30 | 显示全部楼层 |阅读模式
本帖最后由 kucha007 于 2024-4-25 23:11 编辑

论坛关于裁剪后的视口讨论比较少,分享出来做点贡献:

  1. ;根据矩形对角点生成标记叉并判断是否关闭视口
  2. (defun K:DrawMkBox (StaPT DiaPT Col / X1 x2 Y1 y2 PtLst TgtEn ObjLst TmpMode XX)
  3.     ;根据两点框选收集所有显示的视口成对象表(含裁剪视口)
  4.     (defun K:GetVP4TwoPT (StaPT DiaPT / SSVP i en ent obj ObjLst)
  5.         (setq ObjLst nil)
  6.         (setq SSVP
  7.             (ssget "C" StaPT DiaPT
  8.               (list
  9.                 (cons -4 "<OR")
  10.                   (cons -4 "<AND")
  11.                     (cons -4 "<OR")
  12.                       (cons 0 "LWPOLYLINE") ;多段线
  13.                       (cons 0 "ELLIPSE") ;椭圆
  14.                       (cons 0 "CIRCLE") ;圆
  15.                     (cons -4 "OR>")
  16.                     ;(cons 102 "{ACAD_REACTORS");视口裁剪
  17.                   (cons -4 "AND>")
  18.                   (cons 0 "VIEWPORT")
  19.                 (cons -4 "OR>")
  20.               )
  21.             )
  22.         );选择视口(含裁剪)
  23.         (if SSVP
  24.           (progn
  25.               (repeat (setq i (sslength SSVP))
  26.                 (setq en (ssname SSVP (setq i (1- i)))
  27.                       ent (entget en)
  28.                 )
  29.                 (if
  30.                     (and  
  31.                       (setq ent (member '(102 . "{ACAD_REACTORS") ent))
  32.                       (setq ent (member '(102 . "}") (reverse ent)))
  33.                     )
  34.                     (setq en (cdr (assoc 330 ent)))
  35.                 );如果视口裁剪就更新图元名
  36.                 (if   
  37.                     (and
  38.                         (eq "VIEWPORT" (Cdr (Assoc 0 (Entget en))));是视口
  39.                         (eq :vlax-true (vla-get-viewporton (setq obj (vlax-ename->vla-object en))));视口显示
  40.                         (not (member obj ObjLst));选择集去重
  41.                     )
  42.                     (setq ObjLst (cons obj ObjLst))
  43.                 )
  44.               )
  45.           )
  46.         )
  47.         ObjLst
  48.     )
  49.     (progn ;生成框叉
  50.         (setq X1 (max (car StaPT) (car DiaPT))
  51.               x2 (min (car StaPT) (car DiaPT))
  52.               Y1 (max (cadr StaPT) (cadr DiaPT))
  53.               y2 (min (cadr StaPT) (cadr DiaPT))
  54.         )
  55.         (setq PtLst
  56.           (list
  57.             (list X1 Y1);左上
  58.             (list X1 y2);左下
  59.             (list x2 Y1);右上
  60.             (list x2 y2);右下
  61.             (list X1 Y1);左上
  62.           )
  63.         )
  64.         (regapp "RvData");为扩展数据注册程序名
  65.         (setq TgtEn
  66.           (entmakex
  67.             (append
  68.               (list '(0 . "LWPOLYLINE")
  69.                     '(100 . "AcDbEntity")
  70.                     '(100 . "AcDbPolyline")
  71.                     (cons 6 "Continuous");实线
  72.                     (cons 62 Col);颜色
  73.                     (cons 90 (length PtLst));顶点数
  74.                     (cons 70 1);闭合
  75.                     (cons 43 0.5);线宽0.5
  76.               )
  77.               (mapcar '(lambda (pt) (cons 10 (trans pt 1 0))) PtLst)
  78.               (list (list -3 (list "RvData" (cons 1000 "MkBox"))))
  79.             )
  80.           );绘制外围矩形
  81.         )
  82.     )
  83.     (if
  84.       (and
  85.         (eq (getvar "TILEMODE") 0)
  86.         (eq (getvar "CVPORT") 1)
  87.         (setq ObjLst (K:GetVP4TwoPT StaPT DiaPT))
  88.         (progn
  89.             (initget "Y N");非零非负值
  90.             (setq TmpMode (cond
  91.                             ((getkword (strcat "关闭显示下方视口避免卡顿?:[Y/N]: <N>")))
  92.                             ("N")
  93.                           )
  94.             )
  95.         );获取转换模式
  96.         (eq TmpMode "Y")
  97.       );布局空间且有视口
  98.       (foreach XX ObjLst (vla-put-ViewportOn XX :vlax-false));关闭视口
  99.     )
  100.     TgtEn
  101. )



用法:
  1. (K:DrawMkBox (getpoint) (getpoint) 1)

本帖子中包含更多资源

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

x
发表于 2024-4-26 07:57:51 | 显示全部楼层
谢谢分享  快捷键多少啊
发表于 2024-4-26 11:26:14 | 显示全部楼层
感谢大佬分享
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-11-28 22:12 , Processed in 0.174134 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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