找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 1281|回复: 6

[LISP程序]:本人的将spline等分为n个弧的lisp源代码。

[复制链接]
发表于 2002-7-25 14:30:08 | 显示全部楼层 |阅读模式

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

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

×
为了感谢大家的帮忙,今后我会不断的提供一些自己的程序。


  1. (defun c:splinetocircle        (/ ss1 n i cl ss2 ss ed j j0)
  2.   (setvar "cmdecho" 0)
  3.   (command "undo" "group")
  4.   (setq os (getvar "osmode"))
  5.   (setq cl (getvar "clayer"))
  6.   (setvar "osmode" 0)

  7.   (if (setq ent (entsel "\nPlease pick the spline: "))
  8.     (progn                                ;progn1
  9.       (command "layer" "m" "spldivide" "c" "1" "" "")

  10.       (setq ed (entget (car ent)))
  11.       (setq ss1 (ssadd))
  12.       (ssadd (car ent) ss1)

  13.       (if (= (cdr (nth 1 ed))
  14.              "SPLINE"
  15.           )
  16.         (progn
  17.           (initget (+ 1 2 4))
  18.           (setq        numPt
  19.                  (getint
  20.                    "\nPlease specify the accuracy of conversion.(1~): "
  21.                  )
  22.           )

  23.           (setq        ptSt  (cdr (assoc 11 ed))
  24.                 ptEnd (cdr (assoc 11 (reverse ed)))
  25.           )

  26.           (command "layer" "s" "spldivide" "")
  27.           (command "divide" ss1 (* 2 numPt))
  28.           (setq ss2 (ssget "X" '((8 . "spldivide"))))
  29.           (command "layer" "s" cl "")

  30.           (setq        j   0
  31.                 pt3 ptEnd
  32.           )

  33.           (repeat numPt
  34.             (setq pt2 (val1 10 ss2 j))

  35.             (if        (/= numPt (/ (+ j 2) 2))
  36.               (setq pt1 (val1 10 ss2 (+ 1 j)))
  37.               (setq pt1 ptSt)
  38.             )

  39.             (command "arc" pt1 pt2 pt3)
  40.             (setq pt3 pt1)
  41.             (setq j (+ 2 j))
  42.           )

  43.           (command ".erase" ss2 "")
  44.           (command ".erase" ss1 "")
  45.           (command "layer" "s" cl "")

  46.           (command "purge" "la" "" "n")
  47.           (princ "\nThe conversion end was done. ")
  48.         )
  49.         (alert "Selected entity was not a spline!!")
  50.       )
  51.       ;;if spline
  52.     )
  53.     (alert "Nothing selected!!")
  54.   )
  55.   ;;if

  56.   (setvar "osmode" os)
  57.   (setvar "clayer" cl)
  58.   (command "undo" "end")
  59.   (princ)

  60. )
  61. (defun val1 (n ss index)
  62.   (cdr (assoc n (entget (ssname ss index))))
  63. )
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

已领礼包: 145个

财富等级: 日进斗金

发表于 2002-7-25 18:00:04 | 显示全部楼层
谢谢 yousuika   朋友,希望其他朋友也能把自己平时写的工具提供到论坛来,一个是让大家画图提高效率,另外也是大家互相学习编程经验的最好方式。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2002-7-25 21:20:54 | 显示全部楼层
以后有完整的,经过调试和实践检验的程序,请发一份到程序库版
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2002-7-25 21:27:36 | 显示全部楼层
另一个思路:
用vlisp得线段长度,求1/n长度,按长度逐个取线段上的点,在点处打断实体。
大家 按这个思路写一个程序吧。或者你有其它思路也可以说说or贴出程序
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2002-7-26 08:14:48 | 显示全部楼层
这种类似的方法很久前我就用在画电线了 。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2002-7-26 10:31:16 | 显示全部楼层
最初由 梦断江南 发布
[B]另一个思路:
用vlisp得线段长度,求1/n长度,按长度逐个取线段上的点,在点处打断实体。
大家 按这个思路写一个程序吧。或者你有其它思路也可以说说or贴出程序 [/B]



这种方法,我用ARX做了。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2002-7-29 20:58:07 | 显示全部楼层
我写了一段等分样条曲线的程序。以下就是源码,当然,用于实际还需要完善一下。还有:我不知道这样等分有什么实际用途:

  1. (defun c:sp( / so cmde ssa ssb numpt)
  2.    (setq os (getvar "osmode"))
  3.    (setq cmde (getvar "cmdecho"))
  4.    (setvar "osmode" 0)
  5.    (setvar "cmdecho" 0)
  6.    (setq ssa (entsel "请选择样条曲线:"))
  7.    (setq numpt (getint "请输入等分数:"))
  8.    (command "divide" ssa numpt "")
  9.    (setq ssb (ssget "p"))
  10.    (setq numpt (1- numpt))
  11.    (repeat numpt
  12.         (setq numpt (1- numpt))
  13.         (setq pt (cdr (assoc '10 (entget (ssname ssb numpt)))))
  14.         (command "break" pt "f" pt pt "")
  15.    )
  16.    (command "erase" ssb "")
  17.    (setvar "osmode" os)
  18.    (setvar "cmdecho" cmde)
  19.    (princ)
  20. )
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2025-9-26 02:23 , Processed in 0.173741 second(s), 43 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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