OMEGA-ThundeR 发表于 2022-7-5 15:40:58

[口齿不清]捕捉点似乎已过时

你好
 
我制作了一个lisp,将圆环放置在某个X和Y平面上,手动输入Z值。所以我做了这个(代码注释是荷兰语):
 

(setq aantal (getint "\nHoeveel cirkels plaatsen?<50>: "))
(if (null aantal) (setq aantal 50)) ;; Indien gewoon op enter wordt gedrukt bij deze vraag wordt het standaard aantal 50 gebruikt
(setq max aantal) ;; Defineer het maximum aantal circels dat geplaatst wordt
(repeat aantal ;; Herhaal de code totdat het max aantal circels is bereikt
(setq XYZpunt (getpoint (strcat "\nWaar wil je de cirkel hebben? (nog: " (rtos aantal 2 0)"/"(rtos max 2 0)")")))
(setq Z (getint "\nOp welke hoogte moet deze komen?: "))
(setq X (rtos (car XYZpunt) 2 10)) ;; Zet coordinaat X om in STRING
(setq Y (rtos (cadr XYZpunt) 2 10)) ;; Zet coordinaat Y om in STRING
(setq Z (rtos Z 2 3)) ;; Zet coordinaat Z om in STRING
(setq XYZ (strcat X "," Y "," Z)) ;; Combineert SETQ X Y en Z naar coordinaten STRING
;;(princ "\nXYZ: ") ;; Debug check
;;(princ XYZ) ;; Debug check
(command "CIRCLE" XYZ "0.05") ;; Plaatst cirkel op gekozen coordinaat met handingevoerde hoogte
(princ "\nCirkel geplaatst")
(setq aantal (1- aantal)) ;; Haalt van het aantal aangegeven punten-nog-te-doen 1 punt af.
)
)

 
没有评论(请允许我阅读)

(setq aantal (getint "\nHoeveel cirkels plaatsen?<50>: "))
(if (null aantal) (setq aantal 50))
(setq max aantal)
(repeat aantal
(setq XYZpunt (getpoint (strcat "\nWaar wil je de cirkel hebben? (nog: " (rtos aantal 2 0)"/"(rtos max 2 0)")")))
(setq Z (getint "\nOp welke hoogte moet deze komen?: "))
(setq X (rtos (car XYZpunt) 2 10))
(setq Y (rtos (cadr XYZpunt) 2 10))
(setq Z (rtos Z 2 3))
(setq XYZ (strcat X "," Y "," Z))
(command "CIRCLE" XYZ "0.05")
(princ "\nCirkel geplaatst")
(setq aantal (1- aantal))
)
)

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

ronjonp 发表于 2022-7-5 15:53:53

检查OSNAPZ变量是否设置为0。

OMEGA-ThundeR 发表于 2022-7-5 16:05:53

其设置为0(为0)

ronjonp 发表于 2022-7-5 16:08:38

咖啡还不够。。。您需要禁用快照。

OMEGA-ThundeR 发表于 2022-7-5 16:16:12

 
这可以解决我的问题,但是我没有得到正确的坐标。
 
我注意到,当捕捉到直线的端点时,Z值保持为0(高程线为0),但当捕捉到圆或圆弧的中心时,确实会调整给定的Z值。。。
 
编辑使用手动捕捉点确实有效(当OSNAP关闭时输入“END”或“MID”)。现在,找到lisp命令以再次打开和关闭OSNAP。

ronjonp 发表于 2022-7-5 16:28:19

最简单的修复方法是删除命令调用,如下所示:
(defun c:foo (/ p z)
(and
   (setq p (getpoint "\nSpecify center point for circle: "))
   (setq z (getreal "\nEnter Z value: "))
   (entmakex (list '(0 . "circle") '(8 . "Circle") (cons 10 (list (car p) (cadr p) z)) '(40 . 0.05))
   )
)
(princ)
)
在使用命令调用时,也不需要将点转换为字符串。。。(命令“_.circle”(getpoint)0.05)也可以工作。

FranknBeans 发表于 2022-7-5 16:40:50

 
放置圆时,可以关闭捕捉。。
(command "CIRCLE" "none" XYZ "0.05")

OMEGA-ThundeR 发表于 2022-7-5 16:48:53

 
 
我可能会让我的代码变得有点“困难”或复杂,但我通过这种方式学到了很多东西。但谢谢你的投入。
 
 
 
 
 
该死的!这很有魅力。
 
 
(Defun c:PCH (/ aantal max XYZpunt Z X Y XYZ)
(setq aantal (getint "\nHoeveel cirkels plaatsen?<50>: "))
(if (null aantal) (setq aantal 50)) ;; Indien gewoon op enter wordt gedrukt bij deze vraag wordt het standaard aantal 50 gebruikt
(setq max aantal) ;; Defineer het maximum aantal circels dat geplaatst wordt
(repeat aantal ;; Herhaal de code totdat het max aantal circels is bereikt
(setq XYZpunt (getpoint (strcat "\nWaar wil je de cirkel hebben? (nog: " (rtos aantal 2 0)"/"(rtos max 2 0)")")))
(setq Z (getstring "\nOp welke hoogte moet deze komen?: "))
(setq X (rtos (car XYZpunt) 2 10)) ;; Zet coordinaat X om in STRING
(setq Y (rtos (cadr XYZpunt) 2 10)) ;; Zet coordinaat Y om in STRING
(setq XYZ (strcat X "," Y "," Z)) ;; Combineert SETQ X Y en Z naar coordinaten STRING
(command "CIRCLE" "none" XYZ "0.05") ;; Plaatst cirkel op gekozen coordinaat met handingevoerde hoogte
(princ "\nCirkel geplaatst")
(setq aantal (1- aantal)) ;; Haalt van het aantal aangegeven punten-nog-te-doen 1 punt af.
)
)
页: [1]
查看完整版本: [Lisp程序]捕捉点似乎已过时