[飞马系列] 动态3DMESH及一些3DMESH图形(心型、星型、莫比乌斯环、海螺等)
qjchen
首先说明一下,这些内容用MATLAB,MATHEMATICA之类均很简单地实现,此处仅探讨AutoCAD 3DMESH的一些内容
一直以来,对数学图形总是比较着迷的
在早期学习lambda的时候,曾经去过这个网站
http://autolisp.mapcar.net/lambda.html
学到了lambda的有趣的用法和初窥3dmesh
后来,学grread的时候,写过如下的一段代码,用于动态形成波浪式的3dmesh,不过不少代码是来自他人的

- ;;;by David Bethel : [url=http://www.cadtutor.biz/forum/showthread.php?t=5457]http://www.cadtutor.biz/forum/showthread.php?t=5457[/url]
- (defun draw_mesh (vlist mmesh nmesh mflg nflg / cflg)
- (and (= (type vlist) 'LIST)
- (= (type nmesh) 'INT)
- (= (type mmesh) 'INT)
- (< nmesh 256)
- (< mmesh 256)
- (> nmesh 2)
- (> mmesh 2)
- (cond ((and nflg mflg) (setq cflg 49))
- (nflg (setq cflg 48))
- (mflg (setq cflg 17))
- (t (setq cflg 16)))
-
-
- (entmake (list (cons 0 "POLYLINE")(cons 66 1)
- (cons 6 "BYLAYER")
- (cons 10 (list 0 0 0))
- (cons 70 cflg)
- (cons 71 mmesh)(cons 72 nmesh)
- (cons 39 0)))
-
- (foreach v vlist
- (entmake (list (cons 0 "VERTEX")
- (cons 6 "BYLAYER")
- (cons 10 v)
- (cons 70 64))))
- (entmake (list (cons 0 "SEQEND")))
-
-
-
- ))
- ;;; by Qjchen
- ;;;; from [url=http://autolisp.mapcar.net/lambda.html]http://autolisp.mapcar.net/lambda.html[/url]
- (defun genlist(expr steps xpi ypi scale / plist tlist xn yn zn)
- (setq plist nil)
- (setq xn 0.0 yn 0.0)
- (repeat(* xpi steps)
- (setq tlist nil)
- (setq yn 0.0)
- (repeat(* ypi steps)
- (setq zn(* scale ((eval expr) xn yn)))
-
- (setq tlist(append tlist(list (list xn yn zn))))
- (setq yn(+ yn(/ pi steps)))
- )
- (setq plist(append plist tlist))
- (setq xn(+ xn(/ pi steps)))
- )
- plist
- )
- ;;;the following is by [url=mailto:qjchen@gmail.com]qjchen@gmail.com[/url]
- (defun c:test ( / ent1 gr height scale temp)
- (setq temp (getvar "cmdecho"))
- (setvar "cmdecho" 0)
- (command "._-view" "_top")
- (command "._-view" "_swiso")
- (command "zoom" "w" "-10,-10" "15,15")
- (setq height (getvar "viewsize"))
- (while (= (car (setq gr (grread nil 5 0))) 5)
- (if (setq ent1 (entlast))(entdel ent1))
- (setq scale (* (/ (- (cadr (cadr gr)) 10) height) 5))
- (draw_mesh (genlist '(lambda (x y /) (* (cos x) (cos y))) 10 3 3 scale) 30 30 nil nil )
- )
- (setvar "cmdecho" temp)
- (princ)
- )
近日,买了一本 王文栋(中国美院建筑专业研究生)写的《rhinos参数建模》的书,觉得大开眼界
不过书中的均是基于Rhino的Nurbs曲面
于是萌发出用3dmesh绘制这些漂亮图形的念头,于是花了几个小时撰写这个自娱自乐的代码
这次的代码是在Lee Mac的ActiveX思路上新写的,比Entmake要简单许多
http://www.theswamp.org/index.php?topic=33766.0
后来又在 (http://k3dsurf.sourceforge.net/ ) 下载了k3dsurf 这个开源软件,里面有更多有趣的曲面
采用了里面的一些图形定义
(注:图中的12个图形,部分经过缩放来保证各图形大小比较一致,部分经过旋转,渲染也是后期用CAD做的,非程序内置)
不过acad高版本是有nurbs的,不知道有没有哪位研究过如何用.Net或者Lisp来生成NURBS的
|