YUYUFENG 发表于 2020-3-20 15:14:54

(已解决)怎么在新图层进行标注完成后返回当前图层

本帖最后由 YUYUFENG 于 2020-3-20 21:15 编辑

目的是在新图层进行标注完成后返回当前图层的程序,可是无法在新的目标图层进行标注。请高手帮忙改进一下,多谢!!

(defun c:gg(/ old_lay vv layer)
    (setq old_lay (getvar "clayer")) ;保存当前图层
    (setq vv (getvar "osmode")) ;保存当前捕捉方式
      
      (setq layer "1 标注")
            (if (not (tblsearch "layer" layer ))
            (progn
                                                            (command "layer" "new" "1 标注" "s" "1 标注" "C" 1 "" "L" "Continuous" "" "LW" 0"" "")
                                                )
            )
(COMMAND "clayer" layer) ;置当前图层
    (setvar "osmode" 37) ;设置新的捕捉方式
      
    (command "DIMLINEAR") ;线性标注
    (setvar "osmode" vv) ;恢复原先捕捉方式
    (setvar "clayer" old_lay) ;恢复原先图层
      (princ)
)

start4444 发表于 2020-3-20 15:42:29

可以换个思维,不动图层标好把标注改到目标层,或者用entmake 可以直接指定图层

bssurvey 发表于 2020-3-20 15:54:39

試試改成這樣
(defun c:gg(/ old_lay vv layer)                                                            
   (setq old_lay (getvar "clayer")) ;保存當前圖層                                          
   (setq vv (getvar "osmode")) ;保存當前捕捉方式                                          
   (setq layer1 "1 標注")                                                                  
   (if (not (tblsearch "layer" layer1))                                                   
   (command "layer" "new" "1 標注" "s" "1 標注" "C" 1 "" "L" "Continuous" "" "LW" 0"" "")
   )                                                                                       
   (command "clayer" layer1) ;置當前圖層                                                   
   (setvar "osmode" 37) ;設置新的捕捉方式                                                
   (command "DIMLINEAR") ;線性標注                                                         
   (setvar "osmode" vv) ;恢復原先捕捉方式                                                
   (setvar "clayer" old_lay) ;恢復原先圖層                                                
   (princ)                                                                                 
)                                                                                          

669423907 发表于 2020-3-20 20:00:22

本帖最后由 669423907 于 2020-3-20 20:02 编辑



(defun c:gg(/ old_lay vv layer)
    (setq old_lay (getvar "clayer")) ;保存当前图层
    (setq vv (getvar "osmode")) ;保存当前捕捉方式
      
      (setq layer "1 标注")
            (if (not (tblsearch "layer" layer ))
            (progn
                                                            (command "layer" "new" "1 标注" "s" "1 标注" "C" 1 "" "L" "Continuous" "" "LW" 0"" "")
                                                )
            )
(COMMAND "clayer" layer) ;置当前图层
    (setvar "osmode" 37) ;设置新的捕捉方式
      
    (command "DIMLINEAR") ;线性标注
(while(=(getvar "cmdactive")1)(command"\\"))
    (setvar "osmode" vv) ;恢复原先捕捉方式
    (setvar "clayer" old_lay) ;恢复原先图层
      (princ)
)








YUYUFENG 发表于 2020-3-20 21:05:08

bssurvey 发表于 2020-3-20 15:54
試試改成這樣
(defun c:gg(/ old_lay vv layer)                                                      ...

这个还是无法在标注图层进行标注,不过谢谢了。

YUYUFENG 发表于 2020-3-20 21:05:52

669423907 发表于 2020-3-20 20:00



完美达到我想要的要求了,谢谢大佬~~

sunny_8848 发表于 2020-3-20 23:06:10

669423907 发表于 2020-3-20 20:00




好用,多谢分享

e2002 发表于 2020-3-21 09:08:54

楼主这个问题已经有现成的方法,无需程序来做了。

现在Hatch,Dimension都提供了创建这些对象时,所在默认图层的系统变量:
HPLAYER ,DIMLAYER

即将发布的下一版本中,又新增了面向 Text 对象的 TEXTLAYER 系统变量。
至此,以往习惯使用的自动图层工具基本上可以不用了。

陈伟 发表于 2020-5-29 23:57:19

相当有帮助,学习了
页: [1]
查看完整版本: (已解决)怎么在新图层进行标注完成后返回当前图层