qjchen 发表于 2012-5-3 19:39:24

[几何图案系列] 动态3DMESH及一些3DMESH图形(心型、星型、莫比乌斯环、海螺等)

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



;;;by David Bethel : http://www.cadtutor.biz/forum/showthread.php?t=5457
(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 http://autolisp.mapcar.net/lambda.html
(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 qjchen@gmail.com
(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的




lrd1861 发表于 2012-5-3 20:17:36

qjchen   大师果然强大

wowan1314 发表于 2012-5-3 20:18:53

晕! 玩的太大了!这什么啊! 汗~~~~~~~~~~

duotu007 发表于 2012-5-3 21:19:14

谢谢qjchen 分享,LISP的乐趣总是不经意间的发现。

cnks 发表于 2012-5-3 22:51:27

不懂,学习一下

kwok 发表于 2012-5-3 22:55:34

创意总在闪电中发生

yoyoho 发表于 2012-10-31 08:45:04

感谢qjchen 分享程序!

springwillow 发表于 2012-11-2 14:43:44

很好、很强大,只能观仰了

恕放之生命 发表于 2014-8-28 11:50:22

很好很强大的东西,谢谢分享。
页: [1]
查看完整版本: [几何图案系列] 动态3DMESH及一些3DMESH图形(心型、星型、莫比乌斯环、海螺等)