明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 5158|回复: 17

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

  [复制链接]
发表于 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 "樣條曲線的終點")
這個問題是怎樣解決啊?請大家來分享各自的見解.
"觉得好,就打赏"
还没有人打赏,支持一下
发表于 2003-9-9 14:11:00 | 显示全部楼层
是沿着曲线接近吗?
 楼主| 发表于 2003-9-9 14:23:00 | 显示全部楼层
是啊有的圖元只離曲線 0.1mm 而大多數是和曲線相交. 但是小的不是很熟悉 Lisp .不知怎麼寫.
樓上的好心人,你就教教我們晚輩吧.謝謝了.
发表于 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)
)
发表于 2003-9-9 15:54:00 | 显示全部楼层
当然也适用于所有的曲线,如:line arc pline ellipse等
 楼主| 发表于 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))
发表于 2003-9-9 16:12:00 | 显示全部楼层
看一下:
http://www.mjtd.com/a2/list.asp?id=275
发表于 2003-9-9 18:00:00 | 显示全部楼层
6楼的你这肯定不行!你这是直线距离而不是沿着曲线接近。
发表于 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首尾端至某線段"中就有那麼一段
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2025-2-23 02:53 , Processed in 0.210768 second(s), 27 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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