明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 3400|回复: 25

修改的轮廓的新程序

  [复制链接]
发表于 2004-2-21 06:41:00 | 显示全部楼层 |阅读模式
hi,大家好,真的很谢谢你们给我的提示。有些地方确实如你们所说,修改了就好了。 我作了些修改,又遇到了些问题。(setq p0 (car p1)) 这一步,猜想可能是p1定义的问题。p1是由repeat命令得到的左端点坐标的选择集,初始集定义为空,以后将新得到的坐标一个一个的放进去。P2是右端点坐标的选择集。 然后用pline将p1,p2内的点分别联成曲线。再用fillet将它们首尾相连。 谢谢! (Defun c:bl (/ l ll)
(setq a (getpoint "internal point:"))
(setq p (getpoint "base point:"))
(command "-boundary" a "")
(command "move" "l" "" p "@5,-5")
(command "-color" 9)
(command "hatch" "u" 0 0.1 "n" "l" "")
(command "explode" "l" "")

(vl-load-com)
(setq ss (ssget "x" '((62 . 9))))
(setq i 0)
(setq p1 (ssadd))
(setq p2 (ssadd))
(repeat (sslength ss)
(setq ent (ssname ss i))
(setq ens (vlax-Ename->Vla-Object ent))
(setq l (vlax-curve-getdistatparam ens
(vlax-curve-getendparam ens)

)
)

(setq ll (+ (EXPT l 3.0) l 1.0))
(setq dx (/ (- ll l) 2))

(setq le (entget ent))
(setq pt1x (car (assoc 10 le)))
(setq pt1y (cdr (assoc 20 le)))
(setq pt1 (list (- pt1x dx) pt1y)) (setq f1 (entlast)
p1 (ssadd f1 p1)
) (setq pt2x (car (assoc 11 le)))
(setq pt2y (cdr (assoc 21 le)))
(setq pt2 (list (+ pt2x dx) pt2y)) (setq f2 (entlast)
p2 (ssadd f2 p2)
)
(entdel ent)
(setq i (1+ i))
)
(setq p0 (car p1))
(command "pline" p0 "a")
(while (setq pp (car p1))
(command pp)
(setq p1 (cdr p1))
)
(setq en1 (entlast)) (setq p00 (car p2))
(command "pline" p00 "a")
(while (setq q (car p2))
(command q)
(setq p2 (cdr p2))
)
(setq en2 (entlast)) (command "fillet"
(list en1
(list (car (last p1)) (- (cadr (last p1)) 0.001))
(list en2 (last p2))
) (command "fillet"
(list en1 (list (car p0) (- (cadr p0) 0.001)))
(list en2 p00)
)
)
)
发表于 2004-2-21 08:55:00 | 显示全部楼层
既然已经知道问题所在,为何不改呢?


car是操作表的,而P1是选择集,这样使用不仅错误,而且没有任何意义
 楼主| 发表于 2004-2-22 09:35:00 | 显示全部楼层
改成了这样(if (= i 0)
(setq p0 pt1)
(setq p00 pt2))

(command "pline" p0 "a" p1 "")
(command "pline" p00 "a" p2 "") 又有一步出错啦。 fillet中(last p1)出错,查了一下,last 也是对列表的,所以不能用,那么如何选择选择集p1,p2里的最后一个元素呢?目的是将两条弧的首尾相连。 还有为社么画出的弧不显示呢? 谢谢!
 楼主| 发表于 2004-2-22 10:07:00 | 显示全部楼层
fillet 中的(- (cadr p0) 0.001) 出错。why? thanks.
发表于 2004-2-22 12:15:00 | 显示全部楼层
选择集使用SSNAME取出其中对象名


你的程序中变量的类型十分混乱,你应该好好学习一下基础知识,了解变量的类型,以及函数对变量类型的要求,而不是你想怎么用就怎么用的





帮助文件中有详细这方面的资料,为什么不查阅一下?
 楼主| 发表于 2004-2-23 12:57:00 | 显示全部楼层
pt1是被放入选择集之前的点(setq pt1 (list (- pt1x dx) pt1y)),你觉得我应该用ssname吗?


我不知道那个repeat到底得到的p1里有没有内容。


可不可以请你帮我改一下呢?谢谢
发表于 2004-2-23 13:05:00 | 显示全部楼层
我什么时候说对pt1要用ssname了?而且pt1既然是点,又怎么放入选择集?


选择集是包含对象名的一个集合,不能包含别的对象,跟表是不同的。。。。


再好好看看我5楼的话
 楼主| 发表于 2004-2-24 10:16:00 | 显示全部楼层
pt1用的(setq p1 (ssadd (entlast) p1))放入的,entlast获取对象名。 (setq pt2x (car (assoc 11 le)))
(setq pt2y (cadr (assoc 21 le)))
(setq pt2z (caddr (assoc 31 le)))
(setq pt2 (list (+ pt2x dx) pt2y pt2z)) 为社么这步pt2y,pt2z返回的值是nil呢? 后面的改成了这样:可是提示我 (entget (ssname p2 i))这里有错,可我没发现哪里错了阿 (if (= i 0)
(setq p0 (entget (ssname p1 i)))
(setq p00 (entget (ssname p2 i)))
)
(if (= i (sslength ss))
(setq tp1 (entget (ssname p1 i)))
(setq tp2 (entget (ssname p2 i)))
)
(command "pline" p0 "a" p1 "")
(setq en1 (entlast)) 请帮我看看,谢谢
发表于 2004-2-24 10:45:00 | 显示全部楼层
21和31只是在DXF文件中才有的,其组码列表中是没有的,取得点这样就可以了


(setq pt2 (cdr (assco 11 le)))


当然要保证有11这个组码,你可以跟踪le,看有le到底是个什么东西,跟你说过了,不要你想怎么样就怎么样,一定要了解其用法。。。


选择集索引是从0开始的,所以其只能到n-1,(ssname ss (sslength ss))肯定就发生错误了。


看了你的程序,发现你的基础很差,所以希望你不要急着编比较复杂的程序,要把基础打好了,至少写一个简单的程序时不会有很多错误了,才慢慢写一些实际功能的程序,否则,像上面的程序,里面错误一大堆,而且是对基础部分不熟悉造成的,这样对你学习并不好。。。
 楼主| 发表于 2004-2-24 15:28:00 | 显示全部楼层
谢谢你的忠告,虽然忠言逆耳,我知道你是为我好,我会从基础看起的。 改了一下, (setq pt1x (car (assoc 10 le)))
(setq pt1y (cadr (assoc 10 le)))
(setq pt1z (caddr (assoc 10 le)))
(setq pt1 (list (- pt1x dx) pt1y pt1z)) (setq p1 (ssadd (entlast) p1)) 请问为社么返回的P0,P00,TP1,TP2都是nil 呢?谢谢! (setq ff (ssname p1 0))
(setq p0 (entget ff))
(setq p00 (entget (ssname p2 0)))


(setq ee (ssname p2 (- (sslength ss) 1))
(setq tp1 (entget (ssname p1 i)))
(setq tp2 (entget (ssname p2 i)))
)
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-10-1 21:23 , Processed in 0.186189 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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