找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 586|回复: 0

[LISP程序]:发一个生成过渡曲线的程序

[复制链接]
发表于 2004-4-25 13:08:03 | 显示全部楼层 |阅读模式

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

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

×
[php]
(vl-load-com)
(defun c:tc (/ IsCurve ent1 ent2 pt1 pt2 p11 p12 p21 p22 start end obj1 obj2
               osmode
            )                               ; Check an entity is a curve or not
  (defun IsCurve (ename / name)
    (if ename
      (progn
        (setq name (cdr (assoc 0 (entget ename))))
        (cond
          ((= name "LWPOLYLINE")
            T
          )
          ((= name "POLYLINE")
            T
          )
          ((= name "CIRCLE")
            T
          )
          ((= name "ARC")
            T
          )
          ((= name "LINE")
            T
          )
          ((= name "ELLIPSE")
            T
          )
          ((= name "SPLINE")
            T
          )
          (T
            NIL
          )
        )
      )
      NIL
    )
  )

  ;; Main Program
  (setvar "cmdecho" 0)
  (vl-cmdf "_.undo" "g")
  (setq osmode (getvar "osmode"))
  (setvar "osmode" 0)
  (setq ent1 (entsel "选择第一条曲线:"))
  (if (IsCurve (car ent1))
    (progn
      (if (IsCurve (car (setq ent2 (entsel "\n选择第二条曲线:"))))
        (progn
          (setq pt1 (cadr ent1)
                obj1 (vlax-ename->vla-object (car ent1))
                pt2 (cadr ent2)
                obj2 (vlax-ename->vla-object (car ent2))
          )
          (setq start (vlax-curve-getstartpoint obj1)
                end (vlax-curve-getendpoint obj1)
          )
          (if (< (distance start pt1) (distance end pt1))
            (setq p11 start
                  p12 (vlax-curve-getfirstderiv obj1
                                                (vlax-curve-getstartparam obj1)
                      )
                  p12 (mapcar
                        '+
                        p11
                        p12
                      )
            )
            (setq p11 end
                  p12 (vlax-curve-getfirstderiv obj1
                                                (vlax-curve-getendparam obj1)
                      )
                  p12 (mapcar
                        '-
                        p11
                        p12
                      )
            )
          )
          (setq start (vlax-curve-getstartpoint obj2)
                end (vlax-curve-getendpoint obj2)
          )
          (if (< (distance start pt2) (distance end pt2))
            (setq p21 start
                  p22 (vlax-curve-getfirstderiv obj2
                                                (vlax-curve-getstartparam obj2)
                      )
                  p22 (mapcar
                        '+
                        p21
                        p22
                      )
            )
            (setq p21 end
                  p22 (vlax-curve-getfirstderiv obj2
                                                (vlax-curve-getendparam obj2)
                      )
                  p22 (mapcar
                        '-
                        p21
                        p22
                      )
            )
          )
          (vl-cmdf "_.spline" p11 p21 "" p12 p22)
        )
      )
    )
  )
  (setvar "osmode" osmode)
  (vl-cmdf "_.undo" "e")
)
[/php]
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2025-9-27 02:04 , Processed in 0.166018 second(s), 32 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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