Guest kruuger 发表于 2022-7-6 09:19:14

Lisp查找部分重叠

你好
 
是否有lisp例程来查找重叠维度(如下图所示)
很难看到dim是这样的。当我们使用DIMCONTINUE时,这种情况经常发生。
这给制造过程带来了很大的问题。
 
有人可以帮助:(
非常感谢。
 
克鲁格

Michaels 发表于 2022-7-6 09:31:39

试试这个命令
overkill
 
这可能对你有很大帮助。

Guest kruuger 发表于 2022-7-6 09:38:15

嗨,迈克尔
我知道杀伤力过大,但这并不是我想要的。
OV删除dims。我们需要使用模糊距离。
我的Lisp程序不太好,无法让OV为我工作
 
谢谢
克鲁格

Tharwat 发表于 2022-7-6 09:44:45

可以使用此代码根据样式名称选择所有尺寸,

(sssetfirst nil(ssget "_X" '((0 . "DIMENSION")(3 . "YourStyleName"))))

 
塔瓦特

Guest kruuger 发表于 2022-7-6 09:47:31

我所有的DIM都是相同的样式。
我想要的是找到这些重叠的DIM(可能标记它们),当然纠正这些错误。
克鲁格

Lee Mac 发表于 2022-7-6 09:55:12

您可以检查尺寸之间的交点,但是此方法将仅使用尺寸的边界框,因此不会100%准确。
 
为了证明我的观点,请在两个重叠的维度上尝试此代码:
 

(defun c:test ( / e1 e2 )
(vl-load-com)

(if
   (and
   (setq e1
       (LM:SelectifFoo
         (lambda ( x )
         (eq "DIMENSION" (cdr (assoc 0 (entget x))))
         )
         "\nSelect First Dimension: "
       )
   )
   (setq e2
       (LM:SelectifFoo
         (lambda ( x )
         (eq "DIMENSION" (cdr (assoc 0 (entget x))))
         )
         "\nSelect Second Dimension: "
       )
   )
   )
   (foreach x
   (LM:GroupbyNum
       (vlax-invoke
         (vlax-ename->vla-object e1) 'IntersectWith
         (vlax-ename->vla-object e2) AcExtendNone
       )
       3
   )
   (command "_.point" "_non" x)
   )
)

(princ)
)

;;-------------------=={ Select if Foo }==--------------------;;
;;                                                            ;;
;;Continuous selection prompts until the predicate function ;;
;;foo is validated                                          ;;
;;------------------------------------------------------------;;
;;Author: Lee McDonnell, 2010                               ;;
;;                                                            ;;
;;Copyright © 2010 by Lee McDonnell, All Rights Reserved.   ;;
;;Contact: Lee Mac @ TheSwamp.org, CADTutor.net             ;;
;;------------------------------------------------------------;;
;;Arguments:                                                ;;
;;foo - predicate function taking ename argument            ;;
;;str - prompt string                                       ;;
;;------------------------------------------------------------;;
;;Returns:selected entity ename if successful, else nil   ;;
;;------------------------------------------------------------;;

(defun LM:SelectifFoo ( foo str / e )
;; © Lee Mac 2010
(while
   (progn
   (setq e (car (entsel str)))
   
   (cond
       (
         (eq 'ENAME (type e))

         (if (not (foo e)) (princ "\n** Invalid Object Selected **"))
       )
   )
   )
)
e
)

;;-----------------=={ Group by Number }==--------------------;;
;;                                                            ;;
;;Groups a list into a list of lists, each of length 'n'    ;;
;;------------------------------------------------------------;;
;;Author: Lee McDonnell, 2010                               ;;
;;                                                            ;;
;;Copyright © 2010 by Lee McDonnell, All Rights Reserved.   ;;
;;Contact: Lee Mac @ TheSwamp.org, CADTutor.net             ;;
;;------------------------------------------------------------;;
;;Arguments:                                                ;;
;;l - List to process                                       ;;
;;n - Number of elements by which to group                  ;;
;;------------------------------------------------------------;;
;;Returns:List of lists, each of length 'n'               ;;
;;------------------------------------------------------------;;

(defun LM:GroupByNum ( l n / a b )
;; © Lee Mac 2010
(while l
   (
   (lambda ( i )
       (while (< 0 i)
         (setq a (cons (car l) a) l (cdr l) i (1- i))
       )
       (setq b (cons (reverse a) b) a nil)
   )
   n
   )
)
(reverse b)
)

David Bethel 发表于 2022-7-6 10:04:13

这是一个相当糟糕的起草习惯。延续就是这样。在上一个dim相同方向上的连续。不覆盖-大卫

Guest kruuger 发表于 2022-7-6 10:10:19

谢谢李的代码。
可能现在需要结合检查尺寸标注的DXF代码,以查看尺寸是否继续,可能一个尺寸标注包括另一个尺寸标注等。
 
可以为DIMCONTINUE命令生成反应堆吗?
发出命令后,我们将光标移动到尺寸的左侧或右侧,并将新尺寸翻转到正确的一侧。
 
克鲁格

Lee Mac 发表于 2022-7-6 10:14:13

恐怕IntersectWith方法是我最愿意追求的。

Guest kruuger 发表于 2022-7-6 10:24:23

但最后还是写了些东西。不是美丽,而是成功
感谢李(LM:RotatePointsByMatrix)
克鲁格
FindOverlappedDimensions。lsp
页: [1]
查看完整版本: Lisp查找部分重叠