找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 1007|回复: 4

[求助] [LISP函数]:求助修改程序

[复制链接]
发表于 2003-6-6 09:30:55 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
上次有一个gg放上来一个标注坐标的程序,很好用,但是标注的精度是小数后4位,大家谁有能力帮改一下
我看了一会的书,由于是新手上路,函数认识太少,水平有限,实在弄不出来。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
发表于 2003-6-6 10:27:24 | 显示全部楼层
你那附件打开后都是乱码看不清!
设置系统变量DIMDEC为你需要的值.
Type: Integer
Saved in: Drawing
Initial value: 4
Sets the number of decimal places displayed for the primary units of a dimension.
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2003-6-6 11:46:19 | 显示全部楼层
谁说是乱码?我下载就很好啊。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2003-6-6 15:15:45 | 显示全部楼层
只要熟悉一下rtos这个lsp函数,就明白了,
改动片段为
       ;;提取点piont1的X、Y坐标并分别转换为字符串
       (setq ptx1 (rtos (car pt1) 2 2))
       (setq pty1 (rtos (cadr pt1) 2 2))
       (SETQ PTZ1 (Rtos (CADDR PT1) 2 2))
以下是rtos函数的英文帮助,请你好看一看
rtos:
rtos Function
  
Converts a number into a string
(rtos number [mode [precision]])
The rtos function returns a string that is the representation of number according to the settings of mode, precision, and the system variables UNITMODE, DIMZIN, LUNITS, and LUPREC.
Arguments
number
A number.
mode
An integer specifying the linear units mode. The mode corresponds to the values allowed for the LUNITS AutoCAD system variable. The mode can be one of the following numbers:
1  Scientific
2  Decimal
3  Engineering (feet and decimal inches)
4  Architectural (feet and fractional inches)
5  Fractional
precision
An integer specifying the precision.
The mode and precision arguments correspond to the system variables LUNITS and LUPREC. If you omit the arguments, rtos uses the current settings of LUNITS and LUPREC.
Return Values
A string. The UNITMODE system variable affects the returned string when engineering, architectural, or fractional units are selected (mode values 3, 4, or 5).
Examples
Set variable x:
Command: (setq x 17.5)
17.5
Convert the value of x to a string in scientific format, with a precision of 4:
Command: (setq fmtval (rtos x 1 4))
"1.7500E+01"
Convert the value of x to a string in decimal format, with 2 decimal places:
Command: (setq fmtval (rtos x 2 2))
"17.50"
Convert the value of x to a string in engineering format, with a precision of 2:
Command: (setq fmtval (rtos x 3 2))
"1'-5.50\""
Convert the value of x to a string in architectural format:
Command: (setq fmtval (rtos x 4 2))
"1'-5 1/2\""
Convert the value of x to a string in fractional format:
Command: (setq fmtval (rtos x 5 2))
"17 1/2"
Setting UNITMODE to 1 causes units to be displayed as entered. This affects the values returned by rtos for engineering, architectural, and fractional formats, as shown in the following examples:
Command: (setvar "unitmode" 1)
1
Command: (setq fmtval (rtos x 3 2))
"1'5.50\""
Command: (setq fmtval (rtos x 4 2))
"1'5-1/2\""
Command: (setq fmtval (rtos x 5 2))
"17-1/2"
See Also
The String Conversions topic in the AutoLISP Developer's Guide.
   Comments?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 4个

财富等级: 恭喜发财

发表于 2003-6-6 21:51:06 | 显示全部楼层
我给你一个中文的很详细的

将数转换成字符串

(rtos number [mode [precision]])

根据参数 mode、precision 以及系统变量 UNITMODE 和 DIMZIN 的设置情况,rtos 函数返回一个代表数 number 的字符串。参数 mode 和 precision 都是整数,它们指定了线性单位格式和精度,其取值如下表所示。

线性单位值

Mode 值        字符串格式
1        科学记数格式
2        十进制格式
3        工程记数格式(英尺和十进制英寸)
4        建筑记数格式(英尺和分数英寸)
5        分数单位格式
参数 mode 和 precision 对应于系统变量 LUNITS 和 LUPREC。如果省略这两个参数,rtos 函数使用系统变量 LUNITS 和 LUPREC 的当前值。当选择了工程记数格式、建筑记数格式或分数单位格式时(即 mode 值为 3、4 或 5),系统变量 UNITMODE 对返回的字符串有影响。

*******************************************************************************************
函数 rtos(从实数到字符串)和 angtos(从角度值到字符串)可以将 AutoCAD 使用的数值数据转换为字符串数据,这样就将其作为输出或文本数据。函数 rtos 转换实数值;angtos 转换角度值。结果字符串的格式由 AutoCAD 的系统变量来控制:LUNITS 和 LUPREC 指定实数(线性)值的单位和精度; AUNITS 和 AUPREC 指定角度值的单位和精度。对于这两个函数,标注变量 DIMZIN 控制在结果字符串中写进前导和后续的零的方式。

下列代码段调用了 rtos 并返回值(假定变量 DIMZIN 等于 0)。在第一次调用中精度(rtos 的第三个参数)设为 4,在其他调用中均设为 2。

(setq x 17.5)

(setq str "\nValue formatted as ")

(setq fmtval  (rtos x 1 4))                模式 1 = 科学
(princ (strcat str fmtval))                显示    Value formatted as 1.7500E+01

(setq fmtval (rtos x 2 2))                模式 2 = 小数
(princ (strcat str fmtval))                显示    Value formatted as 17.50  

(setq fmtval (rtos x 3 2))                模式 3 = 工程
(princ (strcat str fmtval))                显示    Value formatted as 1'-5.50"

(setq fmtval (rtos x 4 2))                模式 4 = 建筑
(princ (strcat str fmtval))                显示    Value formatted as 1'-5 1/2"

(setq fmtval (rtos x 5 2))                模式 5 = 分数

(princ (strcat str fmtval))                显示    Value formatted as 17 1/2

当系统变量 UNITMODE 设为 1 时,则设定显示单位与输入单位相同,由 rtos 返回的字符串会因“工程” (mode = 3)、“建筑” (mode = 4) 和“分数” (
mode = 5) 的单位不同而异。例如,上述实例输出的前两行是相同的,但后三行的显示如下:

Value formatted as 1'5.50"

Value formatted as 1'5-1/2"

Value formatted as 17-1/2

由于函数 angtos 计算时考虑系统变量 ANGBASE,所以下列代码总是返回 "0"。

(angtos (getvar "angbase"))

AutoLISP 中没有函数可以返回 ANGBASE 与真正的零度(正东方)夹角的字符串(在当前模式/精度下),或任意弧度角度的字符串。

为获得 ANGBASE 与 AutoCAD 的零度(正东方)之间的夹角或任意角度的大小,可以选用下列方法:

在当前 ANGBASE 上加一个已知的角度,然后检查结果的绝对值是否大于 2p (2 * pi)。若大于,则减去 2p;若结果是负数,则加上 2p。然后再对结果调用 angtos 函数。
        在一个临时变量中存储 ANGBASE 的值,再将 ANGBASE 设为 0,然后用 angtos 函数求值。最后,恢复 ANGBASE 的初始值。

从 (atof (angtos 0)) 的结果中减去 360 度(2p 弧度或 400 百分度)也可获得 ANGBASE 与 0 度之间的夹角。

函数 distof(点的距离)与 rtos 是互补的,所以在前述实例中产生的字符串,在下列的调用中都返回同样的值: 17.5(注意模式 3 和 4 中反斜杠(\)
的用法)。

(distof "1.7500E+01" 1)                模式 1 = 科学

(distof "17.50" 2)                模式 2 = 小数

(distof "1'-5.50\"" 3)                模式 3 = 工程

(distof "1'-5 1/2\"" 4)                模式 4 = 建筑

(distof "17 1/2" 5)                模式 5 = 分数

下列代码段调用了 angtos 并返回值(仍假定 DIMZIN 等于 0)。在第一次调用中精度(angtos 的第三个参数)设为 0,在其后的三次调用中设为 4,最后一次调用中设为 2。

(setq ang 3.14159 str2 "\nAngle formatted as ")

(setq fmtval (angtos ang 0 0))        模式 0 = 度
(princ (strcat str2 fmtval))                显示  Angle formatted as 180

(setq fmtval (angtos ang 1 4))        模式 1 = 度/分/秒
(princ (strcat str2 fmtval))                显示  Angle formatted as 180d0'0"

(setq fmtval (angtos ang 2 4)        模式 2 = 百分度
(princ (strcat str2 fmtval))                显示  Angle formatted as 200.0000g

(setq fmtval (angtos ang 3 4)        模式 3 = 弧度
(princ (strcat str2 fmtval))                显示  Angle formatted as 3.1416r

(setq fmtval (angtos ang 4 2)        模式 4 = 勘测

(princ (strcat str2 fmtval))                显示  Angle formatted as W

当函数 angtos 以勘测单位 (mode = 4) 返回一个字符串时,系统变量 UNITMODE 也会影响到该字符串。若 UNITMODE 等于 0,则返回的字符串可以包含空格(例如 "N 45d E");若 UNITMODE 等于 1,则该字符串不包含空格(例如 "N45dE")。

函数 angtof 与 angtos 是互补的,所以下列调用均返回相同的值:3.14159。

(angtof "180" 0)                模式 0 = 度
(angtof "180d0'0\"" 1)                模式 1 = 度/分/秒  
(angtof "200.0000g" 2)                模式 2 = 百分度
(angtof "3.14159r" 3)                模式 3 = 弧度

(angtof "W" 4)                        模式 4 = 勘测

当一个字符串以英尺和英寸单位指定距离或以度、分、秒形式指定角度时,必须在引号之前标记一个反斜杠 (\"),以使得它看上去不像字符串的结尾。先前的 angtof 和 distof 的实例也说明了此种情况。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2025-9-26 14:30 , Processed in 0.375784 second(s), 41 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表