找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 746|回复: 0

[LISP程序]:生成二维、三维螺旋线程序!【借花献佛】

[复制链接]
发表于 2002-11-10 19:02:09 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×

  1. [FONT=courier new]
  2. ;;; 3DSPIRAL.LSP
  3. ;     Copyright (C) 1992 by Autodesk, Inc.
  4. ; modified by CAD Studio, 2001 (globalization)
  5. ; 修改者:明经通道 [url]http://www.mccad.net[/url] 2001 (中文化)
  6. ;
  7. ;     Permission to use, copy, modify, and distribute this software
  8. ;     for any purpose and without fee is hereby granted, provided
  9. ;     that the above copyright notice appears in all copies and that
  10. ;     both that copyright notice and this permission notice appear in
  11. ;     all supporting documentation.
  12. ;
  13. ;     THIS SOFTWARE IS PROVIDED "AS IS" WITHOUT EXPRESS OR IMPLIED
  14. ;     WARRANTY.  ALL IMPLIED WARRANTIES OF FITNESS FOR ANY PARTICULAR
  15. ;     PURPOSE AND OF MERCHANTABILITY ARE HEREBY DISCLAIMED.
  16. ;;; --------------------------------------------------------------------------;
  17. ;;; DESCRIPTION
  18. ;;;
  19. ;;;   这是一个程序实例。
  20. ;;;
  21. ;;;   由 Kelvin R. Throop 于 1985 年 1 月设计编制。
  22. ;;;
  23. ;;;   该程序生成一螺旋线。它可通过输入“spiral”、“3dspiral”来加载及调用,
  24. ;;;   也可以通过以下表达式调用:
  25. ;;;   (cspiral <# 旋转圈数> <基点> <每圈的水平增加距离>
  26. ;;;            <每圈的点数> <起始半径>
  27. ;;;            <每圈的垂直上升距离>).
  28. ;;;
  29. ;;; --------------------------------------------------------------------------;

  30. (defun myerror (s)                    ; 如果出错 (如按 CTRL-C)
  31.                                       ; 将激活该命令...
  32.   (if (/= s "Function cancelled")
  33.     (princ (strcat "\n出错: " s))
  34.   )
  35.   (setvar "cmdecho" ocmd)             ; 恢复保存的模式
  36.   (setvar "blipmode" oblp)
  37.   (setq *error* olderr)               ; 恢复旧的 *error* 处理
  38.   (princ)
  39. )

  40. (defun cspiral (ntimes bpoint hfac lppass strad vfac
  41.                 / ang dist tp ainc dhinc dvinc circle dv)

  42.   (setvar "blipmode" 0)               ; 关闭亮显
  43.   (setvar "cmdecho" 0)                ; 关闭命令行提示
  44.   (setq circle (* 3.141596235 2))
  45.   (setq ainc (/ circle lppass))
  46.   (setq dhinc (/ hfac lppass))
  47.   (if vfac (setq dvinc (/ vfac lppass)))
  48.   (setq ang 0.0)
  49.   (if vfac
  50.     (setq dist strad dv 0.0)
  51.     (setq dist 0.0)
  52.   )
  53.   (if vfac
  54.     (command "_3dpoly")                ; 开始螺旋 ...
  55.     (command "_pline" bpoint)          ; 由基点开始螺旋...
  56.   )
  57.   (repeat ntimes
  58.     (repeat lppass
  59.       (setq tp (polar bpoint (setq ang (+ ang ainc))
  60.                       (setq dist (+ dist dhinc))
  61.                )
  62.       )
  63.       (if vfac
  64.           (setq tp (list (car tp) (cadr tp) (+ dv (caddr tp)))
  65.                 dv (+ dv dvinc)
  66.           )
  67.       )
  68.       (command tp)                    ; 继续绘制下个点...
  69.     )
  70.   )
  71.   (command "")                        ; 直到完成。
  72.   (princ)
  73. )

  74. ;;;
  75. ;;;       交互螺旋生成
  76. ;;;

  77. (defun C:SPIRAL (/ olderr ocmd oblp nt bp cf lp)
  78.   ;;;;(setq olderr  *error*
  79.   ;;;;      *error* myerror)
  80.   (setq ocmd (getvar "cmdecho"))
  81.   (setq oblp (getvar "blipmode"))
  82.   (setvar "cmdecho" 0)
  83.   (initget 1)                         ; bp 必须为非空值
  84.   (setq bp (getpoint "\n中心点: "))
  85.   (initget 7)                         ; nt 必须为非零正数或非空值
  86.   (setq nt (getint "\n螺旋圈数: "))
  87.   (initget 3)                         ; cf 必须为非零或非空值
  88.   (setq cf (getdist "\n每圈增加距离: "))
  89.   (initget 6)                         ; lp 必须为非零正数
  90.   (setq lp (getint "\n每圈的点数<30>: "))
  91.   (cond ((null lp) (setq lp 30)))
  92.   (cspiral nt bp cf lp nil nil)
  93.   (setvar "cmdecho" ocmd)
  94.   (setvar "blipmode" oblp)
  95.   (setq *error* olderr)               ; 恢复旧的 *error* 处理
  96.   (princ)

  97. )

  98. ;;;
  99. ;;;       Interactive spiral generation
  100. ;;;

  101. (defun C:3DSPIRAL (/ olderr ocmd oblp nt bp hg vg sr lp)
  102.   ;;;;(setq olderr  *error*
  103.   ;;;;      *error* myerror)
  104.   (setq ocmd (getvar "cmdecho"))
  105.   (setq oblp (getvar "blipmode"))
  106.   (setvar "cmdecho" 0)
  107.   (initget 1)                         ; bp 必须为非空值
  108.   (setq bp (getpoint "\n中心点: "))
  109.   (initget 7)                         ; nt 必须为非零正数或非空值
  110.   (setq nt (getint "\n螺旋圈数: "))
  111.   (initget 7)                         ; sr 必须为非零正数或非空值
  112.   (setq sr (getdist bp "\n起点半径: "))
  113.   (initget 1)                         ; hg 必须为非空值
  114.   (setq hg (getdist "\n水平每圈增加距离: "))
  115.   (initget 3)                         ; vg 必须为非零或非空值
  116.   (setq vg (getdist "\n垂直每圈上升距离: "))
  117.   (initget 6)                         ; lp 必须为非零正数
  118.   (setq lp (getint "\n每圈的点数 <30>: "))
  119.   (cond ((null lp) (setq lp 30)))
  120.   (cspiral nt bp hg lp sr vg)
  121.   (setvar "cmdecho" ocmd)
  122.   (setvar "blipmode" oblp)
  123.   (setq *error* olderr)               ; 恢复旧的 *error* 处理
  124.   (princ)

  125. )

  126. ;;; --------------------------------------------------------------------------;
  127. (princ "\n\tC:SPIRAL 和 C:3DSPIRAL 已加载。 ")
  128. (princ)[/FONT]
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2025-9-26 05:18 , Processed in 0.163009 second(s), 31 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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