最低y值-坐标fo
你好如何确定多段线的较小(和较大)值,Y或X?我是指多段线上的Y坐标,其中Y对于整个多段线具有最小值? 看看最小和最大函数
另外,我想有一个帖子是关于这一点,回来一段时间,尝试搜索它 这将使一个点位于选定多段线的最低坐标点,该多段线具有最小的Y值,此外,它将显示该点所在点的坐标。
(vl-load-com)
(defun c:test (/ ss Coords l i p p1 pt)
; Tharwat 15. 06. 2011
(if (eq (getvar 'pdmode) 0)
(setvar 'pdmode 3)
)
(if
(setq ss (ssget "_+.:L" '((0 . "*POLYLINE"))))
(progn
(setq Coords (vlax-get (vlax-ename->vla-object (ssname ss 0))
'Coordinates
)
)
(setq l (/ (length Coords) 2))
(setq i 0
p (cons 10 (list (car Coords) (cadr Coords)))
)
(repeat l
(setq
p1 (cons 10
(list (nth i Coords) (nth (setq i (1+ i)) Coords))
)
)
(if (< (caddr p1) (caddr p))
(setq p p1)
)
(setq i (1+ i))
)
(print p)
(entmakex (list (cons 0 "POINT") p))
)
(princ)
)
(princ)
)
Tharwat ???
*咳嗽*GetBoundingBox*咳嗽*
(defun c:GBB () (c:GetBoundingBox))
(defun c:GetBoundingBox (/ ss v mn mx)
(vl-load-com)
(princ "\rGET BOUNDING BOX \n")
(if (and (setq ss (ssget ":S:E" ))
(vlax-method-applicable-p
(setq v (vlax-ename->vla-object (ssname ss 0)))
'getboundingbox))
(progn
(vla-getboundingbox v 'mn 'mx)
(princ (mapcar 'vlax-safearray->list (list mn mx))))
(cond (ss (prompt "\n** GetBoundingBox method not available ** "))
((prompt "\n** Nothing selected ** "))))
(princ))
未经测试-从内存中快速写入我的MacBook。 你好,Renderman。
(min max)是函数,您已经将其用作变量。这可能吗?
(/ ss v min max)
当做
塔瓦特
当我开始工作进行测试时,我也注意到了这一点(顺便说一句,代码可以工作)。
可悲的是,这是我在论坛文本框中输入代码时的一个拼写错误。代码已更正。 别担心,伙计。
顺致敬意, 下面是我为求曲线的最大/最小点而编写的一些旧代码:
(defun LM:CurveMinMax
( obj fuzz / _GetBoundingBoxWithOffset _GroupByNum _FlattenPoint a acdoc acspc lst obj tmp )
(defun _GetBoundingBoxWithOffset ( obj o / ll ur )
(
(lambda ( a )
(mapcar
(function
(lambda ( b )
(mapcar
(function
(lambda ( c ) ((eval c) a))
)
b
)
)
)
'(
(
(lambda ( x ) (- (caarx) o))
(lambda ( x ) (- (cadar x) o))
)
(
(lambda ( x ) (+ (caadr x) o))
(lambda ( x ) (- (cadar x) o))
)
(
(lambda ( x ) (+ (caadrx) o))
(lambda ( x ) (+ (cadadr x) o))
)
(
(lambda ( x ) (- (caar x) o))
(lambda ( x ) (+ (cadadr x) o))
)
)
)
)
(mapcar 'vlax-safearray->list
(progn (vla-getboundingbox obj 'll 'ur) (list ll ur))
)
)
)
(defun _GroupByNum ( l n / r)
(if l
(cons
(reverse (repeat n (setq r (cons (car l) r) l (cdr l)) r))
(_GroupByNum l n)
)
)
)
(defun _FlattenPoint ( p )
(list (car p) (cadr p) 0.0)
)
(setq acdoc (vla-get-activedocument (vlax-get-acad-object))
acspc (vlax-get-property acdoc (if (= 1 (getvar 'CVPORT)) 'Paperspace 'Modelspace))
)
(cond
( (not (vlax-method-applicable-p obj 'GetBoundingBox))
)
( t
(setq tmp
(mapcar
(function
(lambda ( x )
(apply 'vla-addline (cons acspc (mapcar 'vlax-3D-point x)))
)
)
(_GroupByNum (mapcar '_FlattenPoint (_GetBoundingBoxWithOffset obj (- fuzz))) 2)
)
)
(setq lst
(mapcar
(function
(lambda ( x )
(car (_GroupByNum (vlax-invoke obj 'Intersectwith x acExtendOtherEntity) 3))
)
)
tmp
)
)
(mapcar 'vla-delete tmp)
lst
)
)
)
;; Test Function
(defun c:test( / e m )
(if
(and
(setq e (car (entsel)))
(setq m (LM:CurveMinMax (vlax-ename->vla-object e) 1e-)
(apply 'and m)
)
(foreach x m
(entmakex (list (cons 0 "POINT") (cons 10 x)))
)
)
(princ)
)
这是“可能的”,因为你可以在Lisp中重新定义任何东西——而且因为它们是局部变量,它们不会影响defun之外的任何东西——所以最小和最大函数在其他地方不会被删除。尽管不建议这样做,并且会在VLIDE中产生警告消息(类似于重新定义的受保护符号)。
非常感谢。
我曾经面对过这条让我恐慌了很长时间的信息,在搜索了这条信息之后,我意识到了它的主要问题,我怀疑我可能会忘记这些记忆和我得到的完美教训。
当做
页:
[1]
2