明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 3811|回复: 20

连接新截面轮廓线成实体再续

  [复制链接]
发表于 2004-3-31 17:05:00 | 显示全部楼层 |阅读模式
连接新截面轮廓线成实体再续:


上次多谢龙龙仔帮我修改的程序,很快就由一个圆柱体得到一个新的圆周曲面。后来加入了一个程序j,希望能将圆周曲面变为固体。只是错误提示:在子程序j中explode这一步,好像不可以选择主程序中得到的一截曲面?不知道是为什么。恳请帮忙。


非常感谢!



本帖子中包含更多资源

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

x
 楼主| 发表于 2004-3-31 17:10:00 | 显示全部楼层
对了,j程序是用的先将曲面炸开,得到一个个的facet,在设法得到一个facet 的四个端点中上面两个的中点,连接该点和rulesurf的上曲线的型心,得到一个路径,再使facet沿该路径放样,每个facet都这么做,得到很多的小固体,再联接它们成一个整的固体。(好像错误也提示说:不能沿该路径放样)。谢谢!
发表于 2004-4-1 07:56:00 | 显示全部楼层



       


本帖子中包含更多资源

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

x
 楼主| 发表于 2004-4-1 14:50:00 | 显示全部楼层
e
 楼主| 发表于 2004-4-1 14:58:00 | 显示全部楼层
龙龙仔,太谢谢您了。 您的型心选取处理的好精妙。region 是要在ucs平面上的,所以用了command "_.move" "l" "" "0,0" (list 0 0 (- DH))),它并不改变型心得坐标(x,y值)。又由於bl中将新轮廓线移开了一个距离,所以在ee中也将x加上一个偏移值。z值与mesh一端点的z相同。合并后得型心坐标。 您加了一步,将四边形的facet分成两个三角形进行extrude.这里想请问你,为社么单独建一个rulesurf,然后对其上的一个facet可以四边形拉伸,而在这里就不行了呢? 还想请问您,为什么要加(print(entget ENTT))(在bl子程序中)这一步? (setq SECC (ssadd)) (setq SECcC (ssadd)) 这两步放在j程序中行不行,是不是习惯都放在主程序中? 还有想再麻烦您帮我看看,修改后的程序,出错提示说选择的物体不能被拉伸,发现bl的第一步eee为空,不知道是不是(c:ee)(c:bl)放在一起的原因,非常感谢!!!
 楼主| 发表于 2004-4-1 15:00:00 | 显示全部楼层

本帖子中包含更多资源

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

x
发表于 2004-4-1 17:09:00 | 显示全部楼层

1. 然後對其上的一個facet可以四邊形拉伸,而在這裏就不行了呢?

->3點成一平面,4點就不一定

2. 問您,為什麼要加(print(entget ENTT))(在bl副程式中)這一步?

->調試程序忘了刪除

3.(setq SECC (ssadd))(setq SECCC (ssadd)) 這兩步放在j程式中行不行?

->(setq SECC (ssadd))是記錄SOLID,每處理一層先UNION所有SOLID(避免最後一次UNION)。

->(setq SECCC (ssadd))是記錄PATH,主要希望最後一次刪除所有PATH。

它們都在循環外,而j程式在循環內,如果把它們放在J,則程序要多執行

希望你再比對一下你的程序與我的程序差別。

注意:你最好別動(setq SECC (ssadd))的腦筋,不然程序………

 楼主| 发表于 2004-4-2 07:55:00 | 显示全部楼层
龙龙仔,谢谢你的解答。


我运行了你的和我的修改后的程序,都不能得到象你的一样的图形,是一个类似三棱柱一样的东东。请你再帮我看看好吗?


对集合类的元素<U>[U]union,的确省掉了很多步。[/U]</U><U></U>请问每层生成一整个固体后,层与层之间是不是还要union一下?
发表于 2004-4-2 08:04:00 | 显示全部楼层
(defun C:SL ()
(setq STIME (getvar "date"))
(vl-load-com)
(setvar "osmode" 0)
(command "_.UCS" "")
(setq ENT (car (entsel "pick up the object: ")))
(setq ENTV (vlax-ename->vla-object ENT))
(vla-getboundingbox ENTV 'PT1 'PT2)
(setq H (abs (- (last (vlax-safearray->list PT1))
(last (vlax-safearray->list PT2))
)
)
)
(setq Z (last (vlax-safearray->list PT2)))
(setq SL (/ H 10))
(setq SEC (ssadd))
(setq J 0
ZP NIL
)
(repeat 11
(setq DH (+ Z (* J SL)))
(setq ZP (list 0 0 DH))
(command "section" ENT "" "xy" ZP)
(setq RE (entlast))
(command "_.move" RE "" "0,0,0" (list 0 0 (- DH)))
(C:EE)
(C:BL)
(ssadd (entlast) SEC)
(setq J (1- J))
)
(command "surftab1" 25)
(setq I 0)
(setq SECC (ssadd))
(repeat 10
(setq F (ssname SEC I))
(setq G (ssname SEC (+ 1 I)))
(command "rulesurf" F G)
(C:J)
(setq I (1+ I))
)
(command "_.ERASE" SEC "")
(setq ETIME (getvar "date"))
(princ "\ntime needed to run this program:")
(princ (* 86400.0 (- (- ETIME STIME) (fix (- ETIME STIME))))
)
(princ "seconds")
(princ)
)
(defun C:EE ()
(vl-load-com)
(setq NAME (entlast))
(setq XOBJ (vlax-ename->vla-object NAME))
(setq PTST (vla-get-centroid XOBJ))
(setq PTMS (vlax-safearray->list (vlax-variant-value PTST)))
(setq PTMS (list (+ (car PTMS) 25) (cadr PTMS)))
)
(defun C:J ()
(setq HD (entlast))
(command "explode" HD)
(setq MESHES (ssget "p"))
(setq W 0)
(setq SECCC (ssadd))
(repeat (sslength MESHES)
(setq EN (ssname MESHES W))
(setq M (entget EN))
(setq PP1X (car (trans (cdr (assoc 10 M)) 0 1)))
(setq PP2X (car (trans (cdr (assoc 11 M)) 0 1)))
(setq MPX (/ (+ PP1X PP2X) 2))
(setq PP1Y (cadr (trans (cdr (assoc 10 M)) 0 1)))
(setq PP2Y (cadr (trans (cdr (assoc 11 M)) 0 1)))
(setq MPY (/ (+ PP1Y PP2Y) 2))
(setq PP1Z (caddr (trans (cdr (assoc 12 M)) 0 1)))
(setq MP (list MPX MPY PP1Z))
(setq CEN (append PTMS (list PP1Z)))
(command "line" MP CEN "")
(setq PATH (entlast))
(command "_.3DPOLY"
(trans (cdr (assoc 10 M)) 0 1)
(trans (cdr (assoc 11 M)) 0 1)
(trans (cdr (assoc 12 M)) 0 1)
"c"
)
(command "extrude" (entlast) "" "p" PATH)
(ssadd (entlast) SECC)
(command "_.3DPOLY"
(trans (cdr (assoc 10 M)) 0 1)
(trans (cdr (assoc 12 M)) 0 1)
(trans (cdr (assoc 13 M)) 0 1)
"c"
)
(command "extrude" (entlast) "" "p" PATH)
(ssadd (entlast) SECC)
(ssadd PATH SECCC)
(setq W (1+ W))
)
(command "_.UNION" SECC "")
(command "_.ERASE" MESHES SECCC "")
)
(defun C:BL (/ L LL)
(command "-color" 9)
(command "hatch" "u" 0 5 "n" RE "")
(command "erase" RE "")
(command "explode" (entlast))
(vl-load-com)
(setq SS (ssget "P"))
;;(setq SS (ssget "x" '((62 . 9))))
(setq I 0)
(setq PT_LST NIL)
(repeat (sslength SS)
(setq ENTT (ssname SS I))
(setq ENS (vlax-ename->vla-object ENTT))
(setq
L (vlax-curve-getdistatparam ENS (vlax-curve-getendparam ENS))
)
(setq LL (- (+ (expt L 1.2) 0.1) (/ DH 12)))
(setq DX (abs(/ (- LL L) 2)))
(setq LE (entget ENTT))
(setq PT1X (car (cdr (assoc 10 LE))))
(setq PT1Y (cadr (cdr (assoc 10 LE))))
(setq PT1Z (caddr (cdr (assoc 10 LE))))
(setq PT1 (list (- PT1X DX) PT1Y PT1Z))
;;(setq LE (entget ENTT))
(setq PT2X (car (cdr (assoc 11 LE))))
(setq PT2Y (cadr (cdr (assoc 11 LE))))
(setq PT2Z (caddr (cdr (assoc 11 LE))))
(setq PT2 (list (+ PT2X DX) PT2Y PT2Z))
(setq PT_LST (append PT_LST (list (list PT1 PT2))))
(entdel ENTT)
(setq I (1+ I))
)
(command "-color" 7)
(command "spline")
(mapcar '(lambda (E) (command (car E))) PT_LST)
(mapcar '(lambda (E) (command (cadr E))) (reverse PT_LST))
(command "c" "")
(command "move" "l" "" "-25,0,0" ZP)
(princ)
)
 楼主| 发表于 2004-4-2 08:40:00 | 显示全部楼层
long long zai,i am sorry.i still cannot get that result.It shows L is nil.


Would you please help me to run it again? Are you using Autocad 2000?


Appreciate!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-11-28 03:47 , Processed in 0.190366 second(s), 27 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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