乐筑天下

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

[编程交流] 关于偏移量的帮助

[复制链接]

23

主题

89

帖子

66

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
115
发表于 2022-7-6 09:01:55 | 显示全部楼层 |阅读模式
大家好,
 
如何修复代码。我想偏移一条线,然后在两侧将结果线延长3英寸。由于当pt1和pt2上有一条线时,我在结果线上的端点上拾取点,因此也会延长该线。简而言之,我只想延长结果偏移线。我想使用entmod,但我想不出来。谢谢
 
  1. (defun C:test (/ ol ent pt pt1 pt2)
  2. (while
  3.   (and
  4.      (setq ent (car (entsel "\nSelect a line to offset or <exit>:")))
  5.      (setq pt (getpoint "\nSpecify point on side to offset:"))
  6.    )
  7. (command "._offset" 3 ent "_non" pt "")
  8. (setq ol (entlast))
  9. ;(command "._change" ol "" "_P" "_LA" "no_plot" "")
  10. (setq pt1 (cdr(assoc 10 (entget ol))))
  11. (command "_.lengthen" "_de" "3" "_non" pt1 "")
  12. (setq pt2 (cdr(assoc 11(entget ol))))
  13. (command "_.lengthen" "_de" "3" "_non" pt2 "")
  14. (princ)
  15. )
  16. )
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 09:07:47 | 显示全部楼层
如果您使用的是线图元,我倾向于通过计算新线图元的端点并使用entmake来执行偏移和加长操作。
 
以下示例也适用于所有UCS/视图:
 
  1. (defun c:test ( / a b c d e f l o p )
  2.    (setq o 3.0) ;; Offset
  3.    (while
  4.        (progn (setvar 'ERRNO 0) (setq e (car (entsel "\nSelect a Line to Offset: ")))
  5.            (cond
  6.                (   (= 7 (getvar 'ERRNO))
  7.                    (princ "\nMissed, Try Again.")
  8.                )
  9.                (   (not e)
  10.                    nil
  11.                )
  12.                (   (not (eq "LINE" (cdr (assoc 0 (setq l (entget e))))))
  13.                    (princ "\nPlease Select a Line.")
  14.                )
  15.                (   (setq p (getpoint "\nSpecify Side to Offset: "))
  16.                    (setq a (trans (cdr (assoc 10 l)) 0 1)
  17.                          b (trans (cdr (assoc 11 l)) 0 1)
  18.                          c (angle a b)
  19.                          d (+ c (/ pi 2.0))
  20.                          f (if (minusp (cos (- d (angle a p)))) - +)
  21.                    )
  22.                    (entmakex
  23.                        (list
  24.                            (cons 0 "LINE")
  25.                            (cons 10 (trans (polar (polar a d (f o)) c (- o)) 1 0))
  26.                            (cons 11 (trans (polar (polar b d (f o)) c    o ) 1 0))
  27.                        )
  28.                    )
  29.                )
  30.            )
  31.        )
  32.    )
  33.    (princ)
  34. )
回复

使用道具 举报

23

主题

89

帖子

66

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
115
发表于 2022-7-6 09:08:34 | 显示全部楼层
好的,谢谢,我没有这么说。我总是在创建实体后修改它。我会记住这一点。
 
 
最后,我如何一次拾取多条线,以便在一侧偏移多条线,如:
 
  1. (setq e (ssget ":L" '((0 . "line"))))

 
如果有很多麻烦,不用麻烦了,你已经帮了我很多了。
 
再次感谢李!
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 09:12:16 | 显示全部楼层
 
您可以使用选择中的第一条线来测量要偏移到哪一侧,但由于这些线可以有任何方向,您可能会收到每条线的不同结果。
回复

使用道具 举报

23

主题

89

帖子

66

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
115
发表于 2022-7-6 09:15:15 | 显示全部楼层
我所有的线都是平行的,所以我只需要选择所有的垂直线、水平线或对角线,然后偏移这些线。
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 09:20:33 | 显示全部楼层
这将使用相同的方法,offet由相对于选择中第一行的点确定:
 
  1. (defun c:test ( / a b c d f i l o p s )
  2.    (setq o 3.0) ;; Offset
  3.    (if
  4.        (and
  5.            (setq s (ssget '((0 . "LINE"))))
  6.            (progn
  7.                (redraw (ssname s 0) 3)
  8.                (setq p (getpoint "\nSpecify Side of Highlighted Line to Offset: "))
  9.                (redraw (ssname s 0) 4)
  10.                p
  11.            )
  12.        )
  13.        (progn
  14.            (setq l (entget (ssname s 0))
  15.                  a (trans (cdr (assoc 10 l)) 0 1)
  16.                  b (trans (cdr (assoc 11 l)) 0 1)
  17.                  c (angle a b)
  18.                  d (+ c (/ pi 2.0))
  19.                  f (if (minusp (cos (- d (angle a p)))) - +)
  20.            )
  21.            (repeat (setq i (sslength s))
  22.                (setq l (entget (ssname s (setq i (1- i))))
  23.                      a (trans (cdr (assoc 10 l)) 0 1)
  24.                      b (trans (cdr (assoc 11 l)) 0 1)
  25.                      c (angle a b)
  26.                      d (+ c (/ pi 2.0))
  27.                )
  28.                (entmakex
  29.                    (list
  30.                        (cons 0 "LINE")
  31.                        (cons 10 (trans (polar (polar a d (f o)) c (- o)) 1 0))
  32.                        (cons 11 (trans (polar (polar b d (f o)) c    o ) 1 0))
  33.                    )
  34.                )
  35.            )
  36.        )
  37.    )
  38.    (princ)
  39. )

 
如果你对这个方法有任何疑问,请提问——我以为这是一个学习练习。
回复

使用道具 举报

23

主题

89

帖子

66

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
115
发表于 2022-7-6 09:22:38 | 显示全部楼层
这很快。谢谢李。我会分解你的代码并从中学习。。。再次感谢。
回复

使用道具 举报

54

主题

3755

帖子

3583

银币

后起之秀

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

铜币
438
发表于 2022-7-6 09:25:32 | 显示全部楼层
英雄联盟
回复

使用道具 举报

54

主题

3755

帖子

3583

银币

后起之秀

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

铜币
438
发表于 2022-7-6 09:32:08 | 显示全部楼层
.................
回复

使用道具 举报

22

主题

326

帖子

185

银币

后起之秀

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

铜币
243
发表于 2022-7-6 09:36:23 | 显示全部楼层
请告诉我“LOL”是什么意思
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-7 06:17 , Processed in 1.311132 second(s), 72 queries .

© 2020-2025 乐筑天下

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