明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1589|回复: 9

[提问] 如何将数值按照m²和m的单位输出数值

[复制链接]
发表于 2018-5-2 11:00:29 | 显示全部楼层 |阅读模式
本帖最后由 海贼凌源 于 2018-5-2 11:18 编辑

在网络上找到大神的<统计周长面积(并在图示中显示出来)>(很长时间,忘记是哪位大神了,抱歉)
想问下各位,如何能够实现按照m&#178;和m的单位来直接输出数值?
感谢
  1. (defun c:qq1 (/ d ent f i lst m2 obj pt ss txt x y)
  2. (setq TextHeight (getdist "\n输入标注文字高度:")
  3. Textbh (getstring "\n输入编号前缀:"))
  4.   (defun maketext (txt pt)             ; 生成文字子函数
  5.     (entmake (list '(0 . "TEXT") (cons 62 1) (cons 10 pt) (cons 40 TextHeight) (cons 1 txt) '(41 . 0.8)))
  6.   )
  7.   (setvar "cmdecho" 0)
  8.   (vl-load-com)
  9.   (setq ss (ssget) ent (entlast))
  10.   (command ".region" ss "")
  11.   (setq ss (ssadd)  lst nil)
  12.   (while (setq ent (entnext ent))
  13.     (if (= (cdr (assoc 0 (entget ent))) "REGION")
  14.       (setq obj (vlax-ename->vla-object ent) pt (vlax-safearray->list (vlax-variant-value (vla-get-centroid obj)))
  15.             m2 (rtos (vla-get-area obj) 2 2) d (rtos (vla-get-perimeter obj) 2 2) lst (cons (list pt m2 d) lst)
  16.       )
  17.     )
  18.   )
  19.   (command ".undo" "")
  20.   (setq lst (vl-sort lst (function (lambda (x y)(< (car (car x)) (car (car y)))))))
  21.   (setq lst (vl-sort lst (function (lambda (x y)(> (cadr (car x)) (cadr (car y)))))))
  22.   (write-line "编号\t周长(mm)\t面积(mm2)" )
  23.   (setq i 1)
  24.   (foreach x lst
  25.     (setq pt (car x) m2 (cadr x) d (caddr x))
  26.     (maketext (strcat Textbh (itoa i)) (list (car pt) (+ (cadr pt) (* 1.2 TextHeight))))
  27.     (maketext (strcat "L=" d "mm") pt)
  28.     (maketext (strcat "S=" m2 "mm2") (list (car pt) (- (cadr pt) (* 1.2 TextHeight))))
  29.     (write-line (strcat (strcat Textbh (itoa i)) "\t" d "\t" m2) f)
  30.     (setq i (1+ i))
  31.   )
  32.   (princ)
  33. )


这个是目前输出的数值是按照mm&#178;和mm。

本帖子中包含更多资源

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

x
发表于 2018-5-2 11:40:24 | 显示全部楼层
  1. (defun c:qq1 (/ d ent f i lst m2 obj pt ss txt x y)
  2. (setq TextHeight (getdist "\n输入标注文字高度:")
  3. Textbh (getstring "\n输入编号前缀:"))
  4.   (defun maketext (txt pt)             ; 生成文字子函数
  5.     (entmake (list '(0 . "TEXT") (cons 62 1) (cons 10 pt) (cons 40 TextHeight) (cons 1 txt) '(41 . 0.8)))
  6.   )
  7.   (setvar "cmdecho" 0)
  8.   (vl-load-com)
  9.   (setq ss (ssget) ent (entlast))
  10.   (command ".region" ss "")
  11.   (setq ss (ssadd)  lst nil)
  12.   (while (setq ent (entnext ent))
  13.     (if (= (cdr (assoc 0 (entget ent))) "REGION")
  14.       (setq obj (vlax-ename->vla-object ent)
  15.             pt (vlax-safearray->list (vlax-variant-value (vla-get-centroid obj)))
  16.             m2 (rtos (* 0.000001 (vla-get-area obj)) 2 2)
  17.             d (rtos (* 0.001 (vla-get-perimeter obj)) 2 2)
  18.             lst (cons (list pt m2 d) lst)
  19.       )
  20.     )
  21.   )
  22.   (command ".undo" "")
  23.   (setq lst (vl-sort lst (function (lambda (x y)(< (car (car x)) (car (car y)))))))
  24.   (setq lst (vl-sort lst (function (lambda (x y)(> (cadr (car x)) (cadr (car y)))))))
  25.   (write-line "编号\t周长(m)\t面积(m2)" )
  26.   (setq i 1)
  27.   (foreach x lst
  28.     (setq pt (car x) m2 (cadr x) d (caddr x))
  29.     (maketext (strcat Textbh (itoa i)) (list (car pt) (+ (cadr pt) (* 1.2 TextHeight))))
  30.     (maketext (strcat "L=" d "m") pt)
  31.     (maketext (strcat "S=" m2 "m2") (list (car pt) (- (cadr pt) (* 1.2 TextHeight))))
  32.     (write-line (strcat (strcat Textbh (itoa i)) "\t" d "\t" m2) f)
  33.     (setq i (1+ i))
  34.   )
  35.   (princ)
  36. )
 楼主| 发表于 2018-5-2 12:51:31 | 显示全部楼层

已经试过了,达到效果,多谢
发表于 2018-5-7 15:08:26 | 显示全部楼层

  1. (maketext (strcat "S=" m2 "m2") (list (car pt) (- (cadr pt) (* 1.2 TextHeight))))
复制代码

改为
  1. (maketext (strcat "S=" m2 "m\u+00b2") (list (car pt) (- (cadr pt) (* 1.2 TextHeight))))
复制代码

试试
 楼主| 发表于 2018-6-7 11:29:49 | 显示全部楼层

谢谢,这样更加完善了
发表于 2018-6-8 14:28:52 | 显示全部楼层
进来学习一下,谢谢分享
 楼主| 发表于 2018-6-25 08:43:56 | 显示全部楼层
本帖最后由 海贼凌源 于 2018-6-25 08:55 编辑

我想请问一下,还是上面的代码,我加上

  1. (setq lst (vl-sort lst (function (lambda (x y)(> (cadr (car x)) (cadr (car y)))))))

  2. (setq f (getfiled "指定输出文件路径" "" "xls" 1) f (open f "a"));;;新加

  3. (write-line "编号\t周长(m)\t面积(m2)" f)

其他部分的代码不变,这样输出至Excel,如何能够也显示m&#178;,现在输出还是m2
发表于 2018-7-6 16:30:30 | 显示全部楼层
海贼凌源 发表于 2018-6-25 08:43
我想请问一下,还是上面的代码,我加上

那没有办法,只能在Excel里面将格式设置为上标了
 楼主| 发表于 2018-7-21 17:09:18 | 显示全部楼层
lishucheng96 发表于 2018-7-6 16:30
那没有办法,只能在Excel里面将格式设置为上标了

发表于 2018-7-21 19:34:06 | 显示全部楼层
自己把数值除上1000000和1000不就变成平方米和米了么。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2025-5-19 08:36 , Processed in 0.200472 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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