ILoveMadoka 发表于 2022-7-5 20:03:27

如何使一个例程成为子ro

我想创建一个新线程,因为这是一个不同的问题,即使它是从以前的线程。
 
因为我不知道有多少字体实例需要更改(SLDTEXTSTYLE),所以我想创建一个计数器。
 
http://www.cadtutor.net/forum/showthread.php?91375http://
 
仔细研究后,我发现了一种从这个线程创建计数器编号的方法:
 
http://www.cadtutor.net/forum/archive/index.php/t-76290.html
 
如何使CNT成为子例程并从C:SWT调用它
 
(defun c:cnt ()
(setq la (cdr (assoc 2 (tblnext "STYLE" T))))
(setq lal (list la))

(while (/= (setq la (cdr (assoc 2 (tblnext "STYLE")))) nil)
      (setq lal (append lal (list la))
)
      )
          (setq LEN (length lal))
)
 
 
(defun c:swt (/ i s)

(Princ "\nFinds all SW Text Styles, replaces with ROMANS Font:")
(if (not (tblsearch "STYLE" "ROMANS"))
   (progn
    (command "_.STYLE" "ROMANS" "ROMANS")
    (while (> (getvar "CMDACTIVE") 0)
         (command ""))))

(setq i 0)
(repeat 9   ; All my LEN from the subroutine here?
(setq s (strcat "SLDTEXTSTYLE" (itoa i)))
(if (tblsearch "STYLE" s)
      (progn
      (command "_.STYLE" s "ROMANS")
      (while (> (getvar "CMDACTIVE") 0)
               (command ""))))
(setq i (1+ i)))

(princ))
 
 
当然,如果有“更好的方法”的话,我也会敞开心扉!!
 
非常感谢!

ILoveMadoka 发表于 2022-7-5 20:19:37

解决了我自己的问题。
考虑到我在幼儿园的编程技能,有没有更好的方法来实现这一切?
 
 
(defun c:swt (/ i s la lal len)

(Princ
   "\nFinds all SolidWorks Text Styles, replaces with ROMANS Font:"
)

(setq la (cdr (assoc 2 (tblnext "STYLE" T))))
(setq lal (list la))

(while (/= (setq la (cdr (assoc 2 (tblnext "STYLE")))) nil)
   (setq lal (append lal (list la))
   )
)
(setq LEN (length lal))

(if (not (tblsearch "STYLE" "ROMANS"))
   (progn
   (command "_.STYLE" "ROMANS" "ROMANS")
   (while (> (getvar "CMDACTIVE") 0)
   (command "")
   )
   )
)

(setq i 0)
(repeat LEN                ; All my LEN from the subroutine here
   (setq s (strcat "SLDTEXTSTYLE" (itoa i)))
   (if    (tblsearch "STYLE" s)
   (progn
   (command "_.STYLE" s "ROMANS")
   (while (> (getvar "CMDACTIVE") 0)
   (command "")
   )
   )
   )
   (setq i (1+ i))
)

(princ)
)

jdiala 发表于 2022-7-5 20:38:11

不需要柜台。只需检查文本样式的名称。
 
(defun C:swt ()
(vlax-map-collection
(vla-get-textstyles
   (vla-get-activedocument
   (vlax-get-acad-object)
   )
)
(function
   (lambda ( x / n)
   (if
       (or
         (=(setq n(strcase (vla-get-name x))) "ROMANS")
                (wcmatch n "SLDTEXTSTYLE*")
      )
      (if
          (not (= "ROMANS" (vla-get-fontfile x)))
          (vla-put-fontfile x "ROMANS.SHX")
      )
   )
   )
)
)
(princ n)
)

pBe 发表于 2022-7-5 20:49:47

我不理解c:cnt例程ILoveMadoka的逻辑。
 
但是如果你计划在一个例程的一个地方使用一个“子例程”,那么创建一个“子例程”是没有意义的
 
(Defun c:something()(废话)(while;或repeat(子程序);

ILoveMadoka 发表于 2022-7-5 21:02:42

这是炸弹!
 
谢谢
 
 

ILoveMadoka 发表于 2022-7-5 21:14:54

pBe,
 
我的原始代码运行了一定数量的实例。
因为我并不总是知道我会找到多少,我需要一个计数器。
 
我找到了一种计算实例数的方法
我需要改变密码,但我不知道如何将这两个人结合在一起。
 
当时我想到了“子程序”
 
新手思维。。
页: [1]
查看完整版本: 如何使一个例程成为子ro