乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
查看: 70|回复: 12

[编程交流] 修剪问题

[复制链接]

9

主题

47

帖子

38

银币

初来乍到

Rank: 1

铜币
45
发表于 2022-7-6 07:58:07 | 显示全部楼层 |阅读模式
我有一个命令,允许我从块的中心画一个弧,这是一个圆。在弧完成后,我想用块作为对象,弧的起点作为要修剪的对象,修剪出块的弧。
 
如果该点位于可见窗口中,这一切都可以完美实现。如果平移到无法再看到点的区域外,则会得到一个阴影窗。这很烦人,因为它会终止命令。
 
当你看不到出发点时,有什么方法可以让它发挥作用吗?
 
下面是实际生成矩形的代码部分。从两个角的中间开始弧。另一部分要长得多,所以我暂时不讲了。因为我现在不得不添加缩放功能来绕过这个问题。
 
 
  1. (while (= square nil)
  2. (setq square (entsel "\nSelect Light or Juncion box:")))
  3. (cond ((/= square nil)
  4.        (setq sq (entget (car square)))
  5.        (setq pnt(list))
  6.        (setq blkType(cdr(assoc 0 sq)))
  7.        (setq BlkName(cdr(assoc 2 sq))))
  8.     ((= square nil)
  9.        (setq blktype "NOTHING")
  10.        (princ "\nNo Objects Selected.")))
  11. (cond ((= blkType "LWPOLYLINE")
  12.        (foreach a sq                                            
  13.            (if(= 10 (car a)) (setq pnt (append pnt (list(cdr a))))))                                    
  14.                (setq p1 (nth 0 pnt))
  15.                (setq p2 (nth 2 pnt))
  16.                (setq npnt (mapcar '/ (mapcar '+ p1 p2) '(2.0 2.0 2.0)))
  17.                (command "arc" npnt pause pause)
  18.                (setq ar (entlast))
  19.                (command "trim" square "" npnt ""))

 
 
 
谢谢
回复

使用道具 举报

35

主题

2471

帖子

2447

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
174
发表于 2022-7-6 08:07:23 | 显示全部楼层
不建议在AutoLISP例程中使用TRIM或FILLET等编辑命令,因为结果可能会受到缩放级别或编辑区域可见性的影响。
我建议您添加该弧(似乎该操作需要用户干预),然后计算圆和弧之间的插入点(检查Lee Mac库中的那些工具),然后使用ENTMODE修复弧,或者删除弧,并使用第一个弧的特征从交点重新绘制。
回复

使用道具 举报

9

主题

47

帖子

38

银币

初来乍到

Rank: 1

铜币
45
发表于 2022-7-6 08:11:31 | 显示全部楼层
谢谢
 
我想,事实上,它在这里这么早,我只是完全错过阅读后3或4次笑。这是一个天才的想法。我会在今天或周一完成它,并让你知道结果如何,非常感谢。
 
-编辑-
我忘了补充一句,李真了不起。谢谢你的辛勤工作。
回复

使用道具 举报

9

主题

47

帖子

38

银币

初来乍到

Rank: 1

铜币
45
发表于 2022-7-6 08:14:00 | 显示全部楼层
所以我终于花了一点时间研究了交叉点代码,但我使用了李提供的atm示例,只是看看它是如何工作的。我遇到的问题是,它目前不起作用,我正在使用一个圆和一条线,与这些命令相交。
 
从此处链接
 
  1. ;;                                                            ;;
  2. ;;  Returns a list of all points of intersection between      ;;
  3. ;;  two objects                                               ;;
  4. ;;------------------------------------------------------------;;
  5. ;;  Author: Lee Mac, Copyright © 2011 - www.lee-mac.com       ;;
  6. ;;------------------------------------------------------------;;
  7. ;;  Arguments:                                                ;;
  8. ;;  obj1, obj2 - VLA-Objects                                  ;;
  9. ;;------------------------------------------------------------;;
  10. ;;  Returns:  List of intersection points, or nil             ;;
  11. ;;------------------------------------------------------------;;
  12. (defun LM:GetIntersections ( obj1 obj2 )
  13. (LM:GroupByNum (vlax-invoke obj1 'IntersectWith obj2 acExtendNone) 3)
  14. )

 
 
然后我运行这个命令。
 
 
  1. (defun c:test1 ( / e1 e2 ) (vl-load-com)
  2. (if
  3.    (and
  4.      (setq e1 (car (entsel "\nSelect First Object: ")))
  5.      (setq e2 (car (entsel "\nSelect Second Object: ")))
  6.    )
  7.    (foreach x (LM:GetIntersections (vlax-ename->vla-object e1) (vlax-ename->vla-object e2))
  8.      (entmakex (list (cons 0 "POINT") (cons 10 x)))
  9.    )
  10. )
  11. (princ)
  12. )

 
我得到了一个:CALLBACK-ENTRY,在last break source中。
 
所以我定义了这个错误处理程序
 
(
之后,我在命令提示符下收到了这个消息。
 
我不知道那是什么意思。我做错什么了吗?
 
谢谢大家。
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 08:23:04 | 显示全部楼层
pman,
 
首先,感谢您对我工作的赞赏和感谢。
 
其次,请仔细阅读适用于我网站上发布的所有代码的使用条款,如果您保留我的代码中包含的所有标题(请编辑您之前的帖子),并在可能的情况下使用链接引用原始代码,我将不胜感激。
 
现在,为了解决您的问题,请注意,所有交集函数都需要我的Group by Number函数,该函数包含在程序页面上第一个代码窗格的末尾。
 
回复

使用道具 举报

9

主题

47

帖子

38

银币

初来乍到

Rank: 1

铜币
45
发表于 2022-7-6 08:25:56 | 显示全部楼层
对不起,李,一切都应该更新。我只是在休息前从网站上快速复制和粘贴,我甚至没有意识到这一点。我也不知道为什么我永远都不能得到代码去多行。无论如何。它成功了。
 
谢谢。
 
如果对象是一个块,这会不起作用吗?
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 08:29:38 | 显示全部楼层
 
谢谢你,谢谢。
 
关于换行符的丢失,您是否在发布到论坛之前将代码复制到其他编辑器(例如写字板)?
回复

使用道具 举报

9

主题

47

帖子

38

银币

初来乍到

Rank: 1

铜币
45
发表于 2022-7-6 08:35:58 | 显示全部楼层
不,我是从你的网站上复制的。错误代码直接来自autocads命令提示符。
 
 
当我使用和弧和圆块时,我还有一个问题(圆的变化取决于图形的比例)。当点处于满标度时,它的偏移量为1/2“,并且偏移量越小。我应该使用不同的交点命令吗?
 
我要补充的是,每一个都是和弧和一个圆块。圆块is实体将从列表中拉出(使用ssget),然后(entget)。弧在创建时也是一个实体。
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 08:41:15 | 显示全部楼层
 
如果您先将代码复制到编辑器(如记事本或VLIDE),然后复制到论坛编辑器,换行符应保持不变。出现这个问题的原因是,当直接从我的网站(或任何网站)复制时,CSS格式也会被复制,然后在论坛帖子编辑器中使用时被删除(连同换行符)。
 
 
VLA块引用对象确实有一个IntersectWith方法(由我的函数调用的方法),但是,根据我的经验,我发现该方法在与块一起使用时会变化无常,有时会产生意外的结果。
 
我建议对VLA块参照对象使用分解方法,该方法将返回分解对象的变体,同时保留原始块参照对象。然后,在删除分解的对象之前,可以在此变体中的对象上使用my函数。
回复

使用道具 举报

9

主题

47

帖子

38

银币

初来乍到

Rank: 1

铜币
45
发表于 2022-7-6 08:46:45 | 显示全部楼层
嗯,这比我高得多。我不是VLA人。我想我可以让它在街区周围创建一个圆,然后在找到交叉点后将其删除。也许这是个愚蠢的想法。谁知道准备去上学,所以要等到明天。
 
感谢您提供有关首先将代码提交给编辑器的提示。现在看起来很棒。
回复

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

QQ|关于我们|小黑屋|乐筑天下 繁体中文

GMT+8, 2025-3-9 20:51 , Processed in 0.554893 second(s), 83 queries .

© 2020-2025 乐筑天下

联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表