明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
12
返回列表 发新帖
楼主: xstlf

[求助]请老师帮忙,此段函数错在哪里呀?

  [复制链接]
发表于 2004-12-23 17:14:00 | 显示全部楼层
是的。
 楼主| 发表于 2004-12-23 17:20:00 | 显示全部楼层
(setq ang (angle 'ptstart 'ptend))


我把上面这句改为。setq ang (angle ptstart ptend))时反而能运行了,就是提示示知命令cz.这是为什么呀?
发表于 2004-12-23 17:29:00 | 显示全部楼层
(command ...)         多了""
 楼主| 发表于 2004-12-23 18:14:00 | 显示全部楼层
本帖最后由 作者 于 2004-12-23 22:45:15 编辑

还是不行呀,现在一加载就出现,插入柱点的提示了。但还要是谢谢你们,帮我解决了,怎么单选直线的事,呵呵。一人一朵花,作为生蛋礼物。 我现在更改如下,提示和刚才一样,出错。老师们,帮帮我呀。我都晕迷惑了。 (defun c:cz ( / zhoux exis ptstart ptend ang1 pt1 r1 prx p1 p2 p3 p4)
(CMDLA0)
(setq no1 (@User 1 "" "\n设定柱断面宽度或圆柱直径:" no1)
no2 (@User 1 "" "\n设定柱断面高度<H=0时为圆柱>:" no2)
)
(setq pxx (@User 1 "" "\n输入柱断面X方向偏心距离:" pxx )
pxy (@User 1 "" "\n输入柱断面Y方向偏心距离:" pxy )
)
(setq zhoux (car (entsel "\n输入参考轴线 <X轴>:")))
(setq exis (entget zhoux))
(setq ptstart (cdr (assoc 10 exis))
ptend (cdr (assoc 11 exis))
)
(setq ang1 (angle 'ptstart 'ptend)) ;;;;注,说这儿出错,我把它改成 ;;;;这样时 (setq ang1 (angle ptstart ptend)) 就能完成作图任 ;;;;务了,但最后提示。未知命令CZ. 这段应该怎么写呀?
(setvar "clayer" "梁柱")
(setvar "osmode" 32)
(setq pt1 (getpoint "\n选择柱插入点:"))
(setvar "osmode" 0)
(setq r1 (/ no1 2))
(setq prx (polar pt1 ang1 (+ pxx r1)))
(setq p1 (polar prx (+ ang1 (/ pi 2)) (+ (/ no2 2) pxy))
p2 (polar p1 ang1 (- 0 no1))
p3 (polar p2 (- ang1 (/ pi 2)) no2)
p4 (polar p3 ang1 no1)
)
(setvar "plinewid" 0)
(if (/= no2 0)
(command "_pline" p1 p2 p3 p4 "C" "")
(command "_circle" pt1 r1 "")
)
(setvar "clayer" "填充")
(if (/= no2 0)
(command "_.solid" p1 p2 p4 p3 "")
(command "_.donut" 0 no1 pt1 "")
)
(princ)
(CMDLA1)
)
(defun CMDLA0 ()
(setq angd (getvar "angdir"))
(setq angb (getvar "angbase"))
(setq cmdech (getvar "CMDECHO"))
(setq oom (getvar "orthomode"))
(setq osm (getvar "osmode"))
(SETQ LA (getvar "clayer"))
(setq rmode (getvar "regenmode"))
(setq pw (getvar "plinewid"))
(setvar "regenmode" 0)
(setvar "CMDECHO" 0)
(setvar "angdir" 0)
(setvar "angbase" 0)
(princ)
)
(defun CMDLA1 ()
(setvar "angdir" angd)
(setvar "angbase" angb)
(setvar "CMDECHO" cmdech)
(setvar "orthomode" oom)
(setvar "osmode" osm)
(setvar "clayer" LA)
(setvar "regenmode" rmode)
(setvar "plinewid" pw)
(princ)
)
(defun @User (bit kwd msg def / inp)
(if def
(setq msg (strcat "\n" msg "<" (rtos def 2) ">: ")
bit (* 2 (fix (/ bit 2))))
(setq msg (strcat "\n" msg ": ")))
(initget bit kwd)
(setq inp (getreal msg))
(if inp inp def)
)
我这次又自己重新写了一遍,而且把那个填充命令改成用实心圆环了。出错提示还是一样,说明不太可能是大小括号或多个了""的原因。
发表于 2004-12-24 08:21:00 | 显示全部楼层
xstlf发表于2004-12-23 17:20:00(setq ang (angle 'ptstart 'ptend))



我把上面这句改为。setq ang (angle ptstart ptend))时反而能运行了,就是提示示知命令cz.这是为什么呀?

不要以为加一撇就比较好看,要仔细看看 ' 的用法,不是你想加就可以加的。。。
 楼主| 发表于 2004-12-24 09:00:00 | 显示全部楼层
meflying老师好!我是把DXF组码没弄清,我以为,ptend.ptstart不是点,是点的坐标值。这儿应该是指由点坐标值组成的表吧。 还有一点想问,上面,我把这改过来后,还是出错,最后画好图后,还是提示命令CZ为未知。不知错在哪里,我检查了一下,画出来的图并没有错呀。而且,这程序一加载,影响到其他的程序中对图层设定方面产生错乱。
 楼主| 发表于 2004-12-24 09:36:00 | 显示全部楼层
本帖最后由 作者 于 2004-12-24 9:56:26 编辑

谢谢,-f5612140 ZZXXQQ.meflying。让我又学到了好多。想再问一下,这程序现在都可以用了,画出来的也对的,但最后结果却提示说。未知命令CZ.。我输入的数据分别为。300,400,0,75。而且这个程序加载后,影响到另外的LISP运行结果。我现在把最终的发上来,求你们再帮我看看好吗? (defun c:cz (/ zhoux exis ptstart ptend ang1 pt1 r1 prx p1 p2 p3 p4 c1)
(setq no1 (@User 1 "" "\n设定柱断面宽度或圆柱直径:" no1)
no2 (@User 1 "" "\n设定柱断面高度<H=0时为圆柱>:" no2)
)
(setq pxx (@User 1 "" "\n输入柱断面X方向偏心距离:" pxx )
pxy (@User 1 "" "\n输入柱断面Y方向偏心距离:" pxy )
)
(CMDLA0)
(setq zhoux (car (entsel "\n输入参考轴线 <X轴>:")))
(setq exis (entget zhoux))
(setq ptstart (cdr (assoc 10 exis))
ptend (cdr (assoc 11 exis))
)
(setq ang1 (angle ptstart ptend))
(setvar "clayer" "梁柱")
(setvar "osmode" 32)
(setq pt1 (getpoint "\n选择柱插入点:"))
(setvar "osmode" 0)
(setq r1 (/ no1 2))
(setq prx (polar pt1 ang1 (+ pxx r1)))
(setq p1 (polar prx (+ ang1 (/ pi 2)) (+ (/ no2 2) pxy))
p2 (polar p1 ang1 (- 0 no1))
p3 (polar p2 (- ang1 (/ pi 2)) no2)
p4 (polar p3 ang1 no1)
)
(setvar "plinewid" 0)
(if (/= no2 0)
(command "_pline" p1 p2 p3 p4 "C" "")
(progn
(command "_circle" pt1 r1 "")
(setq c1 (entlast))
)
)
(setvar "clayer" "填充")
(if (/= no2 0)
(command "_.solid" p1 p2 p4 p3 "")
(command "-bhatch" "S" c1 "" "p" "solid" "" "a" "" "s" "" "i" "" "" "")
)
(princ)
(CMDLA1)
)
(defun CMDLA0 ()
(setq angd (getvar "angdir"))
(setq angb (getvar "angbase"))
(setq cmdech (getvar "CMDECHO"))
(setq oom (getvar "orthomode"))
(setq osm (getvar "osmode"))
(SETQ LA (getvar "clayer"))
(setq rmode (getvar "regenmode"))
(setq pw (getvar "plinewid"))
(setvar "regenmode" 0)
(setvar "CMDECHO" 0)
(setvar "angdir" 0)
(setvar "angbase" 0)
(princ)
)
(defun CMDLA1 ()
(setvar "angdir" angd)
(setvar "angbase" angb)
(setvar "CMDECHO" cmdech)
(setvar "orthomode" oom)
(setvar "osmode" osm)
(setvar "clayer" LA)
(setvar "regenmode" rmode)
(setvar "plinewid" pw)
(princ)
)
(defun @User (bit kwd msg def / inp)
(if def
(setq msg (strcat "\n" msg "<" (rtos def 2) ">: ")
bit (* 2 (fix (/ bit 2))))
(setq msg (strcat "\n" msg ": "))
)
(initget bit kwd)
(setq inp (getreal msg))
(if inp inp def)
) 里面所用到的图层,我都在模板文件中已经设定好的。
发表于 2004-12-24 10:03:00 | 显示全部楼层
本帖最后由 作者 于 2004-12-24 10:25:43 编辑

这里(command "_pline" p1 p2 p3 p4 "C" "")多了一对双引号,
应为(command "_pline" p1 p2 p3 p4 "C")。
这里(command "_circle" pt1 r1 "")也多的一对双引号,
应为(command "_circle" pt1 r1)。
这里应为(command "-bhatch" "S" c1 "" "p" "solid" "")。
 楼主| 发表于 2004-12-24 13:05:00 | 显示全部楼层
谢谢,可以了,没有错误了。圣诞快乐!!!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-9-30 00:34 , Processed in 0.182235 second(s), 19 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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