求线上2点之间的长度
<p>我想做一个lisp程序,用户获取到一条线后,求出线上离起点长度为 1 的地方的点A,再求出线上到点A长度为 2 的点B !</p><p>请高手帮帮我!或者告知下求线上2点之间线长度的函数,谢谢了!</p> <p>distance pt1 pt2</p> <p></p>
<p>水平有限基本达到要求,但是书写可能不规范</p> <p>谢谢楼上</p>
<p>收藏了,下来学习学习</p>
<p>谢谢</p> 谢谢3楼,我要的是在曲线上工作的,你的只能在直线上,曲线上能实现吗? <p>楼主的想法很好,如果能实现,很有意义.</p>
<p>看来只能打命令(me)的主意,这只是我的一点想法.</p> <p>如楼上所说,用measure命令,measure命令产生的点是放在上一个选折集里的,可以用(ssget "p")调用,但以我的水平,没办法判断点的位置是离起点最近的(这个和你的几何图形,及点移动的轨迹有关),只好自欺欺人了,估计对您用处不大,我只能做到这个地步了,还盼高人出手吧</p> 如楼上所说,用measure命令,measure命令产生的点是放在上一个选折集里的,可以用(ssget "p")调用,但以我的水平,没办法判断点的位置是离起点最近的(这个和你的几何图形,及点移动的轨迹有关),只好自欺欺人了,估计对您用处不大,我只能做到这个地步了,还盼高人出手吧 You have to revise the code a bit to suit your purpose.
;;; PTDI.lsp
;;; Mark points on curve based on input distance to start point
;;; Note: please set point style to be visible.
;;; By Alvin LIN 27/10/2010
;;; email: alin2220@gmail.com
;;;
(DEFUN C:PTDI (/ sel enpickpt closetpt
endparam startparam len closetptdist
LOOP distfoundptrefpt delta
dist0 *error* osmode
)
(SETQ SEL (ENTSEL "\nSelect a curve: "))
(setq en (car sel)
pickpt (cadr sel)
)
(defun *error* (msg)
(setvar "osmode" osmode)
(princ msg)
(princ)
)
(setq osmode (getvar "OSMODE"))
(setvar "OSMODE" 0)
(setq closestpt (vlax-curve-getclosestpointto en pickpt))
(setq endparam (vlax-curve-getendparam en)
startparam (vlax-curve-getstartparam en)
)
(if (not (setq len (CurveLength en)))
(alert (strcat "No length property available for "
(vla-get-objectname (vlax-ename->vla-object))
"."
)
)
)
(setq closetptdist (vlax-curve-getdistatpoint en closestpt))
(setq LOOP t
dist0 0
)
(if (null delta)
(setq delta 500)
)
(while LOOP
(princ "\nInput distance from start point <")
(princ (rtos (+ dist0 delta) 2 4))
(setq dist (getreal "> : "))
(if (= DIST 0)
(setq LOOP nil)
(progn
(if (= dist nil)
(setq dist (+ dist0 delta))
)
(if (and (> dist 0) (<= dist len))
(progn
(if (< closetptdist (* len 0.5))
(progn
(setq foundpt (vlax-curve-getpointatdist en dist))
(command "point" (trans foundpt 0 1))
)
(progn
(setq
foundpt (vlax-curve-getpointatdist en (- len dist))
)
(command "point" (trans foundpt 0 1))
)
) ;if
(setq delta (- dist dist0))
(setq dist0 (+ dist0 delta))
) ;progn
(princ (strcat "\nDistance input must be > 0 and <= "
(rtos len 2 4)
"."
)
)
)
) ;progn
)
) ;while
(setvar "OSMODE" osmode)
(princ)
)
(defun CurveLength (obj / rtn endparam)
(if (not (vl-catch-all-error-p
(setq endparam
(vl-catch-all-apply 'vlax-curve-getendparam (list obj))
)
)
)
(if (setq rtn (vlax-curve-getdistatparam obj endparam))
rtn
nil
)
nil
)
)
<p>ALIN 强</p>
页:
[1]
2