hfghdfg 发表于 2022-7-5 23:50:02

Autocad lisp需要帮助!

 
我正忙于这个项目,所以我没有时间自己写这个lisp,因为我在这方面没有任何经验,所以如果有人能帮我的话,那就太好了。无论如何,我有很多在autocad中绘制的地块,我需要做的是修剪所有多段线端点和交点,并在中间在中间。我手动这样做:
-首先,我在多段线的端点和交点上画圆(半径必须为0.5)
-然后我修剪圆内的所有线
-然后在圆心插入一个点,最后删除圆。
 
底部还有一张图片,显示了过程的第一个和最后一个阶段。
 
如果有人知道Lisp程序可以做到这一点,或者有时间写一个,这将对我有很大帮助。

Tiger 发表于 2022-7-6 00:10:30

大家好,欢迎来到论坛!
 
我完全相信这里的Lisp程序大师,但直到他们醒来:
 
-break lisp-要用所有其他行打断所有行,请在此处找到它:http://www.theswamp.org/index.php?topic=10370.0(需要是会员才能使用链接)
-ptmanager-要在所有端点上插入一个圆和一个点,请在此处找到它:http://www.lee-mac.com/ptmanager.html
 
但我还没有想出如何修剪圆内的所有东西。。。

fixo 发表于 2022-7-6 00:25:14

欢迎加入,
请上传带有“之前”和“之后”情况的样本图纸,
只有几个包裹

SLW210 发表于 2022-7-6 00:37:47

为什么不使用一个具有覆盖或实体图案填充的块,颜色为255255?

ReMark 发表于 2022-7-6 00:44:51

你面临什么样的最后期限?

ymg3 发表于 2022-7-6 01:01:03

假设它是多段线,下面将在每个顶点插入一个30边的多边形区域覆盖。然后在中心插入一个点。
 
例程通过调用作为Express工具一部分的tframes来关闭擦除帧。
 
ymg公司
 

;; Polygonal Wipeout-Lee Mac                                              ;
;; Creates an n-sided Polygonal Wipeout with the given center (UCS) & radius;
;;                                                                            ;
;; Modified by ymg                                                            ;

(defun pwipeout ( cen rad n / ang inc lst )
   (setq inc (/ pi n 0.5)
         ang (* (/ pi 2) -1)
   )
   (repeat n
       (setq lst (cons (list 14 (* 0.5 (cos ang)) (* 0.5 (sin ang))) lst)
             ang (+ ang inc)
       )
   )
   (entmakex
       (append
         (list
               (cons 0 "WIPEOUT")
               (cons 100 "AcDbEntity")
               (cons 100 "AcDbWipeout")
               (cons 10 (trans (mapcar '- cen (list rad rad)) 1 0))
               (cons 11 (trans (list (+ rad rad) 0.0) 1 0 t))
               (cons 12 (trans (list 0.0 (+ rad rad)) 1 0 t))
               (cons 280 1)
               (cons 71 2)
      (cons 91 (1+ (length lst)))
         )
         (cons (last lst) lst)
       )
   )
)

;;; listpol (gile)                                                            ;
;;; Returns the vertices list of any type of polyline (WCS coordinates)       ;
;;;                                                                           ;
;;; Argument                                                                  ;
;;; pl : a polyline (ename or vla-object)                                     ;

(defun listpol        (pl / pa pt lst)
(vl-load-com)
(setq        pa (if (vlax-curve-IsClosed pl)
      (vlax-curve-getEndParam pl)
      (1+ (vlax-curve-getEndParam pl))
   )
)
(while (setq pt (vlax-curve-getPointAtParam pl (setq pa (1- pa))))
   (setq lst (cons (trans pt 0 1 ) lst))
)
)

;; By Jason Piercey                                              ;
;; Returns t if wipeouts frames are turned off                   ;
(defun frameOff? ()
(and
   (setq Data (dictsearch (namedobjdict) "ACAD_WIPEOUT_VARS"))
   (zerop (cdr (assoc 70 Data)))
)
)

(defun c:test ()
    ; Initializing wipeouts                     ;
    (vl-cmdf "_WIPEOUT" '(0 0) '(5 5) '(8"")
    (if (not (frameoff?)) (c:tframes))
    (entdel (entlast))
      
    (princ "\nSelect a Polyline: ")
    (setq en (entsel))
    (while(not (wcmatch (cdr (assoc 0 (entget (car en)))) "*POLYLINE"))
(princ "\nThe entity selected must be a POLYLINE ...")
(setq en (entsel))
    )
    (setq ent (car en)
    pl (listpol ent)
    )
    (foreach p pl
       (pwipeout p 0.5 30)
       (vl-cmdf "_POINT" p)
    )
)
页: [1]
查看完整版本: Autocad lisp需要帮助!