乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
查看: 136|回复: 8

请教版主SPLINE曲线可以用LISP程序进行动态延长吧?如何做?

[复制链接]

63

主题

1203

帖子

10

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1455
发表于 2003-9-2 16:22:00 | 显示全部楼层 |阅读模式
不知大家是否注意到在Auto CAD里面用命令"LENGTHEN"可以对ARC、LINE进行延伸,但是发觉不能对SPLINE进行延伸处理的。我一直在考虑所以这个问想请教版主,要象用"LENGTHEN"命令延长ARC、LINE那样延长SPLINE曲线用Auto LISP是如何编写啊?请版主和各位大侠指点指点。
回复

使用道具 举报

26

主题

3072

帖子

10

银币

社区元老

Rank: 75Rank: 75Rank: 75

铜币
3177
发表于 2003-9-2 16:42:00 | 显示全部楼层
问题是你无法确定它得往哪个方向延伸,是直线延伸还是曲线,如果是曲线又是圆弧还是一个复杂的曲线,如果是圆弧,又怎么知道半径,角度,如果是复杂曲线,又怎么得到这个曲线的方程。
由原有曲线根本无法得到上述参数,所以从理论上就无法延伸的
回复

使用道具 举报

63

主题

1203

帖子

10

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1455
发表于 2003-9-3 17:18:00 | 显示全部楼层
我看過有一條LSIP程序可以把SPLINE曲線延伸的.它延伸的方式就好象以下的功能選項的做法.
Command:  LENGTHEN
DElta/Percent/Total/DYnamic/: DY
Specify new end point.
但是我是剛起步,有很多東西不能夠一時學會,所以希望各位師傅指點.我非常感謝.
回复

使用道具 举报

26

主题

3072

帖子

10

银币

社区元老

Rank: 75Rank: 75Rank: 75

铜币
3177
发表于 2003-9-3 17:40:00 | 显示全部楼层
看提示就是要增加顶点了,这样的话直接用夹点拉过去不是更好些
回复

使用道具 举报

63

主题

1203

帖子

10

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1455
发表于 2003-9-5 08:41:00 | 显示全部楼层
尊敬的版主大人,你好.在下經過這几天的學習,寫了一條類似的程序和你一起交流,希望你提出寶貴的見義.現在這個程序只能夠延長spline的起點,到底怎麼樣才可以隨意地進行當選擇spline接近哪邊的端點就延伸哪邊呢,我在考慮中.那麼我為了開發這個功能的做法我認為是比用夾持點优秀和好用的.希望版主幫幫忙.謝謝:)
以下是程序的源代碼:
(defun c:y02()
  (setq a (entsel))
  (setvar "cmdecho" 0)
  (setq os (getvar "osmode" ))
  (setvar "OSMODE" 0)
  (COMMAND "_measure" a 8 )
  (setq ssa (ssget "X" '((0 . &quotOINT"))))
  (setq ssl (sslength ssa))
  (setq endp (cdr (assoc 10 (entget (ssname ssa 0)))));;諉輪SPLINE笝萸腔珨跺SPLINE奻腔萸
  (setq sp (cdr (assoc 10 (entget (ssname ssa (- ssl 1))))));;;諉輪SPLINE萸腔珨跺SPLINE奻腔萸
  (setq n 0)
  (setq ;ssn(ssname a n);;;枑SPLINER腔萸釴梓
          endata (entget (car a))
          spo (CDR (assoc 10 endata)))
  (repeat (length endata);;;枑SPLINER腔笝萸釴梓
    (setq end (cdr (nth n endata)))
    (setq n (1+ n)))
  (princ "\nPlease get dist for lengthen spline:")
  (setq distuser (getdist spo pause))
  (command "line" spo sp "")
  (setq ss (entlast))
  (command "erase" a "");;;刉壺埻懂腔SPLINE
  (command "lengthen" "de" distuser  spo "" "" "")
  (setq ssc (entlast))
  (setq ass (entget ssc))
  (setq newpo(cdr (assoc 10 ass)))
  (command "erase" ssa "");;;刉壺垀衄腔萸
  (command "erase" ss "");;;刉壺最唗赻賒腔腔盄
  (command "erase" ssc "");;;刉壺最唗赻賒腔腔盄
  (entmake endata);;;遠埻最唗眕刉壺腔SPLINE
  (setq a (entlast))
  (command "_splinedit" a "m" "s" spo newpo "x" "");;; spline edit
  (setvar "cmdecho" 1)
  (setvar "osmode" os)
  (princ "\n韜鍔俴怀y02遢髡夔:")
  (princ))
回复

使用道具 举报

29

主题

1152

帖子

10

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1268
发表于 2003-9-8 12:38:00 | 显示全部楼层
;;这是照你的恩路写的,但精度不太好
;;用vlisp写会更好
(defun C:Y02_LAI (/         A        ECHO   OS     SSA    SSL    SP
                  ENDP         N        ENDATA SPO    EPO    DISTUSER
                  SSC         NEWPO
                 )
  (defun DO_IT (SPO SP)
    (setq
      DISTUSER
       (getdist SPO "\nPlease get dist for lengthen spline: ")
    )
    (command "_.line" SPO SP "")
    (setq SSC (entlast))
    (command "_.lengthen" "de" DISTUSER (list SSC SPO) "")
    (setq NEWPO (cdr (assoc 10 (entget SSC))))
    (command "_.erase" SSC SSA "")
    ;;只移动端点,精度会比较差
    ;;增加控制点较好!
    (command "_.splinedit" (car A) "m" "s" SPO NEWPO "x" "")
  )
  (setq A (entsel "\nSelect Spline: "))
  (setq ECHO (getvar "osmode"))
  (setvar "cmdecho" 0)
  (setq OS (getvar "osmode"))
  (setvar "OSMODE" 0)
  (command "_.DIVIDE" A 500)                ;精度越密越准,但花时间
  (setq SSA (ssget &quot"))
  (setq SSL (sslength SSA))
  (setq SP (cdr (assoc 10 (entget (ssname SSA 0)))))
  (setq ENDP (cdr (assoc 10 (entget (ssname SSA (- SSL 1))))))
  (setq N 0)
  (setq        ENDATA (entget (car A))
        SPO    (cdr (assoc 10 ENDATA))
        EPO    (cdr (assoc 10 (reverse ENDATA)))
  )
  (if ( distfullb distfulla)
    (progn
      (princ "\nPlease get dist for lengthen spline:")
      (setq distuser (getdist spo pause));;;繪出spline延長的長度,用鼠標選點确定
      (command "line" spo sp "")
      (setq ss (entlast))
      (command "erase" a "");;;刉壺埻懂腔SPLINE
      (command "lengthen" "de" distuser spo "" "" "")
      (setq ssc (entlast))
      (setq ass (entget ssc))
      (setq newpo (cdr (assoc 10 ass)));;;取得要延長spline延長到的點坐標.
      (command "erase" ssa "");;;刉壺垀衄腔萸
      (command "erase" ss "");;;刉壺最唗赻賒腔腔盄
      (command "erase" ssc "");;;刉壺最唗赻賒腔腔盄
      (entmake endata);;;遠埻最唗眕刉壺腔SPLINE
      (setq a (entlast))
      (command "_splinedit" a "m" "s" spo newpo "x" "");;; spline edit
    )
(progn
  (princ "\nPlease get dist for lengthen spline:")
  (setq distuser (getdist end pause));;;繪出spline延長的長度,用鼠標選點确定
  (command "line" end endp "")
  (setq ss (entlast))
  (command "erase" a "");;;刉壺埻懂腔SPLINE
  (command "lengthen" "de" distuser end "" "" "")
  (setq ssc (entlast))
  (setq ass (entget ssc))
  (setq newpo (cdr (assoc 10 ass)));;;取得要延長spline延長到的點坐標.
  (command "erase" ssa "");;;刉壺垀衄腔萸
  (command "erase" ss "");;;刉壺最唗赻賒腔腔盄
  (command "erase" ssc "");;;刉壺最唗赻賒腔腔盄
  (entmake endata);;;遠埻最唗眕刉壺腔SPLINE
  (setq a (entlast))
  (command "_splinedit" a "m" "s" end newpo "x" "");;; spline edit
  ))
  (setvar "cmdecho" 1)
  (setvar "osmode" os)
  (princ "\n在命令行揄入y02喚起這個功能:")
  (princ))
回复

使用道具 举报

63

主题

1203

帖子

10

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1455
发表于 2003-9-8 14:03:00 | 显示全部楼层
剛剛進行小小的測試發現版主大人的程序和小包我編的差不多一樣啦.我現在覺得這個小程序要加以改進.因我們(用戶)在選擇時不一定是選擇SPLINE,所以在要在這個程序再加上可以判別如果不是SPLINE就用Auot CAD 原來的 LENGTHEN命令不是很好嗎?
-----------------------------------------------------
我愛CAD.
回复

使用道具 举报

63

主题

1203

帖子

10

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1455
发表于 2003-9-8 14:11:00 | 显示全部楼层
;;你這個程序到底用在甚麼地方?我總覺得要是它能延伸到某條邊上會更好用!
回复

使用道具 举报

29

主题

1152

帖子

10

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1268
发表于 2003-9-8 16:55:00 | 显示全部楼层
我寫這個程序是用在製衣行業,我是自己寫來用和贈給同道的朋友一起分享啦.其實你的提意挻不錯.我看看能不能寫出來.我覺得這個功能不錯.但是現在只能增長.不知你可否寫一個可以增長又可以減短的呢?
--------------------------------------------------------------------------------------
我愛CAD,溫故而知新.
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

QQ|关于我们|小黑屋|乐筑天下 繁体中文

GMT+8, 2025-7-5 02:52 , Processed in 0.900022 second(s), 70 queries .

© 2020-2025 乐筑天下

联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表