乐筑天下

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

[编程交流] 需要现有offse的帮助

[复制链接]

48

主题

304

帖子

256

银币

后起之秀

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

铜币
240
发表于 2022-7-5 20:11:47 | 显示全部楼层 |阅读模式
以前通过用户名Kent Cooper找到此lisp。
 
lisp例程将允许在两侧偏移用户输入的距离,并能够连接两侧的端点,使其成为一个对象。
 
有人能帮我修改一下,使两端在连接之前也延伸到与偏移相同的距离吗。
 
谢谢
 
  1. ;;  OffsetBothSidesJoin.lsp [command name: OBSJ]
  2. ;;  To Offset the same object to Both Sides at the same distance, and
  3. ;;    if open-ended, Join the resulting objects with PEDIT.
  4. ;;  On first use, offers regular Offset command's default distance,
  5. ;;    but only if numerical [not "Through"].
  6. ;;  Remembers specified offset distance, separately from regular
  7. ;;    Offset command's default, and offers as default on later use.
  8. ;;  Kent Cooper, 21 March 2014
  9. ;
  10. (defun C:OBSJ (/ osd disttemp obj); = Offset to Both Sides
  11. ;
  12. (setq osd (getvar 'offsetdist))
  13. (setvar 'peditaccept 1)
  14. ;
  15. (if *obsjdist (initget 6) (initget 7))
  16.    ; no 0, no negative, no Enter on first use
  17. (setq
  18.    disttemp
  19.      (getdist
  20.        (strcat
  21.          "\nBoth-sides-offset distance"
  22.          (strcat
  23.            (if (or *obsjdist (> osd 0))
  24.              (strcat ; then - construct default
  25.                " <"
  26.                (if *obsjdist
  27.                  (rtos *obsjdist)
  28.                  (rtos osd)
  29.                ); end if
  30.                ">"
  31.              ); end strcat
  32.              "" ; else - no default offered on first use if Offset's is Through
  33.            ); end if
  34.          ); end strcat
  35.          ": "
  36.        ); end strcat
  37.      ); end getdist
  38.    *obsjdist
  39.      (cond
  40.        (disttemp); User specified something other than Enter - use it
  41.        (*obsjdist); Enter with prior value set - use that
  42.        ((> osd 0) osd)
  43.          ; Enter on first use with non-Through Offset default - use that
  44.      ); end cond & *obsjdist
  45. ); end setq
  46. ;
  47. (while T
  48.    (if
  49.      (setq obj
  50.        (vlax-ename->vla-object
  51.          (car (entsel "\nSelect object to Offset to Both Sides [Esc to exit]: "))
  52.        ); end vlax-...
  53.      ); end setq
  54.      (progn
  55.        (vla-offset obj *obsjdist)
  56.        (setq ent1 (entlast))
  57.        (vla-offset obj (- *obsjdist))
  58.        (if (not (vlax-curve-isClosed obj)); e.g. Line, Arc, open Polyline
  59.          (command "_.pedit" "_m" ent1 (entlast) "" "_j" "_j" "_b" (* *obsjdist 2.5) "")
  60.        ); if
  61.      ); end progn
  62.    ); end if
  63. ); end while
  64. ;
  65. (princ)
  66. ); end defun
  67. (prompt "Type OBSJ to Offset to Both Sides by the same distance and Join if possible.")
回复

使用道具 举报

24

主题

1265

帖子

1028

银币

后起之秀

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

铜币
362
发表于 2022-7-5 20:40:38 | 显示全部楼层
 
Kent经常在Autodesk customization论坛上发表文章。如果你在这里没有收到回复,我打赌如果你在那里发帖,他会帮你的。
回复

使用道具 举报

106

主题

1万

帖子

101

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1299
发表于 2022-7-5 20:41:50 | 显示全部楼层
可能的解决方法是偏移0.00000001并连接记住此对象(setq obj(entlast))然后偏移99.9999999擦除obj。手动测试需要将entlast添加到代码0.001,然后添加到50
回复

使用道具 举报

48

主题

304

帖子

256

银币

后起之秀

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

铜币
240
发表于 2022-7-5 21:11:30 | 显示全部楼层
 
我已经PM了他&碰巧他为另一个需要类似我的查询的用户提供了另一个lisp。我试过了,但由于他强调的一些限制,我没有成功。
 
但这很好,因为当前代码有一个变通方法。我只需要偏移比我需要的更小,然后使用法线偏移,这样端点就会更长。一个额外的步骤,但我可以接受。
 
谢谢
回复

使用道具 举报

48

主题

304

帖子

256

银币

后起之秀

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

铜币
240
发表于 2022-7-5 21:16:52 | 显示全部楼层
 
查看代码,但没有看到任何“(setq obj(entlast))”?
 
但是很好,因为我将使用变通方法。
 
谢谢
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-11 09:06 , Processed in 0.475217 second(s), 62 queries .

© 2020-2025 乐筑天下

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