明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 3558|回复: 11

[提问] 简单Lisp程序总是出现参数类型错误: 二维/三维点: nil

[复制链接]
发表于 2015-6-27 21:10 | 显示全部楼层 |阅读模式
群友们好,我自己编了一个绘制轨迹的程序,结合DCL一起弄的,但是一直绘制不出曲线,显示参数类型错误:二维/三维点: nil。请问该如何解决?谢谢!
附件就是程序,欢迎大家指教!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x
发表于 2015-6-27 23:25 | 显示全部楼层
本帖最后由 ljpnb 于 2015-6-27 23:42 编辑

修改过了,能运行,点取消还会执行命令,没搞明白。。。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x
 楼主| 发表于 2015-6-28 00:17 来自手机 | 显示全部楼层
好,我先试试,谢谢了!!回头我反馈一下运行状况!
发表于 2015-6-28 08:36 | 显示全部楼层
ljpnb 发表于 2015-6-27 23:25
修改过了,能运行,点取消还会执行命令,没搞明白。。。
  1. (defun dcl_dxz ()
  2.   (if (> (setq dcl_id (load_dialog "dxz")) 0) (progn
  3.     (if (new_dialog "dxz1" dcl_id) (progn
  4.   ;;设置默认值
  5.       (set_tile "dia_out" "108")
  6.       (set_tile "dia_thi" "4.5")
  7.       (set_tile "dia_in"
  8.             (rtos (- (atof (get_tile "dia_out"))
  9.                      (* 2 (atof (get_tile "dia_thi")))
  10.                   )
  11.             )
  12.       )
  13.       (set_tile "dia_dn" "100")
  14.       (set_tile "dxz_angi" "8")
  15.       (set_tile "dxz_ango" "8")
  16.       (set_tile "dxz_len" "200")
  17.       (set_tile "dxz_rad"
  18.             (rtos (* 1.5 (atof (get_tile "dia_out"))))
  19.       )
  20.       (set_tile "dxz_depi" "5")
  21.       (set_tile "dxz_depo" "5")
  22.       (action_tile "draw" "(done_dialog 1)")
  23.       (action_tile "cancel" "(done_dialog 0)")
  24.   ;;(setq dd (start_dialog))
  25.       (setq diameter_mm (atof (get_tile "dia_out")))
  26.       (setq thickness_mm (atof (get_tile "dia_thi")))
  27.       (setq angle_entry (d2r (atof (get_tile "dxz_angi"))))
  28.       (setq angle_exit (d2r (atof (get_tile "dxz_ango"))))
  29.       (setq length_horizon (atof (get_tile "dxz_len")))
  30.       (setq depth_horizon_entry (atof (get_tile "dxz_depi")))
  31.       (setq depth_horizon_exit (atof (get_tile "dxz_depo")))
  32.       (setq re (start_dialog))
  33.     )
  34.       (princ "\n无法显示对话框!")
  35.     )
  36.     (unload_dialog DCL_ID)
  37.   )
  38.     (princ "\n无法加载对话框!")
  39.   )
  40.   (if (= re 1) (ok_run) )
  41. )
 楼主| 发表于 2015-6-28 20:43 | 显示全部楼层
ZZXXQQ 发表于 2015-6-28 08:36

你好,谢谢了!我运行了一下,的确是可以正常绘制曲线了!大赞!不过,有几个疑问如下:
1、你修改后的程序里面,我调用的子函数是直接包含在文件里面,但是我通过load函数加载后也可以正常运行,所以,通过加载子函数的方法应该可以实现一个函数被多个函数文件调用吧
2、程序里面有一行:(UNLOAD_DIALOG DCL_ID) 请问是否有必要,因为我注释掉这段程序后仍然可以正常运行;
3、我原先的文件里面有一行是(action_tile "draw" "(ok_run)(done_dialog 0) "),但是您修改为:(action_tile "draw" "(done_dialog) "),并将(ok_run)放在函数末尾,请问这种语法在哪里有?我自己那样子写是参考《AUTOCAD完全应用指南(Autolisp+DCL+Visual LISP程序设计篇)》的258页里面的语法写的,截图如附件所示。所以我本来的程序出错我也觉得有点奇怪。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x
发表于 2015-6-29 08:06 | 显示全部楼层
sysu-沼泽 发表于 2015-6-28 20:43
你好,谢谢了!我运行了一下,的确是可以正常绘制曲线了!大赞!不过,有几个疑问如下:
1、你修改后的程 ...

LISP使用对话框要深入理解其原理及使用的限制才行。
使用的限制中有一条:在对话框显示时不能运行command函数。所以包含command的函数要在done_dialog之后运行。
对于什么“完全应用指南”偶没看过,估计是错误百出。
unload_dialog是从内存卸载对话框,不卸载只是占用内存。
 楼主| 发表于 2015-6-29 20:34 | 显示全部楼层
ZZXXQQ 发表于 2015-6-29 08:06
LISP使用对话框要深入理解其原理及使用的限制才行。
使用的限制中有一条:在对话框显示时不能运行comman ...

原来这样子,谢谢了!还没看到资料后部分,不了解这方面的知识,学习了!
发表于 2015-7-1 20:25 | 显示全部楼层
对话框这块很早之前写过几个,对这块也没好好研究,Z版改得不错,学习了。。。。
发表于 2015-7-1 20:46 | 显示全部楼层
ljpnb 发表于 2015-7-1 20:25
对话框这块很早之前写过几个,对这块也没好好研究,Z版改得不错,学习了。。。。

大师 的头像是啥意思?
发表于 2015-7-1 21:36 | 显示全部楼层
lucas_3333 发表于 2015-7-1 20:46
大师 的头像是啥意思?

那是一块“东坡肉”---玉石,在台湾故宫拍的。。。。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-4-20 12:36 , Processed in 0.212892 second(s), 31 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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