乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
查看: 11|回复: 5

[编程交流] 如何使一个例程成为子ro

[复制链接]

88

主题

346

帖子

281

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
423
发表于 2022-7-5 20:03:27 | 显示全部楼层 |阅读模式
我想创建一个新线程,因为这是一个不同的问题,即使它是从以前的线程。
 
因为我不知道有多少字体实例需要更改(SLDTEXTSTYLE),所以我想创建一个计数器。
 
http://www.cadtutor.net/forum/showthread.php?91375http://
 
仔细研究后,我发现了一种从这个线程创建计数器编号的方法:
 
http://www.cadtutor.net/forum/archive/index.php/t-76290.html
 
如何使CNT成为子例程并从C:SWT调用它
 
  1. (defun c:cnt ()
  2. (setq la (cdr (assoc 2 (tblnext "STYLE" T))))
  3. (setq lal (list la))
  4.   (while (/= (setq la (cdr (assoc 2 (tblnext "STYLE")))) nil)
  5.       (setq lal (append lal (list la))
  6.   )
  7.       )
  8.           (setq LEN (length lal))
  9. )

 
 
  1. (defun c:swt (/ i s)
  2. (Princ "\nFinds all SW Text Styles, replaces with ROMANS Font:")
  3. (if (not (tblsearch "STYLE" "ROMANS"))
  4.    (progn
  5.     (command "_.STYLE" "ROMANS" "ROMANS")
  6.     (while (> (getvar "CMDACTIVE") 0)
  7.            (command ""))))
  8. (setq i 0)
  9. (repeat 9     ; All my LEN from the subroutine here?
  10.   (setq s (strcat "SLDTEXTSTYLE" (itoa i)))
  11.   (if (tblsearch "STYLE" s)
  12.       (progn
  13.         (command "_.STYLE" s "ROMANS")
  14.         (while (> (getvar "CMDACTIVE") 0)
  15.                (command ""))))
  16.   (setq i (1+ i)))
  17. (princ))

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

使用道具 举报

88

主题

346

帖子

281

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
423
发表于 2022-7-5 20:19:37 | 显示全部楼层
解决了我自己的问题。
考虑到我在幼儿园的编程技能,有没有更好的方法来实现这一切?
 
 
  1. (defun c:swt (/ i s la lal len)
  2. (Princ
  3.    "\nFinds all SolidWorks Text Styles, replaces with ROMANS Font:"
  4. )
  5. (setq la (cdr (assoc 2 (tblnext "STYLE" T))))
  6. (setq lal (list la))
  7. (while (/= (setq la (cdr (assoc 2 (tblnext "STYLE")))) nil)
  8.    (setq lal (append lal (list la))
  9.    )
  10. )
  11. (setq LEN (length lal))
  12. (if (not (tblsearch "STYLE" "ROMANS"))
  13.    (progn
  14.      (command "_.STYLE" "ROMANS" "ROMANS")
  15.      (while (> (getvar "CMDACTIVE") 0)
  16.    (command "")
  17.      )
  18.    )
  19. )
  20. (setq i 0)
  21. (repeat LEN                ; All my LEN from the subroutine here
  22.    (setq s (strcat "SLDTEXTSTYLE" (itoa i)))
  23.    (if    (tblsearch "STYLE" s)
  24.      (progn
  25.    (command "_.STYLE" s "ROMANS")
  26.    (while (> (getvar "CMDACTIVE") 0)
  27.      (command "")
  28.    )
  29.      )
  30.    )
  31.    (setq i (1+ i))
  32. )
  33. (princ)
  34. )
回复

使用道具 举报

0

主题

99

帖子

99

银币

初来乍到

Rank: 1

铜币
0
发表于 2022-7-5 20:38:11 | 显示全部楼层
不需要柜台。只需检查文本样式的名称。
 
  1. (defun C:swt ()
  2. (vlax-map-collection
  3. (vla-get-textstyles
  4.    (vla-get-activedocument
  5.      (vlax-get-acad-object)
  6.    )
  7. )
  8. (function
  9.    (lambda ( x / n  )
  10.      (if
  11.        (or
  12.          (=  (setq n(strcase (vla-get-name x))) "ROMANS")
  13.                 (wcmatch n "SLDTEXTSTYLE*")
  14.         )
  15.         (if
  16.           (not (= "ROMANS" (vla-get-fontfile x)))
  17.           (vla-put-fontfile x "ROMANS.SHX")
  18.         )
  19.      )
  20.    )
  21. )
  22. )
  23. (princ n)
  24. )
回复

使用道具 举报

pBe

32

主题

2722

帖子

2666

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
211
发表于 2022-7-5 20:49:47 | 显示全部楼层
我不理解c:cnt例程ILoveMadoka的逻辑。
 
但是如果你计划在一个例程的一个地方使用一个“子例程”,那么创建一个“子例程”是没有意义的
 
(Defun c:something()(废话)(while;或repeat(子程序);
回复

使用道具 举报

88

主题

346

帖子

281

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
423
发表于 2022-7-5 21:02:42 | 显示全部楼层
这是炸弹!
 
谢谢
 
 
回复

使用道具 举报

88

主题

346

帖子

281

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
423
发表于 2022-7-5 21:14:54 | 显示全部楼层
pBe,
 
我的原始代码运行了一定数量的实例。
因为我并不总是知道我会找到多少,我需要一个计数器。
 
我找到了一种计算实例数的方法
我需要改变密码,但我不知道如何将这两个人结合在一起。
 
当时我想到了“子程序”
 
新手思维。。
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

QQ|关于我们|小黑屋|乐筑天下 繁体中文

GMT+8, 2025-3-12 01:17 , Processed in 0.578219 second(s), 64 queries .

© 2020-2025 乐筑天下

联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表