明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1317|回复: 4

[提问] 多线段老是画零长度线,高手给看看

[复制链接]
发表于 2013-7-30 08:12 | 显示全部楼层 |阅读模式
多线段老是画零长度线,高手给看看,(angle (nth i pp) (nth (+ i 1) pp)),二维三维点错误(polar pt (+ (/ pi 4) ang) (* 1.5 *bl))单数类型错误。
  1. (defun C:zqc-jdx  ()
  2.   ;(cmdla0)
  3.   (setq pt1 (getpoint "\n选取点:")
  4.   pp '() dd '() ang '()
  5.   i 0 n 0 j 0
  6.   *bl 100)
  7.   (command "_.pline" "" "w" (* 0.5 *bl) "" pt1)
  8.   (while pt1
  9.   (setq pp (cons (3d->2d pt1) pp)
  10.   pt1 (getpoint pt1 "\n选取点:")
  11.   )
  12.     (command  pt1)
  13.   )
  14.   (setq pp (reverse pp))
  15.   (setq n (length pp))
  16.   (while (< i (- n 1))
  17.   (setq dd (cons (mapcar '- (nth (+ i 1) pp) (nth i pp)) dd)
  18.               ang (cons (angle (nth i pp) (nth (+ i 1) pp)) ang)
  19.         i (+ i 1))
  20.     )
  21.   (setq ddl (reverse (mapcar '2pdist dd)))
  22.   (setq ang (reverse ang))
  23.   (setq ddn (mapcar '(lambda(x) (fix(/ x (* 11.25 *bl)))) ddl)) ;等分数
  24.   (setq fuzz (mapcar '(lambda(x) (/ (rem x (* 11.25 *bl)) 2)) ddl));偏移量
  25.   (while (< j (- n 1))
  26.     (setq ddn1 (nth j ddn))
  27.     (setq ang1 (nth j ang))
  28.     (setq pts (polar (nth j pp) ang1 (nth j fuzz)))
  29.     (zqc-L45  pts ang1)
  30.     (repeat ddn1
  31.        (setq pts (polar pts ang1 (* 11.25 *bl)))
  32.        (zqc-L45  pts ang1)
  33.        )
  34.        (setq j (+ j 1))
  35.       )
  36.   ;(cmdla1)
  37.   )
  38.   (defun zqc-L45 (pt ang / pt1 pt2)
  39.   ;(setq pt (3d->2d(getpoint "\n选取点:"))
  40.   ;ang (getangle "\n角度:")
  41.   (setq pt1 (polar pt (+ (/ (* 5 pi) 4) ang) (* 1.5 *bl)) ;*bl比例
  42.   pt2 (polar pt (+ (/ pi 4) ang) (* 1.5 *bl))
  43.   )
  44.   (command "_.line" pt1 pt2 "")
  45. )
  46. ;;52.2 [功能] 3D点->2D点
  47. (defun 3d->2d (3dpt / 2dpt)
  48.   (setq 2dpt (list (car 3dpt) (cadr 3dpt)))
  49. )
  50. (defun 2pdist (pt);求距离
  51.   (sqrt(apply '+(mapcar '(lambda (x) (* x x)) pt)))
  52. )

"觉得好,就打赏"
还没有人打赏,支持一下
发表于 2013-7-30 08:34 | 显示全部楼层
本帖最后由 ZZXXQQ 于 2013-7-30 08:42 编辑

没用院长的函数当然会出错。
  1. (defun C:zqc-jdx  ()
  2.   ;(cmdla0)
  3. (setq oldos (getvar "OSMODE"))
  4. (setvar "OSMODE" 0)
  5.   (setq pt1 (getpoint "\n选取点:")
  6.   pp '() dd '() ang '()
  7.   i 0 n 0 j 0
  8.   *bl 100)
  9.   (setvar "PLINEWID"  (* 0.5 *bl))
  10.   (while pt1
  11.   (setq pp (cons (3d->2d pt1) pp)
  12.   pt1 (getpoint pt1 "\n选取点:")
  13.   )
  14.     (command  pt1)
  15.   )
  16.   (setq pp (reverse pp))
  17.   (setq n (length pp))
  18.   (while (< i (- n 1))
  19.   (setq dd (cons (mapcar '- (nth (+ i 1) pp) (nth i pp)) dd)
  20.               ang (cons (angle (nth i pp) (nth (+ i 1) pp)) ang)
  21.         i (+ i 1))
  22.     )
  23.   (setq ddl (reverse (mapcar '2pdist dd)))
  24.   (setq ang (reverse ang))
  25.   (setq ddn (mapcar '(lambda(x) (fix(/ x (* 11.25 *bl)))) ddl)) ;等分数
  26.   (setq fuzz (mapcar '(lambda(x) (/ (rem x (* 11.25 *bl)) 2)) ddl));偏移量
  27.   (while (< j (- n 1))
  28.     (setq ddn1 (nth j ddn))
  29.     (setq ang1 (nth j ang))
  30.     (setq pts (polar (nth j pp) ang1 (nth j fuzz)))
  31.     (zqc-L45  pts ang1)
  32.     (repeat ddn1
  33.        (setq pts (polar pts ang1 (* 11.25 *bl)))
  34.        (zqc-L45  pts ang1)
  35.        )
  36.        (setq j (+ j 1))
  37.       )
  38.   ;(cmdla1)
  39. (setvar "OSMODE" oldos)
  40.   )
  41.   (defun zqc-L45 (pt ang / pt1 pt2)
  42.   ;(setq pt (3d->2d(getpoint "\n选取点:"))
  43.   ;ang (getangle "\n角度:")
  44.   (setq pt1 (polar pt (+ (/ (* 5 pi) 4) ang) (* 1.5 *bl)) ;*bl比例
  45.   pt2 (polar pt (+ (/ pi 4) ang) (* 1.5 *bl))
  46.   )
  47.   (command "_.line" pt1 pt2 "")
  48. )
  49. ;;52.2 [功能] 3D点->2D点
  50. (defun 3d->2d (3dpt / 2dpt)
  51.   (setq 2dpt (list (car 3dpt) (cadr 3dpt)))
  52. )
  53. (defun 2pdist (pt);求距离
  54.   (sqrt(apply '+(mapcar '(lambda (x) (* x x)) pt)))
  55. )
 楼主| 发表于 2013-7-30 08:43 | 显示全部楼层
有院长的函数,把函数去掉防止没有院长函数的出错。已经解决画零长度线的问题了,还有一个问题(command "_.pline" "" "w" (* 0.5 *bl) "")设定线宽老是从零点画一条线,这个怎么解决?
 楼主| 发表于 2013-7-30 08:52 | 显示全部楼层
已经解决了~~~~~~~~~~~~~~~~~~~~~~
 楼主| 发表于 2013-7-30 09:14 | 显示全部楼层
用enmake的方法怎么实现输入第一点第二点生产多线段,第三点生产多线段.......
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-6-5 20:47 , Processed in 0.300083 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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