明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 4154|回复: 4

如何用lisp构造一个200个顶点的spline?

[复制链接]
发表于 2002-2-18 09:09:00 | 显示全部楼层 |阅读模式
发表于 2002-2-18 12:27:00 | 显示全部楼层

您试一试!

;;;ptslist为点列表,如:
;;;'((317.284 76.8801 0.0)
;;;  (349.74 106.014 0.0)
;;;  (308.359 119.771 0.0)
;;;  (255.619 105.204 0.0)
;;;  (196.387 120.58 0.0)
;;;  (164.743 89.8283 0.0)
;;;)
;;;closed 为样条曲线是否封闭选项
;;;提取点列表示例
(defun c:getptslist(/ pt ptslist)
  (setq pt t)
  (while
    (setq pt (getpoint "\n下一点:"))
     (setq ptslist (cons pt ptslist))
  )
)


(defun spline200 (PtsList Closed / num pt)
  (setq num 0)

  (if ptslist
    (progn
      (setq pt (car ptslist))
      (command "_.spline" pt)
      (while (setq pt (nth (setq num (1+ num)) PtsList))
        (command pt)
      )
;;;      是否封闭选项
      (if closed
        (command "c" "")
        (command "" "" "")
      )
      (command)
    )
  )
  (princ)
)

;;;example: (spline200 PtsList nil) or (spline200 (c:getptslist) t)
发表于 2002-2-18 12:53:00 | 显示全部楼层
南子兄:
像你这样一直用SPLINE画200多个顶点就可以了,不用使用LISP。

不如试试这个
思路:先画一条SPLINE(顶点数不限),再用DIVIDE分成200多段,再利用DIVIDE的点用SPLINE重画一次就好了。

但可否说说200个顶点的SPLINE,到底有甚么用???


(defun C:SP_TO_MSP (/             HOLDECHO             HOLDBLIP             ORIG_OSNAP
                     AA             A             A1             BB             LL             AS74
                     ENDPT   SPT     LP             A11
                    )
  (command "_.undo" "_group")
  (setq HOLDECHO (getvar "cmdecho"))
  (setq HOLDBLIP (getvar "blipmode"))
  (setq ORIG_OSNAP (getvar "osmode"))
  (setvar "cmdecho" 0)
  (setvar "blipmode" 0)
  (setvar "osmode" 0)
  (while (/= AA "SPLINE")
    (setq A (entsel "\n 选择SPLINE"))
    (setq A1 (car A))
    (setq AA (cdr (assoc 0 (entget A1))))
  )
  (setq BB (entget A1))
  (setq LL (length BB))
  (setq AS74 (cdr (assoc 74 BB)))
  (setq ENDPT (cdr (nth (- LL 1) BB)))
  (setq SPT (cdr (nth (- LL AS74) BB)))
  (setq LP (getint "\n 请设定段数/<60>: "))
  (cond ((null LP) (setq LP 60)))
  (command "_.divide" A1 (+ LP 1))
  (setq A (ssget "p"))
  (command "_.SPLINE" ENDPT)
  (repeat LP
    (setq A11 (cdr (assoc 10 (entget (ssname A (- LP 1))))))
    (command A11)
    (setq LP (- LP 1))
  )
  (command SPT "" "" "")
  (command "_.erase" A A1 "")
  (setvar "blipmode" HOLDBLIP)
  (setvar "osmode" ORIG_OSNAP)
  (setvar "cmdecho" HOLDECHO)
  (command "_.undo" "_end")
)
发表于 2002-2-18 22:08:00 | 显示全部楼层

关键在于(spline200 PtsList nil)

c:getptslist只是为了测试该程序时提取点表方便一点。
有的同志在程序中得到了点表,又想在程序中画完spline.
发表于 2012-11-8 09:31:06 | 显示全部楼层
学习了!!!!!!!!!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2025-6-5 08:27 , Processed in 0.157868 second(s), 25 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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