丢失的000
你好我正在尝试创建桩号高程lisp
但我面临一个问题,0位数缺失
例如
if(setq标高125.125)
(setq文本(rtos elev 2 3))
!text=“125.125”
但是(setq标高125.000)
(setq文本(rtos elev 2 3))
!text=“125”(我需要这样的“125.000”)
我怎样才能解决这个问题。。。。 或者,您可以确保将系统变量DIMZIN设置为正确的值
DIMZIN System Variable
Type: Integer
Saved in: Drawing
Initial value: 0
Controls the suppression of zeros in the primary unit value. DIMZIN stores this
value when you enter it on the command line or set it under Primary Units in
the Annotation dialog box. DIMZIN values 0-3 affect feet-and-inch dimensions only.
0Suppresses zero feet and precisely zero inches
1Includes zero feet and precisely zero inches
2Includes zero feet and suppresses zero inches
3Includes zero inches and suppresses zero feet
4Suppresses leading zeros in decimal dimensions (for example, 0.5000 becomes .5000)
8Suppresses trailing zeros in decimal dimensions (for example, 12.5000 becomes 12.5)
12Suppresses both leading and trailing zeros (for ex-ample, 0.5000 becomes 0.5)
DIMZIN also affects real-to-string conversions performed by the AutoLISP rtos and angtos functions.
这是真的eldon,它将更改您设置的当前dimstyle。尤其是通过程序进行更改时,也需要考虑到这一点。可能需要在程序开始时保存原始dimzin,然后在程序中进行设置,然后在退出时恢复。
这完全取决于以后是否使用dimstyle进行尺寸标注。但如果通过该程序正确完成,那也没什么大不了的。 埃尔登,
实际上,在测试alanjt之后“s例程和调整dimzin时,它对输出或alan的函数产生了影响。在这种情况下,dimzin可能会覆盖此功能,因此如果从程序中获得正确的输出并避免永久性设置更改,您实际上需要考虑保存、更改和恢复此变量。如果使用此功能将文本放置在图形中,一旦放置,dimzin不会影响放置的文本。
很好,我今天学到了一些东西。 谢谢eldon和Buzzard
现在开始工作了 我认为这可以构成一个避免更改DIMZIN的解决方案:
(defun LM:rtos ( real prec / _padright ) (vl-load-com)
;; © Lee Mac 2010
(defun _padright ( str char len )
(if (< (strlen str) len) (_padright (strcat str char) char len) str)
)
(strcat (itoa (fix real))
(_padright
(vl-string-left-trim "0" (rtos (abs (rem real 1)) 2 prec)) "0" (1+ prec)
)
)
)
太棒了,李! 谢谢Buzzard
编辑:发现一个小问题:
(LM:rtos 3.400 0)
"30"
固定的:
(defun LM:rtos ( real prec / _padright ) (vl-load-com)
;; © Lee Mac 2010
(defun _padright ( str char len )
(if (< (strlen str) len) (_padright (strcat str char) char len) str)
)
(
(lambda ( dec )
(strcat (itoa (fix real)) (if (eq "" dec) "" ".") dec)
)
(_padright (vl-string-left-trim ".0" (rtos (abs (rem real 1)) 2 prec)) "0" prec)
)
) 实际上,这可能更快:
(defun LM:rtos ( real prec ) (vl-load-com)
(
(lambda ( l )
(repeat (- prec (cond ( (vl-position 46 l) ) ( 0 )))
(setq l (cons 48 l))
)
(vl-list->string (if (= 46 (car (setq l (reverse l)))) (cons 48 l) l))
)
(reverse (vl-string->list (rtos real 2 prec)))
)
) 顺便问一下,我想问的是,你对虚拟语言的学习进展如何?
页:
[1]
2