明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 3303|回复: 5

调用子函数怎么说参数太多??

[复制链接]
发表于 2005-6-12 12:19:00 | 显示全部楼层 |阅读模式
买的一本书有这个: ;;;连续注标高
(defun c:level (/ s a a1 c k0 k00)
(setvar "cmdecho" 0)
(setq s (getreal "\n输入出图比例[1: ]<100>:"))
(if (= s nil)
(setq s 100)
)
(setq a (getpoint "\n 输入零点标高插入点:"))
(command "insert" "bg2" a (/ s 100) "" "")
(while a
(setq a1 (getpoint a "\n 输入标高插入点:"))
(if (= (nth 1 a1) (nth 1 a))
(command "insert" "bg2" a1 (/ s 100) "" "")
(progn
(setq k0 (/ (- (nth 1 a1) (nth 1 a)) 1000))
(setq k00 (rtos k0 2 3))
(initget "Down Up")
(setq c (getkword "\n 尖端向下/尖端向上[Down/Up]<Down>:"))
(if (= c nil)(setq c "Down"))
(cond
((= c "Down")
(command "insert" "bg" a1 (/ s 100) "" "" k00)
)
((= c "Up")
(command "insert" "bg1" a1 (/ s 100) "" "" k00))
)
)
)
)
)
我想不用块 ,直接调用函数来画: ;;;连续注标高
(defun c:lev (/ s s1 s2 a a1 k0 k00)
(setvar "cmdecho" 0)
(setq s (getreal "\n输入出图比例[1: ]<100>:"))
(if (= s nil)
(setq s 100)
)
(setq s1 (* 300 (/ s 100)))
(setq s2 (* 300 (/ s 100)))
(setq t0 "%%p0.000")
(setq a (getpoint "\n 输入零点标高插入点:"))
(dbg a s1 s2 t0)
(while a
(setq a1 (getpoint a "\n 输入标高插入点:"))
(if (= (nth 1 a1) (nth 1 a))
(dbg a s1 s2 t0)
(progn
(setq k0 (/ (- (nth 1 a1) (nth 1 a)) 1000))
(setq k00 (rtos k0 2 3))
(dbg a s1 s2 k00)
) ) ) )
(defun dbg(/ pt1 s1 s2 t0)
(setq pt2(list(+ (car pt1) S1)(+ (cadr pt1) S1)))
(setq pt3(list(-(car pt1) S1)(+(cadr pt1) S1)))
(setq pt4(list(car pt1) (+ (cadr pt1) S1)))
(setq pt5(list(+ (car pt4) (* 5 S1))(cadr pt4)))
(setq pt6(list(car pt1) (+ (cadr pt1) (* 1.5 S1))))
(command "line" pt2 pt1 pt3 pt2 "")
(command "line" pt4 pt5 "")
(command "text" pt6 s2 "" t0 "")
) 那位大侠可以帮我修正一下。
发表于 2005-6-12 15:23:00 | 显示全部楼层
我不知道自己的意见对不对,因为我看lisp也不过几天.


定义自定义函数时,变元表斜杠之前的为形参,可以传递参数;斜杠之后的为局部变量,对与你的例子来说pt1 s1 s2 t0仅在函数dbg中起作用,不能在调用的时候起到传递参数的作用.


你的自定义函数中没有定义形参,所以会有参数太多的提示
发表于 2005-6-12 15:52:00 | 显示全部楼层
  1. ;;;连续注标高
  2. (defun c:lev (/ s s1 k00)
  3.    (setvar "cmdecho" 0)
  4.    (setq s (getreal "\n输入出图比例[1:]<100>:"))
  5.    (if (= s nil)
  6.        (setq s 100)
  7.    )
  8.    (setq  s1 (* 300 (/ s 100))
  9.   t0 "%%p0.000"
  10.   a   (getpoint "\n输入零点标高插入点 : ")
  11.    )
  12.    (dbg a s1 t0)
  13.    (while (setq a1 (getpoint a "\n输入标高插入点 : "))
  14.        (setq k00 (rtos (/ (- (cadr a1) (cadr a)) 1000) 2 3))
  15.        (dbg a1 s1 k00)
  16.    )
  17. )(defun dbg (pt1 s1 t0)
  18.    (setq  pt2 (list (+ (car pt1) S1) (+ (cadr pt1) S1))
  19.   pt3 (list (- (car pt1) S1) (+ (cadr pt1) S1))
  20.   pt4 (list (car pt1) (+ (cadr pt1) S1))
  21.   pt5 (list (+ (car pt4) (* 5 S1)) (cadr pt4))
  22.   pt6 (list (car pt1) (+ (cadr pt1) (* 1.5 S1)))
  23.    )
  24.    (command "pline" pt2 pt1 pt3 pt5 "")
  25.    (command "text" pt6 s1 "" t0)
  26. )
 楼主| 发表于 2005-6-13 20:23:00 | 显示全部楼层
又是         cyp                 .                                                                                 3Q                 3Q         3Q
 楼主| 发表于 2005-6-13 20:34:00 | 显示全部楼层
谢谢楼上的两位。         


有点小问题,多半情况下好用,有时候(视图zoom得看到的范围较大时)绘画出错误的图案。
发表于 2005-6-13 21:17:00 | 显示全部楼层
把捕捉关掉应该就可以了。。。


更正一下,应该“XYP。。。”,不是CYP
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-11-17 13:30 , Processed in 0.177754 second(s), 25 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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