Lisp查找部分重叠
你好是否有lisp例程来查找重叠维度(如下图所示)
很难看到dim是这样的。当我们使用DIMCONTINUE时,这种情况经常发生。
这给制造过程带来了很大的问题。
有人可以帮助:(
非常感谢。
克鲁格
试试这个命令
overkill
这可能对你有很大帮助。 嗨,迈克尔
我知道杀伤力过大,但这并不是我想要的。
OV删除dims。我们需要使用模糊距离。
我的Lisp程序不太好,无法让OV为我工作
谢谢
克鲁格 可以使用此代码根据样式名称选择所有尺寸,
(sssetfirst nil(ssget "_X" '((0 . "DIMENSION")(3 . "YourStyleName"))))
塔瓦特 我所有的DIM都是相同的样式。
我想要的是找到这些重叠的DIM(可能标记它们),当然纠正这些错误。
克鲁格 您可以检查尺寸之间的交点,但是此方法将仅使用尺寸的边界框,因此不会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)
) 这是一个相当糟糕的起草习惯。延续就是这样。在上一个dim相同方向上的连续。不覆盖-大卫 谢谢李的代码。
可能现在需要结合检查尺寸标注的DXF代码,以查看尺寸是否继续,可能一个尺寸标注包括另一个尺寸标注等。
可以为DIMCONTINUE命令生成反应堆吗?
发出命令后,我们将光标移动到尺寸的左侧或右侧,并将新尺寸翻转到正确的一侧。
克鲁格 恐怕IntersectWith方法是我最愿意追求的。 但最后还是写了些东西。不是美丽,而是成功
感谢李(LM:RotatePointsByMatrix)
克鲁格
FindOverlappedDimensions。lsp
页:
[1]