nest1291 发表于 2022-7-5 15:43:21

嗨~谢谢你的好意。谢谢您。
 
我还有一个问题。
 
我必须将除原始多边形之外的层更改为我创建的特定层。
 
如何更改除原始多边形外的层生成实体?
 
谢谢你的帮助。

marko_ribar 发表于 2022-7-5 15:46:07

您是指新创建的直线和圆弧(在当前活动层中创建),并将原始多段线保留在其当前指定的层中,该多段线已放置在其中?

BrianTFC 发表于 2022-7-5 15:50:26

Marko_ribar,
 
那么默认值对lisp有什么作用呢?我将其添加到代码中,以使新行更改到不同的层。
 
(entmake (vl-list* '(0 . "LINE") (cons 10 (trans a e 0)) (cons 11 (trans b e 0)) p))
      (vl-catch-all-apply 'vlax-put (list (vlax-ename->vla-object (entlast)) 'Layer "Router - Blue - Cuts"))

marko_ribar 发表于 2022-7-5 15:52:19

创建新图层并使其成为当前图层,同时根据需要更改当前颜色,最后应用此版本:
 
请注意,现在您不需要(LM:defaultprops)。。。
 
HTH。,M、 R。

hanhphuc 发表于 2022-7-5 15:55:12

 
感谢mods,如果内部偏移距离大于弧半径,您的评论将指导我们修复错误
 
更新v1.1-检查较大半径
感谢李的子功能


;; arc offset is always in direction so that new arc is larger than its reference arced segment of lwpolyline - M.R

(defun c:offs ( / LM:listclockwise-p LM:defaultprops xy ob l i s p e d )

(vl-load-com)

;; List Clockwise-p - Lee Mac
;; Returns T if the point list is clockwise oriented

(defun LM:listclockwise-p ( lst )
   (minusp
   (apply '+
       (mapcar
         '(lambda( a b ) (- (* (car b) (cadr a)) (* (car a) (cadr b)))
         )
         lst (cons (last lst) lst)
       )
   )
   )
)

;; Default Properties-Lee Mac
;; Returns a list of DXF properties for the supplied DXF data,
;; substituting default values for absent DXF groups

(defun LM:defaultprops ( enx )
   (mapcar '(lambda ( x ) (cond ((assoc (car x) enx)) ( x )))
    '(
       (006 . "BYLAYER")
       (008 . "0")
       (039 . 0.0)
       (048 . 1.0)
       (062 . 256)
       (370 . -1)
   )
   )
)

(prompt "\nSelect closed lwpolylines...")
(and (setq s (ssget '((0 . "LWPOLYLINE") (-4 . "&=") (70 . 1))))
   (progn (initget 7)
   (setq xy '(( l )(if l (cons (list (car l)(cadr l)) (xy (cddr l)))))
            d (getdist "\nPick or specify offset : ")
   )
   )
      
   (repeat (setq i (sslength s))
   (setq e(ssname s (setq i (1- i)))
         ob (vlax-ename->vla-object e)
         p(LM:defaultprops (entget e))
         l(xy (vlax-get ob 'coordinates))
   )
   
   (mapcar
       '(lambda ( x )
          (vl-catch-all-apply 'mapcar
    (cons
               '(lambda ( f / o b r) (setq f (eval (read (strcat "vlax-curve-get" f)))
                                 r ( (if (LM:listclockwise-p l)
                                       +
                                       -
                                       )
                                       d
                                    )
                              o (vl-catch-all-apply 'vlax-invoke (list x 'offset r ) )
                       o (if (listp o)(car o) o )
                                )
          
             (if (and (= (vla-get-ObjectName x) "AcDbArc")
               (setq b (vl-catch-all-apply 'vlax-invoke (list x 'offset (- r)))
                       b (if (listp b) (car b) b))
                  )
             
              (if
               (apply
                          '>
                          (mapcar
                          '(lambda (a / ) (atof (vl-princ-to-string (vl-catch-all-apply 'vlax-get (list a 'Radius)))))
                             (list x b )
                          )

                  )
             
                 (vla-erase b)
                 (progn (vla-erase o)(setq o b))
             )

              )

          (entmakex (vl-list* '(0 . "LINE") (cons 10 (f x)) (cons 11 (f o)) p))

             )
             
                '(("startpoint" "endpoint"))
       )
   
            ); catch
   
         (vla-erase x)
       )

       (vlax-invoke ob 'explode)

   ) ;mapcar
   
   ) ;repeat
) ;and
(princ)
)

marko_ribar 发表于 2022-7-5 15:58:37

我修改了版本,加入了Truecolors。。。

nest1291 发表于 2022-7-5 16:02:32

 
谢谢你的帮助~

nest1291 发表于 2022-7-5 16:06:31

 
谢谢你的帮助~

BrianTFC 发表于 2022-7-5 16:07:55

马尔科·里巴
 
我知道这本书最初是李写的,我并不是想从他那里拿走它,我只是为了我需要的东西而修改,但我需要一些帮助。如果有人能帮我,我将不胜感激。请看红色的评论。
 
(defun c:segoff ( / a b d e i l n p s v x y z )
   (initget 6)
   (if (and (setq d (getdist "\nSpecify offset: "))
            (setq s (ssget '((0 . "LWPOLYLINE") (-4 . "&=") (70 . 1) (-4 . "<NOT") (-4 . "<>") (42 . 0.0) (-4 . "NOT>"))))
   (setq num -1)
       )
(repeat (setq i (sslength s))
(setq VlaObj (vlax-ename->vla-object (ssname s (setq num (1+ num)))))
(vl-catch-all-apply 'vlax-put (list VlaObj 'Layer "LAYER NAME"))
         (setq i (1- i)
               e (ssname s i)
               x (entget e)
               p (LM:defaultprops x)
               z (list (cdr (assoc 38 x)))
               l nil
         )
         (while (setq v (assoc 10 x))
               (setq l (cons (append (cdr v) z) l)
                     x (cdr (member v x))
               )
         )
         (setq n (/ pi (if (LM:listclockwise-p l) 2 -2)))
         (mapcar
            '(lambda ( x y / a b )
                   (setq a (+ (angle x y) n)
                         b (list x (polar x a d) (polar y a d) y)
                   )
                   (mapcar
                      '(lambda ( a b )
      (entmake (vl-list* '(0 . "LINE") (cons 10 (trans a e 0)) (cons 11 (trans b e 0)) p))
      (vl-catch-all-apply 'vlax-put (list (vlax-ename->vla-object (entlast)) 'Layer "LAYER NAME"))
       )
                     b (cdr b)
                  )
               )
               (cons (last l) l) l
         )
       )
   )
(setq obj (vl-catch-all-apply 'vlax-invoke (list VlaObj 'explode))) ;;; I'm trying to figure out how to collect the lines this creates to use on the next step

(setq objLst(mapcar 'vlax-ename->vla-object (vl-remove-if 'listp (mapcar 'cadr(ssnamex obj)))))
(vla-StartUndoMark (setq actDoc (vla-get-ActiveDocument (vlax-get-acad-object))))
(foreach ln objLst (vlax-put ln 'startpoint (polar (vlax-get ln 'startpoint)(vlax-get ln 'angle)(- d))))
(foreach ln objLst (vlax-put ln 'endpoint (polar (vlax-get ln 'endpoint)(vlax-get ln 'angle)d)))
(vla-EndUndoMark actDoc)

(vl-catch-all-apply 'vla-delete (list VlaObj))
   (princ)
)
;; List Clockwise-p - Lee Mac
;; Returns T if the point list is clockwise oriented
(defun LM:listclockwise-p ( lst )
   (minusp
       (apply '+
         (mapcar
               (function
                   (lambda ( a b )
                     (- (* (car b) (cadr a)) (* (car a) (cadr b)))
                   )
               )
               lst (cons (last lst) lst)
         )
       )
   )
)
;; Default Properties-Lee Mac
;; Returns a list of DXF properties for the supplied DXF data,
;; substituting default values for absent DXF groups
(defun LM:defaultprops ( enx )
   (mapcar '(lambda ( x ) (cond ((assoc (car x) enx)) ( x )))
      '(
         (006 . "BYLAYER")
         (008 . "TOP")
         (039 . 0.0)
         (048 . 1.0)
         (062 . 256)
         (370 . -1)
       )
   )
)
(princ)
 
 
谢谢
布瑞恩

marko_ribar 发表于 2022-7-5 16:12:51

@布莱恩,
 
 
要在vla爆炸后收集实体,我建议您使用类似的技术:
 
 
6
页: 1 [2]
查看完整版本: 喂~,你能看看这个吗