flopo 发表于 2022-7-6 08:30:47

最低y值-坐标fo

你好
如何确定多段线的较小(和较大)值,Y或X?我是指多段线上的Y坐标,其中Y对于整个多段线具有最小值?

JohnM 发表于 2022-7-6 08:34:54

看看最小和最大函数
另外,我想有一个帖子是关于这一点,回来一段时间,尝试搜索它

Tharwat 发表于 2022-7-6 08:38:35

这将使一个点位于选定多段线的最低坐标点,该多段线具有最小的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

BlackBox 发表于 2022-7-6 08:40:54

???
 
*咳嗽*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。

Tharwat 发表于 2022-7-6 08:44:44

你好,Renderman。
 
(min max)是函数,您已经将其用作变量。这可能吗?
 
(/ ss v min max)
 
当做
 
塔瓦特

BlackBox 发表于 2022-7-6 08:49:22

 
当我开始工作进行测试时,我也注意到了这一点(顺便说一句,代码可以工作)。
 
可悲的是,这是我在论坛文本框中输入代码时的一个拼写错误。代码已更正。

Tharwat 发表于 2022-7-6 08:51:00

别担心,伙计。
 
顺致敬意,

Lee Mac 发表于 2022-7-6 08:54:08

下面是我为求曲线的最大/最小点而编写的一些旧代码:
 

(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)
)

irneb 发表于 2022-7-6 08:57:14

这是“可能的”,因为你可以在Lisp中重新定义任何东西——而且因为它们是局部变量,它们不会影响defun之外的任何东西——所以最小和最大函数在其他地方不会被删除。尽管不建议这样做,并且会在VLIDE中产生警告消息(类似于重新定义的受保护符号)。

Tharwat 发表于 2022-7-6 09:00:30

 
非常感谢。
 
我曾经面对过这条让我恐慌了很长时间的信息,在搜索了这条信息之后,我意识到了它的主要问题,我怀疑我可能会忘记这些记忆和我得到的完美教训。
 
当做
页: [1] 2
查看完整版本: 最低y值-坐标fo