乐筑天下

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

[编程交流] 有没有办法设置+o

[复制链接]

4

主题

19

帖子

15

银币

初来乍到

Rank: 1

铜币
20
发表于 2022-7-6 09:57:30 | 显示全部楼层 |阅读模式
我有一组代码,需要根据while循环中的条件在加号(+)和减号(-)之间交替。这比重新键入所有(setq sel\n代码)要容易得多(参见示例代码)
 
  1. (while (< count 4)
  2.   (setq count (+ count 1))
  3.              (setq sel_3 (list (+ ptBx 1.4) (- ptBy 1.2)) )
  4.         (setq sel_4 (list (+ ptBx 1.41) (- ptBy 1.55)) )
  5.         (setq sel_7 (list (+ ptBx 1.7) (- ptBy 1.0)) )
  6.         (setq sel_8 (list (+ ptBx 2.0) (- ptBy 1.2)) )
  7.         (setq sel_9 (list (- ptBx 0.2) (- ptBy 2.0)) )
  8.         (setq sel_10 (list (+ ptBx 0.75) (- ptBy 2.25)) )
  9.         (setq sel_11 (list (+ ptBx 1.0) (- ptBy 2.5)) )
  10. (setq sel_12 (list (+ ptBx 1.25) (- ptBy 3.0)) )
  11.         (setq sel_14 (list (- ptBx 0.6) (- ptBy 0.) )
  12.            (setq sel_15 (list (- ptBx 0.3) (- ptBy 0.9)) )
  13.            (THEN DO SOME PROCESS USING THE sel_N POINTS FROM ABOVE)
  14. ); END WHILE LOOP

 
谢谢
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 10:14:10 | 显示全部楼层
我不太清楚您试图用代码实现什么,但在回答您的线程标题时:
 
  1. (setq plus +)
  2. (plus 2 3)
  3. => 7
回复

使用道具 举报

4

主题

19

帖子

15

银币

初来乍到

Rank: 1

铜币
20
发表于 2022-7-6 10:23:03 | 显示全部楼层
谢谢李,我认为这不管用,但我想有时候答案就在你面前。
 
顺便问一下,你是怎么对LISP了解这么多的?你会推荐一些可以学习的阅读材料吗?
 
再次感谢!!
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 10:27:10 | 显示全部楼层
非常欢迎你BHanson
 
 
我没有读过任何关于LISP的书,只有真正的参考文献(主要是VLIDE中的帮助文档)。我的大部分知识都来自论坛
回复

使用道具 举报

4

主题

19

帖子

15

银币

初来乍到

Rank: 1

铜币
20
发表于 2022-7-6 10:39:34 | 显示全部楼层
好吧,到目前为止,这很有帮助,所以我会继续这样做。谢谢
回复

使用道具 举报

11

主题

968

帖子

919

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
99
发表于 2022-7-6 10:42:15 | 显示全部楼层
这是lisp的“优点”之一。由于其“所谓的函数方法”和非类型变量,变量实际上也可以包含函数。。。因此,可以直接使用这种重新分配。其他语言有类似的概念,但很少像C++的宏那样易于使用。
 
顺便说一句,这个特定的问题并不真正需要这种方法——尽管它是“最简单”(可能也是最有效)的方法。如果你使用VB,你会遵循一种更数学的方法:
  1. ;; To subtract
  2. (setq Sign -1)
  3. (setq Answer (+ Variable (* Sign Value)))
  4. ;; To add
  5. (setq Sign 1)
  6. (setq Answer (+ Variable (* Sign Value)))
但显然这将仅限于+/-。在*和/之间做同样的事情需要像Lee所示的函数赋值(或者可能是expt函数的一些奇怪用法)-否则一些wangling使用条件(这将使代码更大)。
回复

使用道具 举报

4

主题

19

帖子

15

银币

初来乍到

Rank: 1

铜币
20
发表于 2022-7-6 10:51:56 | 显示全部楼层
李的代码运行得很好,但感谢您澄清了关于变量存储函数的那一小部分。
 
这是代码的完成部分。
(这些变量ptAx、ptAy等是代码实体选择部分的细分点(xyz)。使用+和-函数的变量根据如下所示的计数进行交替,以避免重复键入“选择点”的交替+和-函数。
 
  1. (setq count 1)
  2. (while (<= count 4.0)
  3.     (print)(princ "Count is: ")(princ count)(print)
  4.   (cond ((= count 1); point A
  5. (setq calca -)(setq calcb +)(setq calcc -)
  6. (setq ptNx ptAx)(setq ptNy ptAy)
  7. (setq scale_ammt 0.97)
  8. ); end of first condition
  9. ((= count 2); point B
  10. (setq calca +)(setq calcb -)(setq calcc -)
  11. (setq ptNx ptBx)(setq ptNy ptBy)
  12. (setq scale_ammt 0.935)
  13. ); end of second condition
  14. ((= count 3); point C
  15. (setq calca -)(setq calcb +)(setq calcc +)
  16. (setq ptNx ptCx)(setq ptNy ptCy)
  17. (setq scale_ammt 0.97)
  18. ); end of third condition
  19. ((= count 4); point D
  20. (setq calca +)(setq calcb -)(setq calcc +)
  21. (setq ptNx ptDx)(setq ptNy ptDy)
  22. (setq scale_ammt 0.935)
  23. ); end of fourth condition
  24.    )
  25.         ; Set Selection points for Top Right
  26. (setq sel_1 (list (calca ptNx 1.2) (calcc ptNy 0.9)) )
  27.         (setq sel_2 (list (calca ptNx 1.4) (calcc ptNy 1.25)) )
  28.              (setq sel_3 (list (calca ptNx 1.4) (calcc ptNy 1.3)) )
  29.         (setq sel_4 (list (calca ptNx 1.41) (calcc ptNy 1.65)) )
  30.         (setq sel_9 (list (calcb ptNx 0.2) (calcc ptNy 2.0)) )
  31.         (setq sel_10 (list (calca ptNx 0.75) (calcc ptNy 2.25)) )
  32.         (setq sel_11 (list (calca ptNx 0.5) (calcc ptNy 2.5)) )
  33. (setq sel_12 (list (calca ptNx 1.25) (calcc ptNy 3.0)) )
  34.         (setq sel_14 (list (calcb ptNx 0.6) (calcc ptNy 0.) )
  35.            (setq sel_15 (list (calcb ptNx 0.3) (calcc ptNy 0.9)) )
  36.   
  37. ; Edit Drawing lines on cover to New Style
  38. ;*****************************************
  39.           
  40. ; Edit Drawing lines
  41.         (command "zoom" "e")
  42. (command ".explode" (ssget "_C" sel_1 sel_2)); Explode Dart in corner
  43. (command ".offset" 0.375 (ssget "_C" sel_1 sel_2) sel_12 ""); Offset Dart
  44. (command "zoom" "e")            
  45.         (setq selection (ssget "_C" sel_3 sel_4)); Modify Newline Entities
  46. (setq ent_name (ssname selection 0))
  47. (setq ent_temp (entget ent_name))
  48. (setq ptM (cdr (assoc 10 ent_temp)))
  49.         (setq ptN (cdr (assoc 11 ent_temp)))
  50.         ; Find Center of Newline
  51.         (setq center (list (+ (/(-(car ptM) (car ptN))2.0) (car ptN)); Find Center X Value
  52.                    (+(/(-(cadr ptM) (cadr ptN))2.0)(cadr ptN)) ) ); Find Center Y Value
  53.         (command "scale" (ssget "_C" sel_3 sel_4) "" center scale_ammt ""); Scale Down Newline Entities
  54.         (command "explode" (ssget "_C" sel_11 sel_12) ); Explode L shape pline close to center
  55. (command "zoom" "e")
  56.         (command ".extend" (ssget "_C" sel_9 sel_10) "" (ssget "_C" sel_3 sel_4) ""); EXtend Newline to Left side of L
  57.         (command ".trim" (ssget "_C" sel_3 sel_4) "" (ssget "_C" sel_9 sel_10) "")
  58.         (Command ".explode" (ssget "_C" sel_14 sel_15))
  59. (command "erase" (ssget "_C" sel_11 sel_12) ""); Erase Bottom of L (this one ^)
  60.           (setq selection (ssget "_C" sel_14 sel_15))
  61.         (setq ent_name (ssname selection 0))
  62. (setq ent_temp (entget ent_name))
  63. (setq ptM (cdr (assoc 10 ent_temp)))
  64. (setq ptN (cdr (assoc 11 ent_temp)))
  65.         (setq **** (list (car ptN)(calcc (cadr ptN) 0.7)(caddr ptN) ) )
  66.         (setq ent_temp (subst (cons 11 ****)(assoc 11 ent_temp) ent_temp))
  67. (entmod ent_temp)
  68.    (setq count (+ count 1))
  69.   ); END WHILE LOOP

  • 您可以将计数增量合并到while标头中,因此:
    [/列表]
    [code](setq计数0)(而(
  • 回复

    使用道具 举报

    11

    主题

    968

    帖子

    919

    银币

    初露锋芒

    Rank: 3Rank: 3Rank: 3

    铜币
    99
    发表于 2022-7-6 11:00:06 | 显示全部楼层
    回复

    使用道具 举报

    发表回复

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

    本版积分规则

    • 微信公众平台

    • 扫描访问手机版

    • 点击图片下载手机App

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

    GMT+8, 2025-7-6 04:07 , Processed in 0.729014 second(s), 68 queries .

    © 2020-2025 乐筑天下

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