明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1597|回复: 8

[讨论] 标尺刻度程序出错求解决

[复制链接]
发表于 2011-7-12 16:38:26 | 显示全部楼层 |阅读模式
(defun c:abbg ()
(setvar "cmdecho" 0)
(setq dim (getvar "dimzin"))
(setvar "dimzin" 0)
(command "osnap" "non")
(defun 3dPoint->2dPoint (3dpt)(list (car 3dpt) (cadr 3dpt)));;;三维点转为二维点
(setq s-bc-a (entsel "\n<起点标尺>"))
(setq bc-a-endata (entget (car s-bc-a)))
(setq s_typ (cdr (assoc 0 bc-a-endata)));;;文字类型
(setq bc-a-data (cdr (assoc 1 bc-a-endata)));;;刻度数值
(setq bc-a-xy (cdr (assoc 10 bc-a-endata)));;;刻度坐标xy
(setq bc-a-x (car bc-a-xy))
(setq bc-a-y (cadr bc-a-xy))
(setq bc-a-pt (list bc-a-x bc-a-y))
(setq bc-a-text (cdr (assoc 7 bc-a-endata)));;;刻度字体
(setq bc-a-data (atof bc-a-data));;;第一刻度值

(setq s-bc-b (entsel "\n<第二点标尺>"))
(setq bc-b-endata (entget (car s-bc-b)))
(setq bc-b-data (cdr (assoc 1 bc-b-endata)));;;刻度数值
(setq bc-b-xy (cdr (assoc 10 bc-b-endata)));;;刻度坐标xy
(setq bc-b-x (car bc-b-xy))
(setq bc-b-y (cadr bc-b-xy))
(setq bc-b-pt (list bc-b-x bc-b-y))
(setq bc-b-text (cdr (assoc 7 bc-b-endata)));;;刻度字体
(setq bc-b-data (atof bc-b-data));;;第二刻度值

(setq ab (- bc-b-data bc-a-data))
(setq s-ab (distance bc-a-pt bc-b-pt));;;图上二点距离
(if (> bc-b-y bc-a-y) (setq pi-p (* pi 0.5)))
(if (< bc-b-y bc-a-y) (setq pi-p (* pi -0.5)))

;;(if (> bc-b-x bc-a-x) (setq pi-p (* pi 0)))
;;(if (< bc-b-x bc-a-x) (setq pi-p (* pi 1)))

(setq s-n 1)
(setq s-bb (ssget "c" (polar bc-b-pt (* pi 1.01) 1) (polar bc-b-pt (* pi 0.1) 1)))
;;;(command "osnap" "int,endp")
(setq base-pt (getpoint "\n<点击>可视范围要超前"))
(while base-pt
      (setq bc-c-pt (polar bc-b-pt pi-p (* s-ab s-n)));;;几倍
      (setq bc-c-data (rtos (+ bc-b-data (* ab s-n)) 2 0));;;第三刻度值
      (command "copy" s-bb "" bc-b-pt bc-c-pt "")
      (setq ss (ssget "c" (polar bc-c-pt (* pi 1.01) 1) (polar bc-c-pt (* pi 0.1) 1)))
      (setq ssn (ssname ss 0))
      (setq ss-endata (entget ssn))
      (setq ss-2 (assoc 1 ss-endata))
      (setq ss-22 (cons 1 bc-c-data))
      (setq ss-endata (subst ss-22 ss-2 ss-endata))
      (entmod ss-endata)
      (setq s-n (+ s-n 1))
      (setq base-pt (getpoint "\n<点击>可视范围要超前"))
)
(gc)
(command "osnap" "int,endp")
(prin1)
)


上面这个程序是本人以前编写的,用于补充剖面图标尺上下两边的刻度
以前很长时间都是很好用的,以后机子换装系统后重装cad后就不好用了
运行后老提示           错误: 参数类型错误: lselsetp nil
我一直不得其解,望高人指出程序错在哪里,还我工作速度

本帖子中包含更多资源

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

x
"觉得好,就打赏"
还没有人打赏,支持一下
发表于 2011-7-12 16:41:49 | 显示全部楼层
本帖最后由 jicqj 于 2011-7-12 16:43 编辑

出错原因 应该在图纸的不同上面。或者程序本身有缺项。跟你的电脑系统无关吧。把测试的cad图纸也发上来看看。
 楼主| 发表于 2011-7-12 16:51:01 | 显示全部楼层
图纸发上来也不可能看到图纸作图环境,我估计程序运行出错可能跟CAD的图纸环境有关,但如果一个好的程序是可以适应各种不同CAD作图环境的呀,我其它程序都不会出错
 楼主| 发表于 2011-7-12 17:01:20 | 显示全部楼层
程序基本思路就是点选标尺第一刻度值,再点选第二刻度值,通过程序自己运算,得到第三刻度值并标在标尺上它应该处的位置,以此类推第四、第五、、、刻度
 楼主| 发表于 2011-7-12 17:03:12 | 显示全部楼层
估计是新作图环境使选择集时出错,但我看不出究竟
发表于 2011-7-12 19:52:06 | 显示全部楼层
      ;; 第三刻度值
    (command "copy" s-bb "" bc-b-pt bc-c-pt "")
==>
    (command "copy" s-bb "" bc-b-pt bc-c-pt)
 楼主| 发表于 2011-7-14 08:44:15 | 显示全部楼层
谢谢论坛长老,但不是这个原因
发表于 2011-7-14 09:27:16 | 显示全部楼层
错误: 参数类型错误: lselsetp nil
是选空了
参考这儿
http://bbs.mjtd.com/thread-88103-1-1.html
 楼主| 发表于 2011-7-14 09:40:56 | 显示全部楼层
谢谢论坛长老,我也知道是选集问题,我会一点一点试验想方法解决的
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2025-6-10 06:27 , Processed in 0.267903 second(s), 27 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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