明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 3111|回复: 2

求助标注面积程序

[复制链接]
发表于 2002-6-6 21:15:00 | 显示全部楼层 |阅读模式
我是搞市政设计,需计算土方量,以下是本人编的求面积程序,选去几点后求围起来的面积,直接标在图上,但在运行时发现先运行(setq pt (getpoint "\n please select biaozhu point"))然后(command ".area")
但最后未能运行不知哪位高手能否指点迷津,是否跟系统变量有关?
(defun C:mj ()
;;;  (progn
  (setq osm (getvar "osmode"))
  (setvar "blipmode" 1)
  (setvar "osmode" 1)
  (command ".area")
;;;    (dstop2)
  (setvar "osmode" osm)
;;;  (setvar "blipmode"
;;;            (if        t_blip
;;;              0
;;;              1
;;;;;;            )
;;;)
(setq area (getvar "area"))
;;;  )
(setq str1 (rtos area 2 3))
(setq str11 (strcat "At=" str1))
(setq pt (getpoint "\n please select biaozhu point"))
(command "text" "s" "fs" pt "0.75" "0" str11 "")
(PRINC)
)

具体运行情况如下:
Command: mj
.area
<First point>/Object/Add/Subtract:
please select biaozhu pointtext
Point or option keyword required.
error: Function cancelled
(COMMAND "text" "s" "fs" PT "0.75" "0" STR11 "")
(C:MJ)

<First point>/Object/Add/Subtract:
Next point:
Next point:
Next point:
Next point:
Next point:

Area = 14.6444, Perimeter = 17.2235

发表于 2002-6-7 00:57:00 | 显示全部楼层

这是以前帮人写的程序,现在看看繁了一点,你参考一下吧(没办法,要求同时生成面域)

;;利用多义线生成面域并标注面积
;;如果选定的对象为多义线,则生成面域,再标注面积
;;如果选定的对象为面域,则直接标注面积
;;
;;执行命令:reg
;;
;;明经通道 版权所有 作者:郑立楷
;;明经通道网址:http://www.mjtd.com
;;
(defun c:reg (/                txtsize          headtxt   precision oldcmd
              sel        ent          entlist   entname   vlaent
              area        pnt          regent
             )
  (setq txtsize (getvar "dimtxt"))        ;取当前标注样式中的文字高度做为字高
  (setq headtxt "套内面积:")                ;此处为面积的前导文字,可作修改
  (setq precision 3)                        ;此处为面积有精度,可做修改
  (setq oldcmd (getvar "cmdecho"))
  (setvar "cmdecho" 0)
  (setq sel t)
  (vl-load-com)
  (while sel
    (setq ent (entsel))
    (if        ent
      (progn
        (setq entlist (entget (car ent)))
        (setq entname (strcase (cdr (assoc 0 entlist))))
        (cond
          ((wcmatch entname "*POLYLINE")
           (setq vlaent (vlax-ename->vla-object (car ent)))
           (setq area (vlax-curve-getArea vlaent))
           (setq area (strcat headtxt (rtos area 2 precision)))
           (command "region" ent "")
           (setq regent (entlast))
           (if (= (strcase (cdr (assoc 0 (entget regent))))
                  "REGION"
               )
             (progn
               (redraw regent 3)
               (initget 1)
               (setq pnt (getpoint "\n请选取填写面积的插入点:"))
               (redraw regent 4)
               (command "text" "j" "c" pnt txtsize "" area)
             )
             (princ "\n不能生成面域,可能所选对象未封闭")
           )
          )
          ((= entname "REGION")
           (command "area" "o" ent)
           (setq area (getvar "area"))
           (setq area (strcat headtxt (rtos area 2 precision)))
           (setq regent (car ent))
           (redraw regent 3)
           (initget 1)
           (setq pnt (getpoint "\n请选取填写面积的插入点:"))
           (redraw regent 4)
           (command "text" "j" "c" pnt txtsize "" area)
          )
          (princ "\n所选对象不是多义线")

        )
      )

      (setq sel nil)
    )
  )
  (setvar "cmdecho" oldcmd)
  (princ)
)
发表于 2002-6-7 12:45:00 | 显示全部楼层

标注面积程序

并不是先运行(setq pt (getpoint "\n please select biaozhu point"))然后(command ".area")
autolisp在运行时先运行(command ".area"),这时它并不中断等人工输入,而是继续把下面的字符串当作"AREA"的输入,这样直到(setq pt (getpoint "\n please select biaozhu point"))才中断输入getpoint ,直到程序END才中断等人工输入, 故出现上面的情况
可以先读入点再(command ".area" point)的办法解决
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-11-25 15:29 , Processed in 0.268241 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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