明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
楼主: ljcgq

[操作实录] cad中3d曲面变3d实体的一个思路

    [复制链接]
 楼主| 发表于 2005-12-28 19:17 | 显示全部楼层

dbdr:让你见笑了.我不会用mdt,以后有机会希望能学学.不过为了不辜负大家的支持我觉得还是应该把程序贴出来,让大家讨论以下,希望能得到你的支持.

说明:该程序只是为了掸明实现曲面到曲面实体的思路,漏洞很多,希望大家共同完善!!

;曲面按照指定方向生成的曲面等厚实体
;沪  ljc  2005.6
(defun c:st()
(command "ucs" "w")
  (setq cm(getvar "cmdecho") os(getvar "osmode")  ) (setvar "cmdecho" 0)
  (setq bh(getint "请输入板厚:"))
  (setq xf (car (entsel "请选择法线:")))
  (if (= xf nil) (setq xf (car (entsel "请选择法线:")))  )
  (princ "请选择曲面:")
  (setq ss (ssget '((0 . "3DFACE") )) )
  (setq n (sslength ss))
  (setq a 0)
(repeat n
    (setq qm (ssname ss a))
    (setq qm(entget qm))
    (setq p10(cdr(assoc 10 qm)))
    (setq p11(cdr(assoc 11 qm)))
    (setq p12(cdr(assoc 12 qm)))
    (setq p13(cdr(assoc 13 qm)))
    (setvar "osmode" 0)
    (command "3dpoly" p10 p11 p12 "c" )
    (setvar "osmode" os)
    (setq m1(entlast))
    (command "region" m1 "")
    (setq m1(entlast))
    (jj p10 p11 p12 xf)
    (setq cd (/ bh sinjj))
    (command "LENGTHEN"  "t" cd xf "")
    (command "extrude" m1 "" "p" xf "")
    (setq t1(entlast))
    (setvar "osmode" 0)
    (command "3dpoly" p12 p13 p10 "c" )
    (setvar "osmode" os)
    (setq m2(entlast))
    (command "region" m2 "")
    (setq m2(entlast))
    (jj p10 p11 p12 xf)
    (setq cd (/ bh sinjj))
    (command "LENGTHEN" "t" cd xf "" )
    (command "extrude" m2 "" "p" xf "")
    (setq t2(entlast))
    (command "union" t1 t2 "" )
   (setq a (+ a 1))
  )
 (setvar "cmdecho" cm)
 (command "_union" "all" "")
 (command "_shademode" "g")

)
;******************

 

 
;======夹角===========
;======ljc.2005.7=====
(DEFUN  jj( p0 p1 p2 fx / p3 p4 a b c x x0 x1 x2 x3 x4  y y0 y1 y2 y3 y4 z z0 z1 z2 z3 z4 yy rr   )
          (setq p3(cdr(assoc 10 (entget fx)))  p4(cdr(assoc 11 (entget fx))) )
          (setq x0(car p0) y0(cadr p0) z0(last p0))
          (setq x1(car p1) y1(cadr p1) z1(last p1))
          (setq x2(car p2) y2(cadr p2) z2(last p2))
          (setq x3(car p3) y3(cadr p3) z3(last p3))
          (setq x4(car p4) y4(cadr p4) z4(last p4))

          (setq a(- (* (- y1 y0) (- z2 z0)) (* (- y2 y0) (- z1 z0))))
          (setq b(- (* (- z1 z0) (- x2 x0)) (* (- z2 z0) (- x1 x0))))
          (setq c(- (* (- x1 x0) (- y2 y0)) (* (- x2 x0) (- y1 y0))))
         
          (setq x(- x4 x3) y(- y4 y3) z(- z4 z3))
         
         
          (setq yy(abs(+  (* a x) (* b y) (* c z) )))
          (setq rr(* (expt (+ (expt a 2) (expt b 2) (expt c 2) ) 0.5) (expt (+ (expt x 2) (expt y 2) (expt z 2) ) 0.5)))
          (setq sinjj(/ yy rr))
         

)

 

本帖子中包含更多资源

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

x
 楼主| 发表于 2005-12-28 19:23 | 显示全部楼层

操作:

首先要自己把曲面作出来,然后作曲面的近似垂线再进行如下操作:

本帖子中包含更多资源

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

x
 楼主| 发表于 2005-12-28 19:31 | 显示全部楼层

 

 cad中3d曲面变3d实体的一个思路

1.把3d曲面的网面炸成单个的空间四边形面

2.把单个四边形面的四个点读出,并形成两个三角形的面域

3沿同一方向拉伸三角形成实体(拉伸长度可根据你需要的函数控制),

4重复1~3步,直到全部结束

5,做并集

程序是也是按照这个思路编写的,其中"jj"子程序就是第3条中的拉伸函数,即把拟定法线的长度改变以保证在每个小的三角面的垂直方向等于板厚.

还有:其中网格的细蜜程度决定曲面的精确程度,也决定了运算需要的时间了.

下边是演示用的cad文档

[glow=255,red,2]文字[/glow]

本帖子中包含更多资源

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

x
发表于 2005-12-29 00:06 | 显示全部楼层

感谢,已经加载了,很好用,只是如果 曲面线框密度 调的比较大的话,要运行一段时间才能完成

会编程真好!

支持!

发表于 2005-12-29 15:26 | 显示全部楼层

ljcgq你好,奉承话我也不讲了。下载使用后确实对CAD的三维制作思路有了新的拓宽,就是有一点,在拉伸时都是延法线平行方向的。如果我想要画人体手臂是圆筒形的,是否能让拉伸时的方向延中心轴而旋转呢。我编程还没学好请教了。谢谢。

发表于 2005-12-29 20:06 | 显示全部楼层
ljcgq发表于2005-12-28 19:17:00 dbdr:让你见笑了.我不会用mdt,以后有机会希望能学学.不过为了不辜负大家的支持我觉得还是应该把程序贴...


惭愧,我对lsp可是一窍不通啊,岂敢说“见笑”二字。

只是觉得用MDT简单点,省事点。

 楼主| 发表于 2005-12-29 21:04 | 显示全部楼层

newdhj:你好其实只要改写"jj"子程序--当法线和三角形平面的夹角小于10度,让法线的角度旋转90度,就可以实现象你说的圆柱曲面的实体了,由于时间原因希望高手能帮着写一下这段程序.

dbdr:相互学习嘛,理解万岁!!也谢谢你的支持.

发表于 2006-1-7 10:33 | 显示全部楼层

那有好的MDT教程下载?

 

发表于 2006-2-25 19:06 | 显示全部楼层
发表于 2006-2-25 21:45 | 显示全部楼层

高!~

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

本版积分规则

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

GMT+8, 2024-4-20 04:20 , Processed in 0.389703 second(s), 17 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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