LISP2LEARN 发表于 2022-7-6 09:01:55

关于偏移量的帮助

大家好,
 
如何修复代码。我想偏移一条线,然后在两侧将结果线延长3英寸。由于当pt1和pt2上有一条线时,我在结果线上的端点上拾取点,因此也会延长该线。简而言之,我只想延长结果偏移线。我想使用entmod,但我想不出来。谢谢
 
(defun C:test (/ ol ent pt pt1 pt2)

(while
(and
   (setq ent (car (entsel "\nSelect a line to offset or <exit>:")))
   (setq pt (getpoint "\nSpecify point on side to offset:"))
   )
(command "._offset" 3 ent "_non" pt "")
(setq ol (entlast))
;(command "._change" ol "" "_P" "_LA" "no_plot" "")


(setq pt1 (cdr(assoc 10 (entget ol))))
(command "_.lengthen" "_de" "3" "_non" pt1 "")

(setq pt2 (cdr(assoc 11(entget ol))))
(command "_.lengthen" "_de" "3" "_non" pt2 "")

(princ)
)
)

Lee Mac 发表于 2022-7-6 09:07:47

如果您使用的是线图元,我倾向于通过计算新线图元的端点并使用entmake来执行偏移和加长操作。
 
以下示例也适用于所有UCS/视图:
 
(defun c:test ( / a b c d e f l o p )

   (setq o 3.0) ;; Offset

   (while
       (progn (setvar 'ERRNO 0) (setq e (car (entsel "\nSelect a Line to Offset: ")))
         (cond
               (   (= 7 (getvar 'ERRNO))
                   (princ "\nMissed, Try Again.")
               )
               (   (not e)
                   nil
               )
               (   (not (eq "LINE" (cdr (assoc 0 (setq l (entget e))))))
                   (princ "\nPlease Select a Line.")
               )
               (   (setq p (getpoint "\nSpecify Side to Offset: "))
                   (setq a (trans (cdr (assoc 10 l)) 0 1)
                         b (trans (cdr (assoc 11 l)) 0 1)
                         c (angle a b)
                         d (+ c (/ pi 2.0))
                         f (if (minusp (cos (- d (angle a p)))) - +)
                   )
                   (entmakex
                     (list
                           (cons 0 "LINE")
                           (cons 10 (trans (polar (polar a d (f o)) c (- o)) 1 0))
                           (cons 11 (trans (polar (polar b d (f o)) c    o ) 1 0))
                     )
                   )
               )
         )
       )
   )
   (princ)
)

LISP2LEARN 发表于 2022-7-6 09:08:34

好的,谢谢,我没有这么说。我总是在创建实体后修改它。我会记住这一点。
 
 
最后,我如何一次拾取多条线,以便在一侧偏移多条线,如:
 
(setq e (ssget ":L" '((0 . "line"))))
 
如果有很多麻烦,不用麻烦了,你已经帮了我很多了。
 
再次感谢李!

Lee Mac 发表于 2022-7-6 09:12:16

 
您可以使用选择中的第一条线来测量要偏移到哪一侧,但由于这些线可以有任何方向,您可能会收到每条线的不同结果。

LISP2LEARN 发表于 2022-7-6 09:15:15

我所有的线都是平行的,所以我只需要选择所有的垂直线、水平线或对角线,然后偏移这些线。

Lee Mac 发表于 2022-7-6 09:20:33

这将使用相同的方法,offet由相对于选择中第一行的点确定:
 
(defun c:test ( / a b c d f i l o p s )

   (setq o 3.0) ;; Offset

   (if
       (and
         (setq s (ssget '((0 . "LINE"))))
         (progn
               (redraw (ssname s 0) 3)
               (setq p (getpoint "\nSpecify Side of Highlighted Line to Offset: "))
               (redraw (ssname s 0) 4)
               p
         )
       )
       (progn
         (setq l (entget (ssname s 0))
               a (trans (cdr (assoc 10 l)) 0 1)
               b (trans (cdr (assoc 11 l)) 0 1)
               c (angle a b)
               d (+ c (/ pi 2.0))
               f (if (minusp (cos (- d (angle a p)))) - +)
         )
         (repeat (setq i (sslength s))
               (setq l (entget (ssname s (setq i (1- i))))
                     a (trans (cdr (assoc 10 l)) 0 1)
                     b (trans (cdr (assoc 11 l)) 0 1)
                     c (angle a b)
                     d (+ c (/ pi 2.0))
               )
               (entmakex
                   (list
                     (cons 0 "LINE")
                     (cons 10 (trans (polar (polar a d (f o)) c (- o)) 1 0))
                     (cons 11 (trans (polar (polar b d (f o)) c    o ) 1 0))
                   )
               )
         )
       )
   )
   (princ)
)

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

LISP2LEARN 发表于 2022-7-6 09:22:38

这很快。谢谢李。我会分解你的代码并从中学习。。。再次感谢。

alanjt 发表于 2022-7-6 09:25:32

英雄联盟

alanjt 发表于 2022-7-6 09:32:08

.................

ketxu 发表于 2022-7-6 09:36:23

请告诉我“LOL”是什么意思
页: [1] 2
查看完整版本: 关于偏移量的帮助