龙城飞将36 发表于 2013-7-30 08:12:31

多线段老是画零长度线,高手给看看

多线段老是画零长度线,高手给看看,(angle (nth i pp) (nth (+ i 1) pp)),二维三维点错误(polar pt (+ (/ pi 4) ang) (* 1.5 *bl))单数类型错误。
(defun C:zqc-jdx()
;(cmdla0)
(setq pt1 (getpoint "\n选取点:")
pp '() dd '() ang '()
i 0 n 0 j 0
*bl 100)
(command "_.pline" "" "w" (* 0.5 *bl) "" pt1)
(while pt1
(setq pp (cons (3d->2d pt1) pp)
pt1 (getpoint pt1 "\n选取点:")
)
    (commandpt1)
)
(setq pp (reverse pp))
(setq n (length pp))
(while (< i (- n 1))
(setq dd (cons (mapcar '- (nth (+ i 1) pp) (nth i pp)) dd)
            ang (cons (angle (nth i pp) (nth (+ i 1) pp)) ang)
      i (+ i 1))
    )
(setq ddl (reverse (mapcar '2pdist dd)))
(setq ang (reverse ang))
(setq ddn (mapcar '(lambda(x) (fix(/ x (* 11.25 *bl)))) ddl)) ;等分数
(setq fuzz (mapcar '(lambda(x) (/ (rem x (* 11.25 *bl)) 2)) ddl));偏移量
(while (< j (- n 1))
    (setq ddn1 (nth j ddn))
    (setq ang1 (nth j ang))
    (setq pts (polar (nth j pp) ang1 (nth j fuzz)))
    (zqc-L45pts ang1)
    (repeat ddn1
       (setq pts (polar pts ang1 (* 11.25 *bl)))
       (zqc-L45pts ang1)
       )
       (setq j (+ j 1))
      )
;(cmdla1)
)
(defun zqc-L45 (pt ang / pt1 pt2)
;(setq pt (3d->2d(getpoint "\n选取点:"))
;ang (getangle "\n角度:")
(setq pt1 (polar pt (+ (/ (* 5 pi) 4) ang) (* 1.5 *bl)) ;*bl比例
pt2 (polar pt (+ (/ pi 4) ang) (* 1.5 *bl))
)
(command "_.line" pt1 pt2 "")
)
;;52.2 [功能] 3D点->2D点
(defun 3d->2d (3dpt / 2dpt)
(setq 2dpt (list (car 3dpt) (cadr 3dpt)))
)
(defun 2pdist (pt);求距离
(sqrt(apply '+(mapcar '(lambda (x) (* x x)) pt)))
)

ZZXXQQ 发表于 2013-7-30 08:34:25

本帖最后由 ZZXXQQ 于 2013-7-30 08:42 编辑

没用院长的函数当然会出错。(defun C:zqc-jdx()
;(cmdla0)
(setq oldos (getvar "OSMODE"))
(setvar "OSMODE" 0)
(setq pt1 (getpoint "\n选取点:")
pp '() dd '() ang '()
i 0 n 0 j 0
*bl 100)
(setvar "PLINEWID"(* 0.5 *bl))
(while pt1
(setq pp (cons (3d->2d pt1) pp)
pt1 (getpoint pt1 "\n选取点:")
)
    (commandpt1)
)
(setq pp (reverse pp))
(setq n (length pp))
(while (< i (- n 1))
(setq dd (cons (mapcar '- (nth (+ i 1) pp) (nth i pp)) dd)
            ang (cons (angle (nth i pp) (nth (+ i 1) pp)) ang)
      i (+ i 1))
    )
(setq ddl (reverse (mapcar '2pdist dd)))
(setq ang (reverse ang))
(setq ddn (mapcar '(lambda(x) (fix(/ x (* 11.25 *bl)))) ddl)) ;等分数
(setq fuzz (mapcar '(lambda(x) (/ (rem x (* 11.25 *bl)) 2)) ddl));偏移量
(while (< j (- n 1))
    (setq ddn1 (nth j ddn))
    (setq ang1 (nth j ang))
    (setq pts (polar (nth j pp) ang1 (nth j fuzz)))
    (zqc-L45pts ang1)
    (repeat ddn1
       (setq pts (polar pts ang1 (* 11.25 *bl)))
       (zqc-L45pts ang1)
       )
       (setq j (+ j 1))
      )
;(cmdla1)
(setvar "OSMODE" oldos)
)
(defun zqc-L45 (pt ang / pt1 pt2)
;(setq pt (3d->2d(getpoint "\n选取点:"))
;ang (getangle "\n角度:")
(setq pt1 (polar pt (+ (/ (* 5 pi) 4) ang) (* 1.5 *bl)) ;*bl比例
pt2 (polar pt (+ (/ pi 4) ang) (* 1.5 *bl))
)
(command "_.line" pt1 pt2 "")
)
;;52.2 [功能] 3D点->2D点
(defun 3d->2d (3dpt / 2dpt)
(setq 2dpt (list (car 3dpt) (cadr 3dpt)))
)
(defun 2pdist (pt);求距离
(sqrt(apply '+(mapcar '(lambda (x) (* x x)) pt)))
)

龙城飞将36 发表于 2013-7-30 08:43:58

有院长的函数,把函数去掉防止没有院长函数的出错。已经解决画零长度线的问题了,还有一个问题(command "_.pline" "" "w" (* 0.5 *bl) "")设定线宽老是从零点画一条线,这个怎么解决?

龙城飞将36 发表于 2013-7-30 08:52:12

已经解决了~~~~~~~~~~~~~~~~~~~~~~

龙城飞将36 发表于 2013-7-30 09:14:49

用enmake的方法怎么实现输入第一点第二点生产多线段,第三点生产多线段.......
页: [1]
查看完整版本: 多线段老是画零长度线,高手给看看