rajeshmuthu 发表于 2022-7-5 16:04:36

偏移命令w需要Lisp

有人能帮我吗?我需要lisp的两层变化与使用偏移命令。请看我下面的草图。。。这里有两层,即混凝土层和保护层。现在,当前层是混凝土层,我需要将50mm偏移到带有覆盖层的内部矩形(不需要手动更改层属性),但在完成偏移命令后,当前层应更改为旧层,即混凝土层。请帮帮我。。
 
30228

Tharwat 发表于 2022-7-5 16:10:40


 

(defun c:test (/ n ss p e)
;; Tharwat 27. Sep. 2011 ;;
(if
   (and (setq n (getdist "\n Specify the Offset Distance :"))
      (setq
          ss (ssget "_+.:S:L" '((0 . "*POLYLINE,*LINE,CIRCLE,ELLIPSE")))
      )
      (setq p (getpoint "\n Specify point :"))
   )
    (progn
      (command "_.offset" n ss "_non" p "")
      (setq e (entlast))
      (if (tblsearch "LAYER" "cover")
      (command "_.chprop" e "" "_layer" "cover" "")
      )
    )
    (princ)
)
(princ)
)

 
塔瓦特

Lt Dan's l 发表于 2022-7-5 16:17:02


(defun c:test ( / ss->lst pairpts revpl coverlayer concretelayer dist ss )
(vl-load-com)

(setq coverlayer "defpoints")
(setq concretelayer "0")

(defun ss->lst ( ss flag / id lst )
   (if (eq 'PICKSET (type ss))
   (repeat (setq id (sslength ss))
       (
         (lambda ( name )
         (setq lst
             (cons
               (if flag (vlax-ename->vla-object name)
               name
               )lst
             )
         )
         )(ssname ss (setq id (1- id)))
       )
   )
   )
)
(defun pairpts ( _list / l pt )
   (foreach x (reverse _list)
   (if pt
       (setq l (cons (cons x pt) l) pt nil)
       (setq pt (cons x pt))
   )
   ) l
)
(defun revpl ( vla-obj / catch openpl )
   (and (eq :vlax-false (setq openpl (vla-get-closed vla-obj)))
   (vla-put-closed vla-obj :vlax-true)
   )
   (setq catch
   (vl-catch-all-apply (function vlax-invoke)
       (list vla-obj
         'offset (vla-get-length vla-obj)
       )
   )
   )
   (and (eq :vlax-false openpl)
   (vla-put-closed vla-obj :vlax-false)
   )
   (if (vl-catch-all-error-p catch)
   (vlax-put vla-obj 'coordinates
       (apply (function append)
         (reverse
         (pairpts (vlax-get vla-obj 'coordinates))
         )
       )
   ) (and catch (vla-delete (car catch)))
   )
   vla-obj
)

(if (and (setq dist (getdist "\nSpecify distance to offset: "))
   (setq ss (ss->lst (ssget '((0 . "lwpolyline"))) t)))
   (foreach x ss
   (vla-put-layer x coverlayer)
   (vla-put-layer
       (car
         (vlax-invoke (revpl x)
         'offset dist
         )
       ) concretelayer
   )
   )
) (princ)
)

rajeshmuthu 发表于 2022-7-5 16:18:59

谢谢你的朋友。。。

rajeshmuthu 发表于 2022-7-5 16:22:53

谢谢朋友

fly3008cd 发表于 2022-7-5 16:28:40

这很好:拇指支撑:

Tharwat 发表于 2022-7-5 16:32:26

我想知道那个朋友是谁!!

BIGAL 发表于 2022-7-5 16:37:07

这可能有助于添加到Tharwats代码中
 
http://www.cadtutor.net/forum/showthread.php?62893-LISP-for-a-rectangle-inside-a-rectangle
 
两者的结合?

K Baden 发表于 2022-7-5 16:42:37

对于需要偏移的选定对象集,如何将偏移量预设为3’-0”,并将线型更改为DASHDOT,而不是更改新偏移线的图层?

BIGAL 发表于 2022-7-5 16:44:41

K Baden从上面看一下这些代码,它有你想要的所有答案,是时候试试你的lisp技能了。
 

(setq dist
(vla-put-layer look at 2nd one
页: [1] 2
查看完整版本: 偏移命令w需要Lisp