明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 2381|回复: 9

请问龙大侠,怎么修改才能将这个循环选择程序返回的点表每个子表内的坐标值改成

[复制链接]
发表于 2003-4-11 19:56:00 | 显示全部楼层 |阅读模式
请问龙大侠,怎么修改才能将这个循环选择程序返回的点表每个子表内的坐标值全部改成小数点后只含3位有效数字的小数呢?如某一坐标值为20。0 该为20。000  如为-2.13163e-014,则能将它近似为0。000   如果是整型的,也一并改成**.***的形式。

(defun C:TT (/ SS SS1 N N1 NN ENT CHECK TMP PT_LIST)
  (defun DO_IT (TMP)
    (if
      (and
(not (equal (car TMP) (cadr TMP)))
(= (vl-position TMP PT_LIST) NIL)
(= (vl-position (list (cadr TMP) (car TMP)) PT_LIST) NIL)
      )
       (setq PT_LIST (append PT_LIST (list TMP)))
    )
  )

  (defun DO_IT1 (ENT / TMP)
    (setq TMP (list (cdr (assoc 10 ENT))
    (cdr (assoc 11 ENT))
      )
    )
    (DO_IT TMP)
  )

  (setq SS (ssget '((0 . "polyline,line,lwpolyline,3dface,region"))))
  (setq PT_LIST '())
  (setq N 0)
  (repeat (sslength SS)
    (setq ENT (ssname SS N))
    (setq CHECK (cdr (assoc 100 (reverse (entget ENT)))))
    (cond
      ((or (= CHECK "AcDbPolygonMesh") (= CHECK "AcDbFace"))
       (if (= CHECK "AcDbPolygonMesh")
(progn
   (command "_.COPY" ENT "" "0,0" "@")
   (command "_.EXPLODE" (entlast))
   (setq SS1 (ssget ""))
)
(progn (setq SS1 (ssadd)) (ssadd ENT SS1))
       )
       (setq N1 0)
       (repeat (sslength SS1)
(setq ENT (entget (ssname SS1 N1)))
(setq NN 0)
(setq LINE0 (list (cdr (assoc 10 ENT))
   (cdr (assoc 11 ENT))
     )
       LINE1 (list (cdr (assoc 11 ENT))
   (cdr (assoc 12 ENT))
     )
       LINE2 (list (cdr (assoc 12 ENT))
   (cdr (assoc 13 ENT))
     )
       LINE3 (list (cdr (assoc 13 ENT))
   (cdr (assoc 10 ENT))
     )
)
(repeat 4
   (setq TMP (eval (read (strcat "LINE" (rtos NN)))))
   (DO_IT TMP)
   (setq NN (1+ NN))
)
(setq N1 (1+ N1))
       )
       (command "_.ERASE" SS1 "")
      )
      ((or (= CHECK "AcDb3dPolyline")
   (= CHECK "AcDb2dPolyline")
   (= CHECK "AcDbPolyline")
   (= CHECK "AcDbModelerGeometry")
       )
       (command "_.COPY" ENT "" "0,0" "@")
       (command "_.EXPLODE" (entlast))
       (setq SS1 (ssget ""))
       (setq N1 0)
       (repeat (sslength SS1)
(setq ENT (ssname SS1 N1))
(DO_IT1 (entget ENT))
(setq N1 (1+ N1))
       )
       (command "_.ERASE" SS1 "")
      )
      (t
       (DO_IT1 (entget ENT))
      )
    )
    (setq N (1+ N))
   
  (princ "\n")
    )
)
发表于 2003-4-12 08:28:00 | 显示全部楼层

將要變的數先變為字符串再變回

(setq a 2.1234567)(setq a (rtos a 2 3))(setq a (atof a))
发表于 2003-4-17 08:44:00 | 显示全部楼层

但0.0改为0.000那不行(字符串才可以)

;;改成小数点后只含3位有效数字那容易,但0.0改为0.000那不行(字符串才可以)
(defun CH_PT_2 (PT_LIST / HOLDZIN)
  (setq HOLDZIN (getvar "dimzin"))
  (setvar "dimzin" 0)
  (setq        PT_LIST        (mapcar
                  '(lambda (X)
                     (list
                       (mapcar
                         '(lambda (Y)
                            (atof (rtos Y 2 3))
                          )
                         (car X)
                       )
                       (mapcar
                         '(lambda (Y)
                            (atof (rtos Y 2 3))
                          )
                         (cadr X)
                       )
                     )
                   )
                  PT_LIST
                )
  )
  (setvar "dimzin" HOLDZIN)
  PT_LIST
)


;;改为字符串
(defun CH_PT_3 (PT_LIST / HOLDZIN)
  (setq HOLDZIN (getvar "dimzin"))
  (setvar "dimzin" 0)
  (setq        PT_LIST        (mapcar
                  '(lambda (X)
                     (list
                       (mapcar
                         '(lambda (Y)
                            (rtos Y 2 3)
                          )
                         (car X)
                       )
                       (mapcar
                         '(lambda (Y)
                            (rtos Y 2 3)
                          )
                         (cadr X)
                       )
                     )
                   )
                  PT_LIST
                )
  )
  (setvar "dimzin" HOLDZIN)
  PT_LIST
)
 楼主| 发表于 2003-4-17 09:53:00 | 显示全部楼层

好的,我先试试。还有一个问题:你以前有没有碰到过:“在lisp程序计算时由于。

还有一个问题:你以前有没有碰到过:“在lisp程序计算时由于一个公式中含有不同的数据类型(有的是整型,有的是实型)而导致程序运行不稳(有时可以,有时出错)?”
发表于 2003-4-17 12:01:00 | 显示全部楼层

看需要轉變数据类型計算!!程序运行不稳,多是数据类型沒查清楚

发表于 2003-4-18 19:06:00 | 显示全部楼层

用 (rtos value 2 3) 即可!

 楼主| 发表于 2003-4-18 20:07:00 | 显示全部楼层

龙大侠,“没查清楚”是什么意思?我就是怕一个公式中数据类型混杂导致程序不稳,所

龙大侠,“没查清楚”是什么意思?我就是怕一个公式中数据类型混杂导致程序不稳,所以才想。。[br]龙大侠,“没查清楚”是什么意思?我就是怕一个公式中各种数据类型混杂导致程序不稳,所以才想将其全部转换成 “小数点后含3位有效数字”的实型数,不知这样效果会否好点?
发表于 2003-4-20 11:58:00 | 显示全部楼层

(float int)

(float int)
发表于 2003-4-21 08:26:00 | 显示全部楼层

可用(Type )查清楚数据类型!!

发表于 2020-11-19 08:30:55 | 显示全部楼层
学习了,经常遇见
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2025-5-17 18:16 , Processed in 0.200528 second(s), 25 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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