乐筑天下

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

[编程交流] Lisp编码帮助

[复制链接]

2

主题

15

帖子

13

银币

初来乍到

Rank: 1

铜币
10
发表于 2022-7-5 16:49:05 | 显示全部楼层 |阅读模式
你好
 
第一次在这个论坛发帖得到了很多帮助。似乎无法修复此Lisp程序。不知道它从哪里来
 
我想做的是用两个LISP,一个产生向上舍入的长度,另一个产生+2,用文本S-。
 
然后用B-四舍五入和+3做同样的事情。
 
我可以切换到一个或另一个,但当我创建另一个时,它会接管初始Lisp。我猜这和一个通用变量有关??
 
我希望这有意义。任何帮助都将不胜感激。
 
谢谢
 
  1. (defun C:scable (/)
  2. (setq echo (getvar "cmdecho"))                        ;gets current value of screen echo
  3. (setvar "cmdecho" 0)                                ;sets echo to off
  4. (setq style (getvar "textstyle"))                        ;gets current value of textstyle
  5. (setvar "textstyle" "STANDARD")                                ;sets textstyle to STANDARD
  6.    (arrowinfo)
  7.    (arrowdir1)
  8. (setvar "textstyle" style)
  9. (setvar "cmdecho" echo)
  10. );end defun scable
  11. (defun C:dcable ()
  12. (setq echo (getvar "cmdecho"))                        ;gets current value of screen echo
  13. (setvar "cmdecho" 0)                                ;sets echo to off
  14. (setq style (getvar "textstyle"))                        ;gets current value of textstyle
  15. (setvar "textstyle" "STANDARD")                                ;sets textstyle to STANDARD
  16.    (arrowinfo)
  17.    (arrowdir2)
  18. (setvar "textstyle" style)
  19. (setvar "cmdecho" echo)
  20. );end defun dcable
  21. (defun rtd (a)
  22.     (/ (* a 180.0) pi)
  23. );DEFUN
  24. (DEFUN arrowinfo ()
  25.          (SETQ first (entsel)
  26.    slect1 (entget (car first))
  27.        pt1 (cadr first)
  28.     ang1 (angle (setq pt3 (cdr (assoc '10 slect1)))(setq pt4 (cdr (assoc '11 slect1))))
  29.     ang2 ( ANGLE pt1 (setq pt2 (getpoint "\nPICK THE TEXT LOCATION: ")))
  30.     ang3 ang1)
  31.          (if (or (and (> (sin ang1) 0) (> (cos ang1) 0)) (and (< (sin ang1) 0) (> (cos ang1) 0)))
  32.          (setq ang1 ang1)
  33.          (setq ang1 (+ PI ang1)))
  34.          (if  (equal ang3 (* 0.5 pi) 0.00000001) (setq ang1 ang3))
  35.          (if  (equal ang3 PI 0.00000001) (setq ang1 (+ pi ang3)))
  36.          (if  (equal ang3 0 0.00000001) (setq ang1 ang3))
  37. );end defun arrowinfo
  38. (defun arrowdir1 ()
  39.   (if (> (distance pt1 pt3) (distance pt1 pt4)) (ins1) (ins2))
  40. );end defun arrowdir1
  41. (defun arrowdir2 ()
  42.   (if (> (distance pt1 pt3) (distance pt1 pt4)) (ins3) (ins4))
  43. );end defun arrowdir2
  44. (defun ins1()
  45. (Setq old (Getvar "clayer"))
  46. (if (tblsearch "layer" "cab")(Setvar "clayer" "cab")
  47. (command "layer" "M" "cab" "C" "red" "" "")
  48. );end if
  49.    (command "insert" "NEW-ARROW" pt4 (getvar "ltscale") "" (rtd (+ PI ang3)))
  50. (if (tblsearch "layer" "TICK22")(Setvar "clayer" "TICK22")
  51. (command "layer" "M" "TICK22" "C" "magenta" "" "")
  52. );end if
  53.    (command "insert" "TICK2" pt3 (getvar "ltscale") "" (rtd (+ PI ang3)))
  54. (command "setvar" "clayer" old )
  55.    (if (> (- (angle pt4 pt3) (angle pt4 pt2)) 0)
  56.        (setq pt2 (polar pt4 (- (angle pt4 pt3) 0.277745) 34.5))
  57.        (setq pt2 (polar pt4 (+ (angle pt4 pt3) 0.277745) 34.5))
  58.    );end if
  59.    (txt1)
  60. );end defun ins1
  61.    
  62. (defun ins2()
  63. (Setq old (Getvar "clayer"))
  64. (if (tblsearch "layer" "cab")(Setvar "clayer" "cab")
  65. (command "layer" "M" "cab" "C" "red" "" "")
  66. );end if
  67.    (command "insert" "NEW-ARROW" pt3 (getvar "ltscale") "" ( rtd ang3))
  68. (if (tblsearch "layer" "TICK22")(Setvar "clayer" "TICK22")
  69. (command "layer" "M" "TICK22" "C" "magenta" "" "")
  70. );end if
  71.    (command "insert" "TICK2" pt4 (getvar "ltscale") "" ( rtd ang3))
  72. (command "setvar" "clayer" old )
  73.    (if (> (- (angle pt3 pt4) (angle pt3 pt2)) 0)
  74.        (setq pt2 (polar pt3 (- (angle pt3 pt4) 0.277745) 34.5))
  75.        (setq pt2 (polar pt3 (+ (angle pt3 pt4) 0.277745) 34.5))
  76.    );end if
  77.    (txt1)
  78. );end defun ins2
  79. (defun ins3()
  80. (Setq old (Getvar "clayer"))
  81. (if (tblsearch "layer" "cab")(Setvar "clayer" "cab")
  82. (command "layer" "M" "cab" "C" "red" "" "")
  83. );end if
  84.    (command "insert" "NEW-ARROW" pt4 (getvar "ltscale") "" ( rtd (+ PI ang3)))
  85.    (command "insert" "NEW-ARROW" (polar pt4 (angle pt4 pt3) 12) (getvar "ltscale") "" ( rtd (+ PI ang3)))
  86. (if (tblsearch "layer" "TICK22")(Setvar "clayer" "TICK22")
  87. (command "layer" "M" "TICK22" "C" "magenta" "" "")
  88. );end if
  89.    (command "insert" "TICK2" pt3 (getvar "ltscale") "" (rtd (+ PI ang3)))
  90. (command "setvar" "clayer" old )
  91.    (if (> (- (angle pt4 pt3) (angle pt4 pt2)) 0)
  92.        (setq pt2 (polar pt4 (- (angle pt4 pt3) 0.277745) 34.5))
  93.        (setq pt2 (polar pt4 (+ (angle pt4 pt3) 0.277745) 34.5))
  94.    )
  95.    (txt2)
  96. );end defun ins3
  97.    
  98. (defun ins4()
回复

使用道具 举报

8

主题

1647

帖子

1647

银币

初来乍到

Rank: 1

铜币
36
发表于 2022-7-5 16:55:37 | 显示全部楼层
您的问题已移至Autolisp部分:http://www.cadtutor.net/forum/forumdisplay.php?21-AutoLISP Visual LISP amp DCL
回复

使用道具 举报

2

主题

15

帖子

13

银币

初来乍到

Rank: 1

铜币
10
发表于 2022-7-5 17:01:43 | 显示全部楼层
我的错,谢谢。
回复

使用道具 举报

4

主题

2143

帖子

2197

银币

限制会员

铜币
-24
发表于 2022-7-5 17:03:46 | 显示全部楼层
请阅读代码发布指南,并编辑代码以包含在代码标记(非HTML标记)中。[NOPARSE]
  1. Your Code Here[/NOPARSE]
=
  1. Your Code Here
回复

使用道具 举报

10

主题

253

帖子

75

银币

后起之秀

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

铜币
223
发表于 2022-7-5 17:11:29 | 显示全部楼层
您的代码不完整。我认为问题出在txt1和txt2函数内部。尝试使用以下代码获取文本字符串:
  1. (vl-load-com)
  2. (defun get-text (ent round-plus prefix)
  3. (if (setq ent (cond ((= (type ent) 'ename) (vlax-ename->vla-object ent))
  4.                      ((= (type ent) 'vla-object) ent)
  5.                      ) ;_ end of cond
  6.            ) ;_ end of setq
  7.    (strcat prefix
  8.            (rtos (+ (fix (vlax-curve-getdistatpoint ent (vlax-curve-getendpoint ent))) round-plus) 2 0)
  9.            ) ;_ end of strcat
  10.    ""
  11.    ) ;_ end of if
  12. ) ;_ end of defun

通话样本:
  1. _$ (get-text (car (entsel)) 12. "S+")
  2. "S+1316"
  3. _$ (get-text (car (entsel)) 2. "B-")
  4. "B-1306"
  5. _$ (get-text (car (entsel)) -2. "A*")
  6. "A*1302"
  7. _$ (get-text (car (entsel)) 0. "Current : ")
  8. "Current : 1304"
回复

使用道具 举报

10

主题

253

帖子

75

银币

后起之秀

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

铜币
223
发表于 2022-7-5 17:13:01 | 显示全部楼层
P、 为什么不在DIESEL表达式中使用字段呢?
回复

使用道具 举报

2

主题

15

帖子

13

银币

初来乍到

Rank: 1

铜币
10
发表于 2022-7-5 17:17:22 | 显示全部楼层
感谢您的回复。
 
我刚开始编码,对VLA也不太了解。我一直在努力想办法,但没走多远。
回复

使用道具 举报

2

主题

15

帖子

13

银币

初来乍到

Rank: 1

铜币
10
发表于 2022-7-5 17:25:32 | 显示全部楼层
 
有没有一种简单的方法可以将我已经拥有的合并到您编写的代码中?
 
或者,如果你能为我指出正确的方向进行指导,我将不胜感激。
 
谢谢
回复

使用道具 举报

2

主题

15

帖子

13

银币

初来乍到

Rank: 1

铜币
10
发表于 2022-7-5 17:27:14 | 显示全部楼层
所以我找到了一个小的工作,有一点效果,但现在它的所有回击我。很抱歉,提出了一个旧的帖子,但有人能帮我得到这个代码吗?
 
我试着让文本显示为“S”-长度四舍五入到最近的英尺加2英尺。以及与文本显示为“B”-完全相同的例程,长度四舍五入到最近的英尺加3英尺。
 
我花了几个小时想知道如何把这篇文章插入我的文章,但运气不好。
 
有人能帮我吗?
 
 
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-5 17:31:55 | 显示全部楼层
发布的代码缺少函数txt1和txt2。
 
我建议对kpblc发布的代码进行以下修改:
  1. (defun get-text ( ent add prf )
  2.    (strcat prf (rtos (+ add (vlax-curve-getdistatparam ent (vlax-curve-getendparam ent))) 2 0))
  3. )
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-13 14:10 , Processed in 0.425047 second(s), 83 queries .

© 2020-2025 乐筑天下

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