马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
×
方法一用ENTMAKE - ;点集生成直线
- ;(xx-mk-line-pts '((0 0 0)(0 5 0)(5 0 0)(0 10 5)))
- ;(xx-mk-line-pts (list(getpoint)(getpoint)(getpoint)))
- (DEFUN xx-mk-line-pts(pts / lst)
- (setq lst (xx-lst-DengFen pts 2))
- (mapcar(function(lambda (x)(xx-mk-line (car x) (cadr x)))) lst)
- )
- (defun xx-lst-DengFen (Lst mun / flag i k n rl tmp)
- (IF(AND(= (type LST) 'LIST)(= (type MUN) 'INT) )
- (progn
- (setq i 0)
- (setq n (- (length lsT) (1- MUN)));表的长度减去MUN减去1
- (repeat n;循环上面的次数
- (setq k i flag t tmp nil);初始化
- (while (and flag (nth k lsT));当表的第K个值为真时,循环
- (setq tmp(cons (nth k lsT) tmp ));组合第K个表元素
- (setq k (1+ k))
- (if (zerop(rem (- k i) MUN));直到表中元素为MUN的个数时,?
- (setq flag nil;退出循环
- rl (cons (reverse tmp) rl);将表依次加入表
- )
- )
- )
- (setq i (1+ i))
- )
- (reverse rl);跌倒表
- )
- (princ "\n xx-lst-DengFen 错了!")
- )
- )
- (defun xx-mk-line (pt1 pt2)
- (if(and pt1 pt2)
- (progn
- (entmake(list '(0 . "line")(cons 10 pt1)(cons 11 pt2)))
- )
- (princ "\n xx-mk-line 错了!")
- )(entlast)
- )
方法二:用CAD命令 - (defun xxx (pts / os)
- (setq os(getvar 'osmode))
- (setvar "osmode" 0)
- (vl-cmdf "_.line")
- (mapcar 'vl-cmdf pts)
- (vl-cmdf "")
- (setvar "osmode" os)
- )
测试程序
 - (defun get-utime()(* 86400.0 (getvar"tdusrtimer")))
- (defun c:xx ( / pt pts)
- (setq pt (getpoint) pts nil)
- (repeat 100000
- (setq pts(cons (setq pt1 (polar pt (* pi 0.5) 1)) pts))
- (setq pt pt1)
- )
- (setq t1(get-utime))
- (xxx pts)
- (setq t2(get-utime))
- (PRINC (list 0 0 (- t2 t1)))
- (princ)
- )
|