请教一个问题(关于cond,progn的)
以下这种形式可以吗(cond
(条件一)
(progn
(表达式一)
(表达式二)
)
(条件二)
(progn
(表达式一)
(表达式二)
)
)
我下午用上面的算一个东西,怎么也不出结果,返回的是0,我要的结果是在表达式二里
不知道是为什么? 这样写也可以的,不过这里不需要progn 我现在发现不是这个问题了,是另一个问题,搞了一晚上,也没弄出个名堂
我要求的是一个由pline线和直线还有圆弧所构成的封闭的图形的面积
我用的是(command "area" pt1 pt2 pt3 ... ""),然后用(getvar "area")来获得这个面积,但有很多问题,唉,简直一言难尽。
这里我想问一下,有没有办法让"area"这个系统变量赋值为零
有每有什么很方便的方法求这种面积啊??
比较紧急,希望得到答复!!谢谢 对于封闭区域,你可以先用boundary形成一个对象,然后对其使用AREA的OBJECT求面积。。
使用(getvar "area")遇到什么问题呢?为什么要area变为0?
可以这样,用area,然后随便选两点,回车后,变量AREA就是0了 ;;*******************求面积和长度子程序***************************
(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)
) ;************************单个封闭图形面积测量 *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 "PERIMETER") 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) 太好了,感谢各位帮忙!!
顺便问一个很菜的问题
command ".boundary" p "")
boundary前面那个点是什么意思啊? 是强制调用CAD命令 那和一般调用,就是不加点有什么区别啊
我用boundary形成的区域和用region形成的一样吗?能从中得到重心的数据吗,怎样从一个面域中提取我想要的重心数据啊??
我现在是这样求面积的
(setq p (getpoint))
(command "boundary" p)
(setq ent (entlast))
(command "area" "o" ent)
(setq s (getvar "area"))
应该不会有问题吧。 因为boundary命令可以被LISP改写,可以被LISP等undefine掉。加上点是通知AutoCAD使用原来的boundary命令。一般的写法是这样:"_.boundary",前面加上下划线是强制使用boundary命令的英文版本。不同的语言可能选项的关键字不同,强制使用英文可以保证你的这个程序在法文、德文等版本的AutoCAD下也可以运行。
页:
[1]
2