关于偏移量的帮助
大家好,如何修复代码。我想偏移一条线,然后在两侧将结果线延长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)
)
) 如果您使用的是线图元,我倾向于通过计算新线图元的端点并使用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)
) 好的,谢谢,我没有这么说。我总是在创建实体后修改它。我会记住这一点。
最后,我如何一次拾取多条线,以便在一侧偏移多条线,如:
(setq e (ssget ":L" '((0 . "line"))))
如果有很多麻烦,不用麻烦了,你已经帮了我很多了。
再次感谢李!
您可以使用选择中的第一条线来测量要偏移到哪一侧,但由于这些线可以有任何方向,您可能会收到每条线的不同结果。 我所有的线都是平行的,所以我只需要选择所有的垂直线、水平线或对角线,然后偏移这些线。 这将使用相同的方法,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)
)
如果你对这个方法有任何疑问,请提问——我以为这是一个学习练习。 这很快。谢谢李。我会分解你的代码并从中学习。。。再次感谢。 英雄联盟 ................. 请告诉我“LOL”是什么意思
页:
[1]
2