jsowinski 发表于 2022-7-6 08:48:56

不客气。
 
当我发布代码时,我确实注意到了一些我错过的事情。
 
第一件事是更新此行:
(vl-cmdf "explode" (entlast) "")
 
你不需要在行尾加引号。只需删除它们。如果这对你不起作用,请告诉我。
 
你可以做的另一件事是在局部变量中添加*error*
(/ *error* CurLayer OffsetDist VlaObj sset num Ang Ptdist StartPt EndPt)
 
否则我希望这对你有用。

DANIEL 发表于 2022-7-6 08:51:11

可能想阅读代码发布指南jsowinski

SLW210 发表于 2022-7-6 08:54:57

代码发布指南

jsowinski 发表于 2022-7-6 08:57:54

谢谢你让我知道。

BrianTFC 发表于 2022-7-6 08:59:58

我唯一想知道的是,我们能在矩形偏移后分解它吗?

Lee Mac 发表于 2022-7-6 09:04:00

快速一:
 
(defun c:MyOffset ( / ent obj )
   (if
       (setq *dist*
         (cond
               (   (getdist
                     (strcat "\nSpecify Offset Distance"
                           (if *dist* (strcat " <" (rtos *dist*) ">: ") ": ")
                     )
                   )
               )
               (   *dist*   )
         )
       )
       (while
         (progn (setvar 'ERRNO 0) (setq ent (car (entsel "\nSelect LWPolyline: ")))
               (cond
                   (   (= 7 (getvar 'ERRNO))
                     (princ "\nMissed, try again.")
                   )
                   (   (eq 'ENAME (type ent))
                     (cond
                           (   (= 4 (logand 4 (cdr (assoc 70 (tblsearch "LAYER" (cdr (assoc 8 (entget ent))))))))
                               (princ "\nObject is on Locked Layer.")
                           )
                           (   (eq "LWPOLYLINE" (cdr (assoc 0 (entget ent))))
                               (foreach obj (vlax-invoke (setq obj (vlax-ename->vla-object ent)) 'explode)
                                 (vla-offset obj *dist*)
                               )
                               (vla-delete obj)
                               t
                           )
                           (   (princ "\nObject is not an LWPolyline.")   )
                     )
                   )
               )
         )
       )
   )
   (princ)
)
(vl-load-com) (princ)

BrianTFC 发表于 2022-7-6 09:07:31

谢谢,李

Lee Mac 发表于 2022-7-6 09:09:39

不用担心,它应该适用于所有LWD多段线,即使是具有圆弧段的多段线。

BrianTFC 发表于 2022-7-6 09:13:20

我需要一些帮助,这个例程是由jsowinski编写的,我添加了一条线来更改矩形层并将其分解,但它会将原始矩形保留在新线下。我需要分解原始矩形。任何帮助都将不胜感激。
 

(defun c:Offsetpline (/ *error* OffsetDist VlaObj sset num Ang Ptdist StartPt EndPt)
(vl-load-com)
(defun *error* (msg)
(princ)
); _end defun
(setq OffsetDist (getreal "\nEnter an offset distance: "))
(while (setq VlaObj (vlax-ename->vla-object (car (entsel "Select a Rectangle: "))))
(setq Startpt (vlax-curve-getPointAtParam VlaObj 1))
(setq Ang (+ (angle (vlax-curve-getStartPoint VlaObj)(vlax-curve-getPointAtParam VlaObj 1))(* (/ pi 180) 90)))
(setq PtDist (distance Startpt (vlax-curve-getPointAtParam VlaObj 2)))
(vlax-put-property vlaobj 'layer "Router - Green-V groove")
(vl-catch-all-apply 'vlax-invoke-method (list VlaObj 'explode))

(if (equal (polar Startpt Ang PtDist)(vlax-curve-getPointAtParam VlaObj 2) 1.0)
(vl-catch-all-apply 'vlax-invoke-method (list VlaObj 'Offset OffsetDist))
(vl-catch-all-apply 'vlax-invoke-method (list VlaObj 'Offset (- OffsetDist)))
); _end if

(setq VlaObj (vlax-ename->vla-object (entlast)))
(vl-catch-all-apply 'vlax-put (list VlaObj 'Layer "Router - Blue - Cuts"))
(vl-cmdf "explode" (entlast))
(setq sset (ssget "_P"))
(setq num -1)
(repeat (sslength sset)
(setq VlaObj (vlax-ename->vla-object (ssname sset (setq num (1+ num)))))
(setq StartPt (polar (vlax-get VlaObj 'StartPoint)(vlax-get VlaObj 'Angle) OffsetDist))
(vl-catch-all-apply 'vlax-put (list VlaObj 'StartPoint StartPt))
(setq EndPt (polar (vlax-get VlaObj 'EndPoint)(- (vlax-get VlaObj 'Angle) pi) OffsetDist))
(vl-catch-all-apply 'vlax-put (list VlaObj 'EndPoint EndPt))
); _end repeat
); _end while
(princ)
); _end defun

Lee Mac 发表于 2022-7-6 09:17:22

http://www.cadtutor.net/forum/showthread.php?66513-将矩形偏移为单独的线&p=455332&viewfull=1#post455332
页: 1 [2]
查看完整版本: 将矩形偏移为单独的