乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
查看: 127|回复: 9

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

[复制链接]

16

主题

45

帖子

4

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
109
发表于 2003-12-19 18:40:00 | 显示全部楼层 |阅读模式
以下这种形式可以吗
(cond
    (条件一)
      (progn
          (表达式一)
          (表达式二)
       )
     (条件二)
      (progn
          (表达式一)
          (表达式二)
       )
  )
我下午用上面的算一个东西,怎么也不出结果,返回的是0,我要的结果是在表达式二里
不知道是为什么?
回复

使用道具 举报

26

主题

3072

帖子

10

银币

社区元老

Rank: 75Rank: 75Rank: 75

铜币
3177
发表于 2003-12-19 20:25:00 | 显示全部楼层
这样写也可以的,不过这里不需要progn
回复

使用道具 举报

16

主题

45

帖子

4

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
109
发表于 2003-12-19 22:25:00 | 显示全部楼层
我现在发现不是这个问题了,是另一个问题,搞了一晚上,也没弄出个名堂
我要求的是一个由pline线和直线还有圆弧所构成的封闭的图形的面积
我用的是(command "area" pt1 pt2 pt3 ... ""),然后用(getvar "area")来获得这个面积,但有很多问题,唉,简直一言难尽。
这里我想问一下,有没有办法让"area"这个系统变量赋值为零
有每有什么很方便的方法求这种面积啊??
比较紧急,希望得到答复!!谢谢
回复

使用道具 举报

26

主题

3072

帖子

10

银币

社区元老

Rank: 75Rank: 75Rank: 75

铜币
3177
发表于 2003-12-20 10:26:00 | 显示全部楼层
对于封闭区域,你可以先用boundary形成一个对象,然后对其使用AREA的OBJECT求面积。。
使用(getvar "area")遇到什么问题呢?为什么要area变为0?
可以这样,用area,然后随便选两点,回车后,变量AREA就是0了
回复

使用道具 举报

8

主题

59

帖子

4

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
91
发表于 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)
)
回复

使用道具 举报

8

主题

59

帖子

4

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
91
发表于 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 &quotERIMETER") 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)
回复

使用道具 举报

16

主题

45

帖子

4

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
109
发表于 2003-12-20 11:58:00 | 显示全部楼层
太好了,感谢各位帮忙!!
顺便问一个很菜的问题
command ".boundary" p "")
boundary前面那个点是什么意思啊?
回复

使用道具 举报

8

主题

59

帖子

4

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
91
发表于 2003-12-20 18:57:00 | 显示全部楼层
是强制调用CAD命令
回复

使用道具 举报

16

主题

45

帖子

4

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
109
发表于 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"))
应该不会有问题吧。
回复

使用道具 举报

37

主题

297

帖子

15

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
449
发表于 2003-12-20 23:50:00 | 显示全部楼层
因为boundary命令可以被LISP改写,可以被LISP等undefine掉。加上点是通知AutoCAD使用原来的boundary命令。一般的写法是这样:"_.boundary",前面加上下划线是强制使用boundary命令的英文版本。不同的语言可能选项的关键字不同,强制使用英文可以保证你的这个程序在法文、德文等版本的AutoCAD下也可以运行。
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

QQ|关于我们|小黑屋|乐筑天下 繁体中文

GMT+8, 2025-7-7 15:53 , Processed in 0.590503 second(s), 72 queries .

© 2020-2025 乐筑天下

联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表