明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 3577|回复: 12

请教一个问题(关于cond,progn的)

  [复制链接]
发表于 2003-12-19 18:40:00 | 显示全部楼层 |阅读模式
以下这种形式可以吗
(cond
    (条件一)
      (progn
          (表达式一)
          (表达式二)
       )
     (条件二)
      (progn
          (表达式一)
          (表达式二)
       )
  )
我下午用上面的算一个东西,怎么也不出结果,返回的是0,我要的结果是在表达式二里
不知道是为什么?
发表于 2003-12-19 20:25:00 | 显示全部楼层
这样写也可以的,不过这里不需要progn
 楼主| 发表于 2003-12-19 22:25:00 | 显示全部楼层
我现在发现不是这个问题了,是另一个问题,搞了一晚上,也没弄出个名堂
我要求的是一个由pline线和直线还有圆弧所构成的封闭的图形的面积
我用的是(command "area" pt1 pt2 pt3 ... ""),然后用(getvar "area")来获得这个面积,但有很多问题,唉,简直一言难尽。
这里我想问一下,有没有办法让"area"这个系统变量赋值为零
有每有什么很方便的方法求这种面积啊??
比较紧急,希望得到答复!!谢谢
发表于 2003-12-20 10:26:00 | 显示全部楼层
对于封闭区域,你可以先用boundary形成一个对象,然后对其使用AREA的OBJECT求面积。。
使用(getvar "area")遇到什么问题呢?为什么要area变为0?
可以这样,用area,然后随便选两点,回车后,变量AREA就是0了
发表于 2003-12-20 10:52:00 | 显示全部楼层
;;*******************求面积和长度子程序***************************
(defun mj_s ()
  (setq p2 t)
  (setvar "osmode" 33)
  (command ".area")
  (while p2
    (prompt "\npickpoint:")
    (setq p2 (getpoint))
    (if p2 (command p2))
  )
  (command "")
)

;*****************单个不封闭图形面积测量主程序*mj************************

(defun c:mmj (/ oce pm mmj mj snap p2)
  (setq snap (getvar "osmode"))
  (setq oce (getvar "cmdecho"))
  (setvar "cmdecho" 0)
  (mj_s)
  (setvar "osmode" 0)
  (if (and (= p1 nil) (= p2 nil))
    (progn
    (setq mmj (getvar "area"))
    (setq mj (rtos (* mmj 0.0001) 2 3))
    (setq pm (getpoint "\n选择标注点/[回车退出]:"))
    (if (null pm)(exit))
    (command ".text"  "m" pm (getvar "textsize") "0" (strcat mj "ha"))
    (setvar "cmdecho" oce)
    )
  )
  (setvar "osmode" snap)
  (prin1)
)
发表于 2003-12-20 10:53:00 | 显示全部楼层
;************************单个封闭图形面积测量 *mmj************************

(defun c:mmj(/ oce correct p pl areatxt plwidth txthigh txtp )
(setq oce (getvar "cmdecho"))
          (setvar "CMDECHO" 0)
  (setq correct 0)
  (setq p (getpoint "\n内部选点:"))
  (command ".boundary" p "")
  (setq pl (ssget "l"))
  (command "area" "O" pl)
  (setq areatxt (strcat  (rtos (/ (getvar "AREA") 10000) 2 2) "ha"))
  (setq plwidth (/ (getvar "ERIMETER") 500))
  (command ".change" pl "" "p" "c" 1 "")
  (command ".pedit" pl "w" plwidth "")
  (setq txtp (getpoint "\n选择标注位置/[回车退出]:"))
  (if (null txtp) (progn (command ".erase" pl "")(exit)))
  (command ".text" "m" txtp (getvar "textsize") "0" areatxt)          
  (command ".erase" pl "")
  (setvar "cmdecho" oce)
  (prin1)
 楼主| 发表于 2003-12-20 11:58:00 | 显示全部楼层
太好了,感谢各位帮忙!!
顺便问一个很菜的问题
command ".boundary" p "")
boundary前面那个点是什么意思啊?
发表于 2003-12-20 18:57:00 | 显示全部楼层
是强制调用CAD命令
 楼主| 发表于 2003-12-20 19:04:00 | 显示全部楼层
那和一般调用,就是不加点有什么区别啊
我用boundary形成的区域和用region形成的一样吗?能从中得到重心的数据吗,怎样从一个面域中提取我想要的重心数据啊??

我现在是这样求面积的
   (setq p (getpoint))
   (command "boundary" p)
   (setq ent (entlast))
   (command "area" "o" ent)
   (setq s (getvar "area"))
应该不会有问题吧。
发表于 2003-12-20 23:50:00 | 显示全部楼层
因为boundary命令可以被LISP改写,可以被LISP等undefine掉。加上点是通知AutoCAD使用原来的boundary命令。一般的写法是这样:"_.boundary",前面加上下划线是强制使用boundary命令的英文版本。不同的语言可能选项的关键字不同,强制使用英文可以保证你的这个程序在法文、德文等版本的AutoCAD下也可以运行。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-11-27 10:34 , Processed in 0.193557 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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