乐筑天下

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

[编程交流] [Lisp程序]捕捉点似乎已过时

[复制链接]

27

主题

113

帖子

90

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
132
发表于 2022-7-5 15:40:58 | 显示全部楼层 |阅读模式
你好
 
我制作了一个lisp,将圆环放置在某个X和Y平面上,手动输入Z值。所以我做了这个(代码注释是荷兰语):
 
  1. (setq aantal (getint "\nHoeveel cirkels plaatsen?<50>: "))
  2. (if (null aantal) (setq aantal 50)) ;; Indien gewoon op enter wordt gedrukt bij deze vraag wordt het standaard aantal 50 gebruikt
  3. (setq max aantal) ;; Defineer het maximum aantal circels dat geplaatst wordt
  4.   (repeat aantal ;; Herhaal de code totdat het max aantal circels is bereikt
  5. (setq XYZpunt (getpoint (strcat "\nWaar wil je de cirkel hebben? (nog: " (rtos aantal 2 0)"/"(rtos max 2 0)")")))
  6. (setq Z (getint "\nOp welke hoogte moet deze komen?: "))
  7. (setq X (rtos (car XYZpunt) 2 10)) ;; Zet coordinaat X om in STRING
  8. (setq Y (rtos (cadr XYZpunt) 2 10)) ;; Zet coordinaat Y om in STRING
  9. (setq Z (rtos Z 2 3)) ;; Zet coordinaat Z om in STRING
  10. (setq XYZ (strcat X "," Y "," Z)) ;; Combineert SETQ X Y en Z naar coordinaten STRING
  11. ;;(princ "\nXYZ: ") ;; Debug check
  12. ;;(princ XYZ) ;; Debug check
  13. (command "CIRCLE" XYZ "0.05") ;; Plaatst cirkel op gekozen coordinaat met handingevoerde hoogte
  14. (princ "\nCirkel geplaatst")
  15. (setq aantal (1- aantal)) ;; Haalt van het aantal aangegeven punten-nog-te-doen 1 punt af.
  16.   )
  17. )

 
没有评论(请允许我阅读)
  1. (setq aantal (getint "\nHoeveel cirkels plaatsen?<50>: "))
  2. (if (null aantal) (setq aantal 50))
  3. (setq max aantal)
  4.   (repeat aantal
  5. (setq XYZpunt (getpoint (strcat "\nWaar wil je de cirkel hebben? (nog: " (rtos aantal 2 0)"/"(rtos max 2 0)")")))
  6. (setq Z (getint "\nOp welke hoogte moet deze komen?: "))
  7. (setq X (rtos (car XYZpunt) 2 10))
  8. (setq Y (rtos (cadr XYZpunt) 2 10))
  9. (setq Z (rtos Z 2 3))
  10. (setq XYZ (strcat X "," Y "," Z))
  11. (command "CIRCLE" XYZ "0.05")
  12. (princ "\nCirkel geplaatst")
  13. (setq aantal (1- aantal))
  14.   )
  15. )

 
 
在我的图形的中间位置(不使用捕捉点),给定的z值被添加到右边,但当我使用捕捉函数将圆环放置在直线的末端时,使用该捕捉点的z值。
 
这对我来说似乎很奇怪,因为我把代码塞得太多了,以至于坐标就像你手动输入的一样(字符串)。。。那么,如何使用snappoint的Z值而不是getint值呢?
 
当我使用“getstring”而不是“getint”时,它会做同样的事情,但在调试部分,它仍然输出相同的结果。
回复

使用道具 举报

58

主题

3353

帖子

33

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1761
发表于 2022-7-5 15:53:53 | 显示全部楼层
检查OSNAPZ变量是否设置为0。
回复

举报

27

主题

113

帖子

90

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
132
发表于 2022-7-5 16:05:53 | 显示全部楼层
其设置为0(为0)
回复

举报

58

主题

3353

帖子

33

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1761
发表于 2022-7-5 16:08:38 | 显示全部楼层
咖啡还不够。。。您需要禁用快照。
回复

举报

27

主题

113

帖子

90

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
132
发表于 2022-7-5 16:16:12 | 显示全部楼层
 
这可以解决我的问题,但是我没有得到正确的坐标。
 
我注意到,当捕捉到直线的端点时,Z值保持为0(高程线为0),但当捕捉到圆或圆弧的中心时,确实会调整给定的Z值。。。
 
编辑使用手动捕捉点确实有效(当OSNAP关闭时输入“END”或“MID”)。现在,找到lisp命令以再次打开和关闭OSNAP。
回复

举报

58

主题

3353

帖子

33

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1761
发表于 2022-7-5 16:28:19 | 显示全部楼层
最简单的修复方法是删除命令调用,如下所示:
  1. (defun c:foo (/ p z)
  2. (and
  3.    (setq p (getpoint "\nSpecify center point for circle: "))
  4.    (setq z (getreal "\nEnter Z value: "))
  5.    (entmakex (list '(0 . "circle") '(8 . "Circle") (cons 10 (list (car p) (cadr p) z)) '(40 . 0.05))
  6.    )
  7. )
  8. (princ)
  9. )

在使用命令调用时,也不需要将点转换为字符串。。。(命令“_.circle”(getpoint)0.05)也可以工作。
回复

举报

0

主题

24

帖子

24

银币

初来乍到

Rank: 1

铜币
0
发表于 2022-7-5 16:40:50 | 显示全部楼层
 
放置圆时,可以关闭捕捉。。
  1. [size=2](command "CIRCLE" [color=red]"none"[/color] XYZ "0.05")[/size]
回复

举报

27

主题

113

帖子

90

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
132
发表于 2022-7-5 16:48:53 | 显示全部楼层
 
 
我可能会让我的代码变得有点“困难”或复杂,但我通过这种方式学到了很多东西。但谢谢你的投入。
 
 
 
 
 
该死的!这很有魅力。
 
 
  1. (Defun c:PCH (/ aantal max XYZpunt Z X Y XYZ)
  2. (setq aantal (getint "\nHoeveel cirkels plaatsen?<50>: "))
  3. (if (null aantal) (setq aantal 50)) ;; Indien gewoon op enter wordt gedrukt bij deze vraag wordt het standaard aantal 50 gebruikt
  4. (setq max aantal) ;; Defineer het maximum aantal circels dat geplaatst wordt
  5.   (repeat aantal ;; Herhaal de code totdat het max aantal circels is bereikt
  6. (setq XYZpunt (getpoint (strcat "\nWaar wil je de cirkel hebben? (nog: " (rtos aantal 2 0)"/"(rtos max 2 0)")")))
  7. (setq Z (getstring "\nOp welke hoogte moet deze komen?: "))
  8. (setq X (rtos (car XYZpunt) 2 10)) ;; Zet coordinaat X om in STRING
  9. (setq Y (rtos (cadr XYZpunt) 2 10)) ;; Zet coordinaat Y om in STRING
  10. (setq XYZ (strcat X "," Y "," Z)) ;; Combineert SETQ X Y en Z naar coordinaten STRING
  11. (command "CIRCLE" [color=red]"none"[/color] XYZ "0.05") ;; Plaatst cirkel op gekozen coordinaat met handingevoerde hoogte
  12. (princ "\nCirkel geplaatst")
  13. (setq aantal (1- aantal)) ;; Haalt van het aantal aangegeven punten-nog-te-doen 1 punt af.
  14.   )
  15. )
回复

举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-15 03:04 , Processed in 3.640187 second(s), 69 queries .

© 2020-2025 乐筑天下

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