修剪问题
我有一个命令,允许我从块的中心画一个弧,这是一个圆。在弧完成后,我想用块作为对象,弧的起点作为要修剪的对象,修剪出块的弧。如果该点位于可见窗口中,这一切都可以完美实现。如果平移到无法再看到点的区域外,则会得到一个阴影窗。这很烦人,因为它会终止命令。
当你看不到出发点时,有什么方法可以让它发挥作用吗?
下面是实际生成矩形的代码部分。从两个角的中间开始弧。另一部分要长得多,所以我暂时不讲了。因为我现在不得不添加缩放功能来绕过这个问题。
(while (= square nil)
(setq square (entsel "\nSelect Light or Juncion box:")))
(cond ((/= square nil)
(setq sq (entget (car square)))
(setq pnt(list))
(setq blkType(cdr(assoc 0 sq)))
(setq BlkName(cdr(assoc 2 sq))))
((= square nil)
(setq blktype "NOTHING")
(princ "\nNo Objects Selected.")))
(cond ((= blkType "LWPOLYLINE")
(foreach a sq
(if(= 10 (car a)) (setq pnt (append pnt (list(cdr a))))))
(setq p1 (nth 0 pnt))
(setq p2 (nth 2 pnt))
(setq npnt (mapcar '/ (mapcar '+ p1 p2) '(2.0 2.0 2.0)))
(command "arc" npnt pause pause)
(setq ar (entlast))
(command "trim" square "" npnt ""))
谢谢 不建议在AutoLISP例程中使用TRIM或FILLET等编辑命令,因为结果可能会受到缩放级别或编辑区域可见性的影响。
我建议您添加该弧(似乎该操作需要用户干预),然后计算圆和弧之间的插入点(检查Lee Mac库中的那些工具),然后使用ENTMODE修复弧,或者删除弧,并使用第一个弧的特征从交点重新绘制。 谢谢
我想,事实上,它在这里这么早,我只是完全错过阅读后3或4次笑。这是一个天才的想法。我会在今天或周一完成它,并让你知道结果如何,非常感谢。
-编辑-
我忘了补充一句,李真了不起。谢谢你的辛勤工作。 所以我终于花了一点时间研究了交叉点代码,但我使用了李提供的atm示例,只是看看它是如何工作的。我遇到的问题是,它目前不起作用,我正在使用一个圆和一条线,与这些命令相交。
从此处链接
;; ;;
;;Returns a list of all points of intersection between ;;
;;two objects ;;
;;------------------------------------------------------------;;
;;Author: Lee Mac, Copyright © 2011 - www.lee-mac.com ;;
;;------------------------------------------------------------;;
;;Arguments: ;;
;;obj1, obj2 - VLA-Objects ;;
;;------------------------------------------------------------;;
;;Returns:List of intersection points, or nil ;;
;;------------------------------------------------------------;;
(defun LM:GetIntersections ( obj1 obj2 )
(LM:GroupByNum (vlax-invoke obj1 'IntersectWith obj2 acExtendNone) 3)
)
然后我运行这个命令。
(defun c:test1 ( / e1 e2 ) (vl-load-com)
(if
(and
(setq e1 (car (entsel "\nSelect First Object: ")))
(setq e2 (car (entsel "\nSelect Second Object: ")))
)
(foreach x (LM:GetIntersections (vlax-ename->vla-object e1) (vlax-ename->vla-object e2))
(entmakex (list (cons 0 "POINT") (cons 10 x)))
)
)
(princ)
)
我得到了一个:CALLBACK-ENTRY,在last break source中。
所以我定义了这个错误处理程序
(
之后,我在命令提示符下收到了这个消息。
我不知道那是什么意思。我做错什么了吗?
谢谢大家。 pman,
首先,感谢您对我工作的赞赏和感谢。
其次,请仔细阅读适用于我网站上发布的所有代码的使用条款,如果您保留我的代码中包含的所有标题(请编辑您之前的帖子),并在可能的情况下使用链接引用原始代码,我将不胜感激。
现在,为了解决您的问题,请注意,所有交集函数都需要我的Group by Number函数,该函数包含在程序页面上第一个代码窗格的末尾。
李 对不起,李,一切都应该更新。我只是在休息前从网站上快速复制和粘贴,我甚至没有意识到这一点。我也不知道为什么我永远都不能得到代码去多行。无论如何。它成功了。
谢谢。
如果对象是一个块,这会不起作用吗?
谢谢你,谢谢。
关于换行符的丢失,您是否在发布到论坛之前将代码复制到其他编辑器(例如写字板)? 不,我是从你的网站上复制的。错误代码直接来自autocads命令提示符。
当我使用和弧和圆块时,我还有一个问题(圆的变化取决于图形的比例)。当点处于满标度时,它的偏移量为1/2“,并且偏移量越小。我应该使用不同的交点命令吗?
我要补充的是,每一个都是和弧和一个圆块。圆块is实体将从列表中拉出(使用ssget),然后(entget)。弧在创建时也是一个实体。
如果您先将代码复制到编辑器(如记事本或VLIDE),然后复制到论坛编辑器,换行符应保持不变。出现这个问题的原因是,当直接从我的网站(或任何网站)复制时,CSS格式也会被复制,然后在论坛帖子编辑器中使用时被删除(连同换行符)。
VLA块引用对象确实有一个IntersectWith方法(由我的函数调用的方法),但是,根据我的经验,我发现该方法在与块一起使用时会变化无常,有时会产生意外的结果。
我建议对VLA块参照对象使用分解方法,该方法将返回分解对象的变体,同时保留原始块参照对象。然后,在删除分解的对象之前,可以在此变体中的对象上使用my函数。 嗯,这比我高得多。我不是VLA人。我想我可以让它在街区周围创建一个圆,然后在找到交叉点后将其删除。也许这是个愚蠢的想法。谁知道准备去上学,所以要等到明天。
感谢您提供有关首先将代码提交给编辑器的提示。现在看起来很棒。
页:
[1]
2