乐筑天下

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

[编程交流] 偏移和删除源

[复制链接]

17

主题

1274

帖子

25

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
260
发表于 2022-7-5 15:59:49 | 显示全部楼层
 
可能是建筑单元。试着排队
查看是否返回72.5
现在输入该行
它是否提示“拾取要偏移的对象”:?
回复

使用道具 举报

58

主题

3353

帖子

33

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1761
发表于 2022-7-5 16:02:47 | 显示全部楼层
offset\u dist变量已本地化,因此它不会记住您的最后一个条目:(/offset\u dist obj\u 2\u offset offset\u side)
 
下面是一个保存默认偏移距离的简单示例:
  1. (defun c:off (/ e off p)
  2. ;; Get saved offset from registry or default to 1
  3. (setq        off (atof (cond        ((getenv "MyOffsetProgram"))
  4.                 ("1")
  5.           )
  6.     )
  7. )
  8. (if (and ;; Prompt for distance, if nil use default
  9.    (setq off (cond ((getdist (strcat "\nOffset distance <" (vl-princ-to-string off) ">: ")))
  10.                    (off)
  11.              )
  12.    )
  13.    ;; Pick something to offset .. needs more error checking ( ie a block will bonk it )
  14.    (setq e (entsel (strcat "\nPick object to offset: ")))
  15.    ;; Pick a side to offset or use point in entsel
  16.    (setq p (cond ((getpoint "\nSide to offset on: "))
  17.                  ((cadr e))
  18.            )
  19.    )
  20.      )
  21.    (progn ;; Offset object
  22.    (command "_.offset" off (car e) p "")
  23.    ;; Delete original (entdel won't **** the bed if the object is locked)
  24.    (entdel (car e))
  25.           ;; Write our default offset to registry
  26.    (setenv "MyOffsetProgram" (vl-princ-to-string off))
  27.    )
  28. )
  29. ;; SSHHHHH!!
  30. (princ)
  31. )
  32. (vl-load-com)
回复

使用道具 举报

56

主题

256

帖子

230

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
253
发表于 2022-7-5 16:07:03 | 显示全部楼层
我发现了我最初的问题。我做了:
  1. (defun c:ODEL nil (c:OFFSET_DELETE))
  2. (defun c:OFFSET_DELETE ( / )

创建两个命令提示,忘记变量。
 
是的,它按预期重新运行。
 
这就提出了一个问题。通过删除该变量,但脚本不会使用新值运行,这是我遇到的问题。
 
有没有办法记住下次运行时输入的偏移量?
 
我试着把这当成一个全球性的话题:
  1. (defun c:OFFSET_DELETE ( offset_dist / offset_dist obj_2_offset offset_side )

 
但是得到;错误:参数太少。
 
谢谢,伙计们。
回复

使用道具 举报

56

主题

256

帖子

230

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
253
发表于 2022-7-5 16:08:10 | 显示全部楼层
 
很酷,谢谢。我可以对拾取对象进行过滤,以过滤块等。
 
我试着让它工作,这样我就可以选择更多的实体。
  1. (progn ;; Offset object          
  2. (command "_.offset" off )
  3. (while (/= 0 (getvar 'cmdactive))
  4.         (command (car e) p pause)
  5.         (entdel (car e))
  6.         ;; Pick something to offset .. needs more error checking ( ie a block will bonk it )
  7.         (setq e (entsel (strcat "\nPick object to offset: ")))
  8.         ;; Pick a side to offset or use point in entsel
  9.         (setq p (cond ((getpoint "\nSide to offset on: "))
  10.                  ((cadr e))
  11.            )
  12.         )
  13.         (setenv "MyOffsetProgram" (vl-princ-to-string off))
  14. )
  15. )

 
但没有成功。
回复

使用道具 举报

56

主题

256

帖子

230

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
253
发表于 2022-7-5 16:13:40 | 显示全部楼层
使其在循环中工作,但只需要删除每次询问偏移距离的用户。
 
这是代码,直到我解决为止
 
  1. (defun c:ODEL nil (c:OFFSET_DELETE))
  2. (defun c:OFFSET_DELETE (/ e off p)
  3. ;; Get saved offset from registry or default to 1
  4. (setq off (atof (cond ((getenv "MyOffsetProgram"))
  5. ("1")
  6. )
  7. )
  8. )
  9. (while
  10. (if (and ;; Prompt for distance, if nil use default
  11. (setq off (cond ((getdist (strcat "\nOffset distance <" (vl-princ-to-string off) ">: ")))
  12.         (off)
  13.         )
  14. )
  15.         ;; Pick something to offset .. needs more error checking ( ie a block will bonk it )
  16.         (setq e (entsel (strcat "\nPick object to offset: ")))
  17.         ;; Pick a side to offset or use point in entsel
  18.         (setq p (cond ((getpoint "\nSide to offset on: "))
  19.                 ((cadr e))
  20.                 )
  21.         )
  22.         )
  23. (progn ;; Offset object
  24.         (while (command "_.offset" off (car e) p ""))
  25.         ;; Delete original (entdel won't **** the bed if the object is locked)
  26.         (entdel (car e))
  27.                 ;; Write our default offset to registry
  28.                 (setenv "MyOffsetProgram" (vl-princ-to-string off))
  29.                 )
  30. )
  31. )
  32. ;; SSHHHHH!!
  33. (princ)
  34. )
  35. (vl-load-com)
回复

使用道具 举报

106

主题

1万

帖子

101

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1299
发表于 2022-7-5 16:16:37 | 显示全部楼层
在While中包装Entsel不是“INSERT”,否则再次执行assoc 0是对象类型,或者如果执行转储并查看支持的方法,则Offset是支持的方法之一。有点像“has attributes”检查块是否具有属性。使用方法意味着不需要添加大量的对象检查。我会努力找到一些东西。
 
  1. Command: DUMPIT
  2. Select object: ; IAcadLine: AutoCAD Line Interface
  3. ; Methods supported:
  4. ; ..........
  5. ;   Offset (1)

 
  1. (setq ans "N")
  2. (while (/= ans "Y")
  3. (setq obj (vlax-ename->vla-object (car (entsel "\nPick object"))))
  4. (if (= (vlax-method-applicable-p obj "Offset") T)(setq ans  "Y")(alert "Not a object that can be offset\nplease pick again"))
  5. )

 
几乎忘记了这一点,我一直在使用它的一些代码,在任何时候你喜欢它跳过了输入偏移的需要,只需输入Oxxx,它会自动要求将一个对象偏移一个由O后面的数字定义的距离,唯一的怪癖是小数需要-而不是a。周期,例如O123是偏移123,它也做圆和圆角。
 
它是一个更大的代码集的一部分,因此将在发布之前进行裁剪和测试。
回复

使用道具 举报

56

主题

256

帖子

230

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
253
发表于 2022-7-5 16:17:55 | 显示全部楼层
这很酷。
 
我对其进行了修改,以便在未选择任何内容时不会失败。
 
  1. 13
回复

使用道具 举报

56

主题

256

帖子

230

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
253
发表于 2022-7-5 16:20:56 | 显示全部楼层
我今天才有机会看这个。
谢谢你们的帮助。
 
这是工作代码。比我预期的要快。
 
  1. 14
回复

使用道具 举报

39

主题

180

帖子

141

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
195
发表于 2022-7-5 16:25:11 | 显示全部楼层
3dwannab,
 
我想我不明白这个lisp例程的目的。如果我错了,请更正我的错误。但是AutoCAD中的“偏移”命令已经记住了偏移距离,直到您更改它,它还为您提供了删除选定对象的机会。我错过什么了吗?
 
谢谢
布瑞恩
回复

使用道具 举报

56

主题

256

帖子

230

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
253
发表于 2022-7-5 16:27:01 | 显示全部楼层
它删除原始对象。我知道在偏移量中有一个删除选项,但这需要两个额外的步骤。偏移>擦除>是>金额,而不是ODEL>金额
 
另外,练习LISP写作对我来说是一个挑战。
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-14 23:32 , Processed in 1.277707 second(s), 70 queries .

© 2020-2025 乐筑天下

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