找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 1269|回复: 12

[求助] 视口内冻结图层问题

[复制链接]

已领礼包: 2476个

财富等级: 金玉满堂

发表于 2017-12-29 13:44:13 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

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

×
本帖最后由 q3_2006 于 2017-12-29 13:45 编辑

(progn
(defun Vp:GetXdata (Vpobj / xt xd)
  (vla-getxdata VpObj "ACAD" 'xt 'xd)
  (list (safearray-value xt) (safearray-value xd))
)
(defun Vp:SetXdata (Vpobj xtype xdata /)
  (vla-setxdata
    VpObj
    (vlax-safearray-fill
      (vlax-make-safearray
    vlax-vbInteger
    (cons 0 (1- (length xtype)))
      )
      xtype
    )
    (vlax-safearray-fill
      (vlax-make-safearray
    vlax-vbvariant
    (cons 0 (1- (length xdata)))
      )
      xdata
    )
  )
  (vla-update VpObj)
  (vla-display VpObj :vlax-false)
  (vla-display VpObj :vlax-true)
)
(defun Vp:GetxdataFrzlyr (xt xd / lyrlst)
  (mapcar '(lambda (a b)
         (if (= a 1003)
           (setq lyrlst (cons (strcase (variant-value b)) lyrlst))
         )
       )
      xt
      xd
  )
  lyrlst
)
(defun vp:PutFrzLyr (xt xd lyrlst / xtt xdd flyr l)
  (if lyrlst
    (progn (setq xt (reverse (vl-remove 1003 xt))
         xd (reverse xd)
         l  (list (car xd) (cadr xd))
         xd (vl-member-if
              '(lambda (x) (equal (variant-value x) "{"))
              (cddr xd)
            )
         xd (append l xd)
       )
       (setq flyr (mapcar '(lambda (x)
                 (list 1003
                       (vlax-make-variant x vlax-vbstring)
                 )
                   )
                  lyrlst
              )
         xtt  (reverse (append (list (car xt) (cadr xt))
                       (mapcar 'car flyr)
                       (cddr xt)
                   )
              )
         xdd  (reverse (append (list (car xd) (cadr xd))
                       (mapcar 'cadr flyr)
                       (cddr xd)
                   )
              )
       )
       (list xtt xdd)
    )
    (if    (member 1003 xt)
      (progn (setq xt (reverse (vl-remove 1003 xt))
           xd (reverse xd)
           l  (list (car xd) (cadr xd))
           xd (vl-member-if
            '(lambda (x) (equal (variant-value x) "{"))
            (cddr xd)
              )
           xd (append l xd)
         )
         (list (reverse xt) (reverse xd))
      )
      (list xt xd)
    )
  )
)
;;
(defun Vp:GetFrzLayer (VpObj / xt xd)
  (mapcar 'set '(xt xd) (vp:getxdata vpobj))
  (vp:getxdataFrzlyr xt xd)
)
(defun Vp:Frzlayer (VpObj lyrlst / xd xt oldlyrlst xdata llyrlst)
  (mapcar 'set '(xt xd) (vp:getxdata vpobj))
  (if lyrlst
    (progn
      (setq lyrlst (mapcar 'strcase lyrlst))
      (if (setq    oldlyrlst (vp:getxdatafrzlyr xt xd)
        llyrlst      oldlyrlst
      )
    (mapcar    '(lambda (x)
           (if (not (member x oldlyrlst))
             (setq oldlyrlst (append (list x) oldlyrlst))
           )
         )
        lyrlst
    )
    (setq oldlyrlst lyrlst)
      )
      (if (not (equal oldlyrlst llyrlst))
    (progn
      (setq xdata (vp:putfrzlyr xt xd oldlyrlst))
      (Vp:SetXdata Vpobj (car xdata) (cadr xdata))
    )
      )
    )
  )
)
(defun Vp:ThwLayer
       (VpObj lyrlst / properties pSp nVp oldFrzlyr lfrzlyr xt xd)
  (mapcar 'set '(xt xd) (vp:getxdata vpobj))
  (setq    oldFrzlyr (vp:getxdatafrzlyr xt xd)
    lfrzlyr      oldfrzlyr
  )
  (mapcar '(lambda (x) (setq oldfrzlyr (vl-remove x oldFrzlyr)))
      (mapcar 'strcase lyrlst)
  )
  (if (not (equal oldfrzlyr lfrzlyr))
    (progn
      (setq properties
         '("CustomScale"      "Direction"         "DisplayLocked"
           "GridOn"          "Layer"         "LensLength"
           "Linetype"      "LinetypeScale"    "Lineweight"
           "SnapBasePoint"      "SnapOn"         "SnapRotationAngle"
           "StandardScale"      "StandardScale2"   "Target"
           "TrueColor"      "TwistAngle"         "UCSIconAtOrigin"
           "UCSIconOn"      "ViewportOn"         "Visible"
          )
      )
      (mapcar '(lambda (x)
         (if (vlax-property-available-p VpObj x)
           (set (read x) (vlax-get-property VpObj x))
         )
           )
          properties
      )
      (setq pSp    (vla-get-PaperSpace
          (vla-get-ActiveDocument
            (vlax-get-acad-object)
          )
        )
        nVp    (vla-AddPViewport
          pSp
          (vla-get-center VpObj)
          (vla-get-width VpObj)
          (vla-get-height VpObj)
        )
      )
      (setq xdata (vp:putfrzlyr xt xd oldFrzlyr))
      (Vp:SetXdata nVp (car xdata) (cadr xdata))
      (mapcar '(lambda (x)
         (if (eval (read x))
           (vl-catch-all-apply
             'vlax-put-property
             (list nVp x (eval (read x)))
           )
         )
           )
          properties
      )
      (mapcar '(lambda (x) (set (read x) nil)) properties)
      (vla-delete vpobj)
    )
  )
)
)
这是E版的视口内解冻图层的代码..但我的这个图里有个网格层..无法用代码解冻..不知道是什么原因..请高手帮忙测试一下..谢谢

网格层无法视口内解冻.rar

40.27 KB, 下载次数: 13, 下载积分: D豆 -1 , 活跃度 1

论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

已领礼包: 2476个

财富等级: 金玉满堂

 楼主| 发表于 2017-12-29 13:49:24 | 显示全部楼层
补充一句..其它图层是能解冻的..唯一就这个图层不能哈..网格
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 2476个

财富等级: 金玉满堂

 楼主| 发表于 2017-12-29 14:05:28 | 显示全部楼层
另外我不太明白..解冻为什么要删除原视口..
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 2476个

财富等级: 金玉满堂

 楼主| 发表于 2017-12-29 14:11:28 | 显示全部楼层
找到问题了...网格图层设置了视口内冻结..
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 2476个

财富等级: 金玉满堂

 楼主| 发表于 2017-12-29 14:13:05 | 显示全部楼层
现在请大师来解决我的疑问..不能只更新不删除吗...CAD里操作后句柄没有变化的..可见没有删除原视口
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 40个

财富等级: 招财进宝

发表于 2017-12-29 14:28:23 | 显示全部楼层
命令: (setq a (xdrx_getpropertyvalue e "FrozenLayerList"))
(("网格" <图元名: 7ff72670dad0>))

命令: (xdrx_setpropertyvalue e "thawlayersinviewport" a)

  1. (defun c:tt ()
  2.   (if (and (setq e (car (entsel "\n拾取视口")))
  3.            (setq lst (xdrx_getpropertyvalue e "FrozenLayerList"))
  4.       )
  5.     (progn (xdrx_setpropertyvalue e "thawlayersinviewport" lst))
  6.   )
  7.   (princ)
  8. )
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 2476个

财富等级: 金玉满堂

 楼主| 发表于 2017-12-29 14:35:41 | 显示全部楼层

如果版本低于2011呢
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 859个

财富等级: 财运亨通

发表于 2017-12-29 14:38:18 | 显示全部楼层

autolisp 和 ActiveX 没有提供更新的方法,只能重建(ARX 和 C#除外)

论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 2476个

财富等级: 金玉满堂

 楼主| 发表于 2017-12-29 14:39:19 | 显示全部楼层

这样呀..知道了..谢谢哈..
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 40个

财富等级: 招财进宝

发表于 2017-12-29 14:40:17 | 显示全部楼层

上面代码和低于2011有什么关系吗? 只要能加载API的,就能执行。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 2476个

财富等级: 金玉满堂

 楼主| 发表于 2017-12-29 14:43:24 | 显示全部楼层

好..明白..
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 6056个

财富等级: 富甲天下

发表于 2017-12-30 00:16:17 | 显示全部楼层
学习了。         
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 22个

财富等级: 恭喜发财

发表于 2021-7-20 03:07:08 | 显示全部楼层
学习了,谢谢楼主提供的源码
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2024-11-15 13:26 , Processed in 0.486796 second(s), 56 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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