明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 3621|回复: 9

[讨论] 视口的图层解冻的VLA方法

[复制链接]
发表于 2013-10-5 09:50 | 显示全部楼层 |阅读模式
50明经币
下面是COMMAND的方法:

;解冻指定视口的指定图层 视口名(图元名),图层列表
;(xx-jdjd-name s1 lst)
(defun xx-jdjd-name (s1 lst)
  (foreach x lst
    (if(and(member (cons 331 (tblobjname "layer" x)) (entget s1)))
      (command "_.vplayer" "t" x "s" s1 "" "")
    )
  )
  (princ)
)


是否可以用VLA方法来实现?

"觉得好,就打赏"
还没有人打赏,支持一下

本帖被以下淘专辑推荐:

  • · 学习|主题: 24, 订阅: 0
发表于 2013-10-5 16:46 | 显示全部楼层
支持炫版主一下。。。。下面高手来说说
回复

使用道具 举报

发表于 2013-10-5 21:06 | 显示全部楼层
FreezeLayersInViewport等同个函数都没有在ActiveX模型中公开嘛,好像没法搞了。

要么用vl-cmdf来代替command函数来安慰一下自己?
回复

使用道具 举报

发表于 2014-1-14 22:45 | 显示全部楼层
通过修改视口的扩展数据可以冻结图层
回复

使用道具 举报

发表于 2014-1-15 12:37 | 显示全部楼层
忘了出处。。。
  1. (defun c:test (/ lst ss)
  2.   (setq lst '("dim" "CENTER"))
  3.   (setq ss (ssget ":s" '((0 . "VIEWPORT"))))
  4.   (if ss
  5.     (progn
  6.       (FreezeLayersInViewPort (ssname ss 0) lst)
  7.     )
  8.     (princ "\n没有选择到视口。")
  9.   ) ;if
  10.   (princ)
  11. )
  12. ;;;;;;;;
  13. (defun FreezeLayersInViewPort (en            lst                 /
  14.                                VPortObj            FrozenLayerList
  15.                                count            pos                 DataValueList
  16.                                DataTypeList DataType         DataValue
  17.                               )
  18.   (setq VPortObj (vlax-ename->vla-object en))
  19.   (setq FrozenLayerList (ax:GetFrozenLaysInVport VPortObj))
  20.   (setq count 0)
  21.   (foreach lay lst
  22.     (if        (and (not (MEMBER lay FrozenLayerList)) (tblsearch "layer" lay))
  23.       (progn
  24.         (setq count (1+ count))
  25.         (setq
  26.           pos (vl-position (vlax-make-variant "}") DataValueList)
  27.         )
  28.         (setq DataValueList (append
  29.                               (GetSubList DataValueList 0 (1- pos))
  30.                               (list (vlax-make-variant lay vlax-vbString)
  31.                               )
  32.                               (GetSubList
  33.                                 DataValueList
  34.                                 pos
  35.                                 (1- (length DataValueList))
  36.                               )
  37.                             )
  38.               DataTypeList  (append
  39.                               (GetSubList DataTypeList 0 (1- pos))
  40.                               (list 1003)
  41.                               (GetSubList
  42.                                 DataTypeList
  43.                                 pos
  44.                                 (1- (length DataTypeList))
  45.                               )
  46.                             )
  47.         )
  48.       )
  49.     )
  50.   )
  51.   (if (> count 0)
  52.     (progn
  53.       (setq DataType (vlax-make-safearray
  54.                        vlax-vbInteger
  55.                        (cons 0 (1- (length DataTypeList)))
  56.                      )
  57.       )
  58.       (vlax-safearray-fill DataType DataTypeList)
  59.       (setq DataValue (vlax-make-safearray
  60.                         vlax-vbVariant
  61.                         (cons 0 (1- (length DataValueList)))
  62.                       )
  63.       )
  64.       (vlax-safearray-fill DataValue DataValueList)
  65.       (vla-SetXdata VPortObj DataType DataValue)
  66.       (vla-update VPortObj)
  67.       (vla-put-ViewPortOn VPortObj :vlax-false)
  68.       (vla-put-ViewPortOn VPortObj :vlax-true)
  69.       (princ (strcat "\n" (itoa count) "个图层已冻结。"))
  70.     )
  71.     (princ "\n没有图层被冻结。")
  72.   )

  73.   (princ)
  74. )
  75. ;;得到视口中已冻结的图层列表
  76. (defun ax:GetFrozenLaysInVport
  77.        (VPortObj / ss TypeOut ValueOut tmp)
  78.   (vla-GetXdata VPortObj "" 'TypeOut 'ValueOut)
  79.   (setq        DataTypeList  (vlax-safearray->list TypeOut)
  80.         DataValueList (vlax-safearray->list ValueOut)
  81.   )
  82.   (setq tmp (mapcar 'cons DataTypeList DataValueList))
  83.   (mapcar 'vlax-variant-value
  84.           (mapcar 'cdr
  85.                   (vl-remove-if
  86.                     '(lambda (x) (/= (car x) 1003))
  87.                     tmp
  88.                   )
  89.           )
  90.   )
  91. )
  92. ;;取得子表
  93. (defun GetSubList (lst m n / i sublst)
  94.   (setq sublst '())
  95.   (if (and (>= m 0) (>= n 0) (>= n m) (<= n (1- (length lst))))
  96.     (progn
  97.       (setq i m)
  98.       (repeat (1+ (- n m))
  99.         (setq sublst (append sublst (list (nth i lst))))
  100.         (setq i (1+ i))
  101.       )
  102.       sublst
  103.     )
  104.     nil
  105.   )
  106. )
回复

使用道具 举报

发表于 2014-1-15 14:24 | 显示全部楼层
顶一个,留个记号
回复

使用道具 举报

发表于 2015-1-14 14:01 | 显示全部楼层
借口代码,留名
回复

使用道具 举报

发表于 2018-1-29 00:33 | 显示全部楼层
edata 发表于 2014-1-15 12:37
忘了出处。。。

好用吗好用吗好用吗
回复

使用道具 举报

发表于 2019-2-22 14:17 | 显示全部楼层
不错的帖子 顶一下
回复

使用道具 举报

发表于 2019-5-6 03:06 | 显示全部楼层
例如:解冻或冻结指定视口

(defun c:ra ();;指定视口解冻所有图层
(command "vplayer" "t" "*"))

(defun c:rr1 ();;指定视口冻结特定图层
(command "vplayer" "f" "Defpoints,地花,地花--尺寸,梁,墙 尺寸放线,天花 灯具尺寸,天花 灯具设备,天花 造型,天花 造型尺寸"))
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-21 05:11 , Processed in 0.234997 second(s), 25 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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