eyal 发表于 2022-7-5 16:27:47

按p偏移构造线

大家好,
 
我有Ranjit的代码:
 

(defun c:edb () (c:ebd))
(defun c:ebd ( / *error* of undo doc ss ) ;Ekv Both
(defun *error* ( msg )
(and undo (vla-EndUndomark doc))
(or (wcmatch (strcase msg) "*BREAK,*CANCEL*,*EXIT*")
(princ (strcat "\n** Error: " msg " **")))
(princ))
(if (and (ssget '((0 . "ARC,CIRCLE,ELLIPSE,*LINE")))
(setq of (getdist "\nSpecify Offset Distance: ")))
(progn
(setq undo (not (vla-StartUndomark (setq doc (vla-get-ActiveDocument (vlax-get-acad-object))))))
(vlax-for obj (setq ss (vla-get-ActiveSelectionSet doc))
(mapcar (function (lambda (o) (vl-catch-all-apply (function vla-offset) (list obj o))))
(list of (- of)))(vla-delete obj))
(setq undo (vla-EndUndoMark doc))))
(princ)
)

如果单击一条线并指定一个距离,它会在两侧绘制具有指定距离的偏移线,并删除原始线。
 
我想更改代码,使其保留直线,但将其更改为中心线,另一层称为红色中心线。
它将绘制构造线,而不是绘制线条。
 
http://imgur.com/a/J1q0p

ccowgill 发表于 2022-7-5 17:05:38

我来看看李·麦克的双偏移命令。我知道它有选项,但不确定它是否有更改中心线层的选项。
http://www.lee-mac.com/doubleoffset.html

eyal 发表于 2022-7-5 17:21:58

你好,我是科吉尔,
 
这非常接近我需要的,但我需要偏移线-构造线,
我选的那条线是红色的图层构造线,
所有这一切都只需要一个命令,这意味着当拾取线时,它会将其更改为一个新层,名为红色的构造线,线型将为虚点(轴线)。
 
有了这段代码,我想让我的工作更快。
提前谢谢你。

BIGAL 发表于 2022-7-5 17:35:20

从头开始重新编码可能更容易,如果您查看构造线的工作方式,它会要求拾取obj点,然后是偏移量。所以你可以选择一条线的中心,计算出中心点左右偏移的平方,然后用这个点。需要检查对象的圆弧和圆,但想法相同。
 

(defun c:2xl ( / obj pt1 pt2 start end off)
(setq oldaunits (getvar "aunits"))
(setq obj (vlax-ename->vla-object (car (entsel "\nPick object"))))
(setq start (vlax-safearray->list (vlax-variant-value(vla-get-startpoint obj))))
(setq end (vlax-safearray->list (vlax-variant-value (vla-get-endpoint obj))))
(setvar "aunits" 3)
(setq pt (polar start (angle start end)(/ (distance start end) 2.0)))
(vla-put-layer obj "Centerline")
(setvar "clayer" "Construction")
(setq off (getdist "Enter offset"))
(setq pt1 (polar pt (+ (angle start end)(/ pi 2.0)) off))
(setq pt2 (polar pt (- (angle start end)(/ pi 2.0)) off))
(command "constructionline" pt pt1 "" "")
(command "constructionline" pt pt2 "" "")
(setvar "Aunits" oldaunits)
)
(c:2x1)
页: [1]
查看完整版本: 按p偏移构造线