BDYCAD 发表于 2003-9-7 11:38:00

這個判斷式很有用,請版主幫忙寫寫吧.

我寫了一個程序,碰到這樣的一個很難解決的問題.是這樣一回事我說給大家看看:
我用了
(setq a (entsel));;;選了一條樣條曲線
(setq as (cadr a));;;提取選點
........
(setq ;ssn(ssname a n)
          endata (entget (car a))
          spo (CDR (assoc 10 endata)));;;自動取得spline的起點座標.設成spo變量
(repeat (length endata)
    (setq end (cdr (nth n endata)));;;自動取得spline的終點座標,設成end變量,
    (setq n (1+ n)))
.......

當我自動提取了樣條曲線的起點和終點時,我想判別as如果接近起點就
(setq p1 "樣條曲線的起點")
如果as接近樣條曲線的終點
(setq p1 "樣條曲線的終點")
這個問題是怎樣解決啊?請大家來分享各自的見解.

lyy 发表于 2003-9-9 14:11:00

是沿着曲线接近吗?

BDYCAD 发表于 2003-9-9 14:23:00

是啊有的圖元只離曲線 0.1mm 而大多數是和曲線相交. 但是小的不是很熟悉 Lisp .不知怎麼寫.
樓上的好心人,你就教教我們晚輩吧.謝謝了.

lyy 发表于 2003-9-9 15:37:00

;;试试看
(defun c:test(/ e ent pt dis len)
(setq e T)
(while (and e (setq ent (entsel "\n请点选spline线:")))
    (if (= (cdr (assoc 0 (entget (car ent)))) "SPLINE")
      (progn
      (setq e nil
            pt (cadr ent)
            ent (vlax-ename->vla-object (car ent))
            pt (vlax-curve-getClosestPointTo ent pt)
            dis (vlax-curve-getDistAtPoint ent pt)
            len (vlax-curve-getDistAtParam ent (vlax-curve-getEndParam ent))
            pt (if (< dis (- len dis)) (vlax-curve-getStartPoint ent) (vlax-curve-getEndPoint ent))
      )
      (princ pt)
      )
      (prompt "\n不是spline线!")
    )
)
(princ)
)

lyy 发表于 2003-9-9 15:54:00

当然也适用于所有的曲线,如:line arc pline ellipse等

BDYCAD 发表于 2003-9-9 16:06:00

這個不錯.謝謝樓上的朋友.以后多多向你指教.我目前也寫好了一條啦.思路是這么樣的.


以下是程序:

(defun c:test_BDY(/)
(setq a (entsel))
(setq selectpoint (cadr a ))
(setvar "cmdecho" 0)
(setq os (getvar "osmode" ))
(setvar "OSMODE" 0)
(setq n 0)
(setq
    endata (entget (car a))
    spo (CDR (assoc 10 endata)));;;自動取得spline的起點座標.設成spo變量
(repeat (length endata)
    (setq end (cdr (nth n endata)));;;自動取得spline的終點座標,設成end變量,
    (setq n (1+ n)))
(setq distfulla(distance spo selectpoint))
(setq distfullb(distance end selectpoint))
(IF (> DISTFULLA DISTFULLB)
    (PROGN (PRINC "\n選擇接近")
      (princ spo))
    (progn (PRINC "\n選擇接近")
      (princ END)))
(PRINC))

runkeji 发表于 2003-9-9 16:12:00

看一下:
http://www.mjtd.com/a2/list.asp?id=275

lyy 发表于 2003-9-9 18:00:00

6楼的你这肯定不行!你这是直线距离而不是沿着曲线接近。

lyy 发表于 2003-9-9 20:26:00

如果是沿直线距离接近那直接用(osnap (cadr (entsel "\n点选spline线:")) "end")即可。

龙龙仔 发表于 2003-9-10 13:14:00

lyy兄你那麼快就貼出來,我還想推一下BDYCAD看他甚麼時候會做出來,

下列是我之前的一段程序
(if (< (distance (cadr A) SPO) (distance (cadr A) EPO))
    ;;以上判斷有更精碓的方法,但讓我偷懶一下

其實我沒那麼懶,因我早就寫好了,"延伸SPLINE首尾端至某線段"中就有那麼一段
页: [1] 2
查看完整版本: 這個判斷式很有用,請版主幫忙寫寫吧.