Attila The Gel 发表于 2022-7-6 07:29:54

坐标到字符串转换

你好
 
我再次被困在试图重新创建别人在我工作的地方制作的lisp&dcl?
用于学习目的!我没有源代码,所以这是一个从头开始的完美示例。
 
我想将坐标返回到文本的形式中,键:“txt(xyz)”。
 

;; dialog is hidden when I click a button to get point
(setq CRDNTS (getpoint "\nInsertion point: ")) ;=example (102.08 25.85 0.0).

;; Dialog is reloaded and then...
(set_tile "txt(xyz)" CRDNTS ) not working because its not a string?

 
我尝试了一些转换,但无法使其工作?我需要提取x、y和z,然后将其列在一起吗?或者有没有一个简单的解决方案来实现这一点。
 
谢谢。

MSasu 发表于 2022-7-6 07:36:06

GETPOINT返回的点实际上是由2或3项组成的列表。您应该分解它并构建字符串。
(strcat (rtos (car CRDNTS) 2 3) ", " (rtos (cadr CRDNTS) 2 3))
然而,将点显示在上面这样的编辑框中有点不寻常——最常见的是每个坐标都有字段。第一种方法可能会给用户带来输入困难。

Attila The Gel 发表于 2022-7-6 07:45:06

关于编辑框和显示其中的点,您是对的,
 
但是我试着把它放到一个文本字段中,它只是告诉用户插入点被选中了,而不是(0.0.0.0)。

MSasu 发表于 2022-7-6 07:47:47

然后将该标签设置为:
(set_tile "labelCoordsInfo"
         (strcat "Coordinaten = ("
               (rtos (car   CRDNTS) 2 3) ", "
               (rtos (cadrCRDNTS) 2 3) ", "
               (rtos (caddr CRDNTS) 2 3) ")"))
当然,需要相应地替换平铺键。

Attila The Gel 发表于 2022-7-6 07:54:50

 
这正是我想要的,甚至更好!Thx再次MSasu

MSasu 发表于 2022-7-6 08:00:51

不客气!

Attila The Gel 发表于 2022-7-6 08:06:35

在加载新例程时,解决了与此相关的另一个问题。CRDNTS的值=nil,对话框关闭,错误消息为bad bla bla nil。
所以我把它放在一个if中:
 
(if (= CRDNTS nil)
   
   (set_tile "labelCoordsInfo" "Coordinaten = ( 0,0 0,0 0,0 )")
   
   (set_tile "labelCoordsInfo" (strcat "Coordinaten = ( "
               (rtos (car   CRDNTS) 2 1) " , "
               (rtos (cadrCRDNTS) 2 1) " , "
               (rtos (caddr CRDNTS) 2 1) " ) "))
   )
 
以防有人需要这个或类似的东西。

MSasu 发表于 2022-7-6 08:08:55

您也可以检查NOT功能。
(if (not CRDNTS)
...
或者检查点是否存在,并反转消息:
(if CRDNTS
...
无论是哪种方式,请确保所述变量已本地化为“未从previoud run分配”。
 
可能还需要重新格式化默认消息以确保一致性:
(set_tile "labelCoordsInfo" "Coordinaten = ( 0.0 , 0.0 , 0.0 )")

Attila The Gel 发表于 2022-7-6 08:18:30


 
感谢您花时间思考不同的可能性并更正拼写错误。
 
我将更好地研究NOT函数。
 
但不要得到存在。是否可能是这样(如果CRDNTS实际上意味着CRDNTS不是零。等于它的存在。只是与非CRDNTS相反,这就是为什么需要反转消息?
它太他妈的短了,我需要知道它是如何工作的,或者说它是怎么想的,以便能够正确地理解它。

MSasu 发表于 2022-7-6 08:22:59

如果将测试该点是否可用,则代码变为:

(if CRDNTS
(set_tile "labelCoordsInfo" (strcat "Coordinaten = ( "
                                    (rtos (car   CRDNTS) 2 1) " , "
                                    (rtos (cadrCRDNTS) 2 1) " , "
                                    (rtos (caddr CRDNTS) 2 1) " ) "))

(set_tile "labelCoordsInfo" "Coordinaten = ( 0.0 , 0.0 , 0.0 )")
)
页: [1] 2
查看完整版本: 坐标到字符串转换