29.07.2017 07:16    

cekirge66
merhaba hocalarım

tüm layer i offsetlemek ile ilgili bir lisp buldum ama seçmiş oldugum çizgilerin iki yönüne doğru offsetlemekte. ben sadece ekrana göre aşağı yönde ofsetlemesini ve ofsetlediği objelerin silinmesini istiyorum mümkün müdür ? yardımlarınız için şimdiden teşekkür ederim.


(defun c:osd ( / ss e )
(setq ofd (cond
((getdist (strcat "\nEnter Offset distance"
(if ofd (strcat " <" (rtos ofd) ">: ") ": ")
)))(ofd))
)
(if (setq ss (ssget ":L"))
(repeat (sslength ss)
(setq e (vlax-ename->vla-object (ssname ss 0)))
(if (vlax-method-applicable-p e 'Offset)
(mapcar '(lambda (o)
(vl-catch-all-error-p
(vl-catch-all-apply
'vla-offset (list e o))))(list ofd (- ofd)))
)
(ssdel (ssname ss 0) ss)))
(princ)
)

29.07.2017 08:17    

macros55
POLYLINE VE LINE aşağı ve yukarı offsetler ve orjinal hattı seçime bağlı siler veya saklar MOF1 aşağı ve sola MOF2 yukarı ve sağa (aşağı yukarı yatay ve açılı hatlar için, sola sağa dikyek olan hatlar için)


Kod:

;;MOF1
;;POLYLINES LINES  LEFT - BOTTOM
;; cizimokulu.com

(defun c:mof1 (/ plines ; selection set of polylines
       ext ; extrnal point
       dist ; distance to offset
       poly ; a polyline from plines
       plist ; the list of poly
       del ; polyline to delete
       int ; internal point
       i)
  (command "undo" "begin")
  (princ "select polylines")
  (setq plines (ssget)
i      0
ext    (getvar "limmax")
dist   (getdist "distance")
  )
  (repeat (sslength plines)
    (setq poly (ssname plines i))
    (setq plist (entget poly))
    (command "offset" dist poly ext "")
    ;(setq del (entlast)
    ;int (polar
    ;(cdr (assoc 10 (entget del)))
    ;(angle
    ;(cdr (assoc 10 (entget del)))
    ;(cdr (assoc 10 plist)))
    ;(* 2 (distance (cdr (assoc 10 plist))
    ;(cdr (assoc 10 (entget del)))))))
    ;(command "offset" dist poly int "")
    ;(entdel del)
    (setq i (1+ i))
  )
  (command "undo" "end")
  (if (= "Y"
  (strcase (getstring "\ndelete initial polylines? (Y/N)"))
      )
    (command "erase" plines "")
  )
)

;;MOF2
;;POLYLINES  LINES   RIGHT - TOP
;; cizimokulu.com

(defun c:mof2( / plines ; selection set of polylines
ext ; extrnal point
dist ; distance to offset
poly ; a polyline from plines
plist ; the list of poly
del ; polyline to delete
int ; internal point
i)
(command "undo" "begin")
(princ "select polylines")
(setq plines (ssget)
i 0
ext (getvar "limmax")
dist (getdist "distance"))
(repeat (sslength plines)
(setq poly (ssname plines i))
(setq plist (entget poly))
(command "offset" dist poly ext "")
(setq del (entlast)
int (polar
(cdr (assoc 10 (entget del)))
(angle
(cdr (assoc 10 (entget del)))
(cdr (assoc 10 plist)))
(* 2 (distance (cdr (assoc 10 plist))
(cdr (assoc 10 (entget del)))))))
(command "offset" dist poly int "")
(entdel del)
(setq i (1+ i)))
(command "undo" "end")
(if (= "Y" (strcase (getstring "\ndelete initial polylines? (Y/N)")))
(command "erase" plines ""))
)

macros55 (29.07.2017 10:29 GMT)

29.07.2017 09:58    

alumina
Alıntı
cekirge66 :

Secilen cizgileri asagi yonde ofsetleyerek siler.
Kod:

(defun c:oo (/ dc sl ds) (vl-load-com)
  (if (and (ssget '((0 . "line"))) (setq dc (vlax-get (vlax-get-acad-object)
        'activedocument) sl (vlax-get dc 'activeselectionset)
          ds (getdist "\nOffset dist:")))
    (progn (vla-startundomark dc)
      (vlax-map-collection sl '(lambda(a) (vlax-invoke a 'offset  (* (if (<= (/ pi 2)
        (vla-get-Angle a) (+ pi (/ pi 2))) 1 -1) ds)) (vla-delete a)))
      (vla-endundomark dc) (vla-delete sl)
    )
  ) (prin1)
)

29.07.2017 10:32    

cekirge66
minnettarım..

29.07.2017 20:27    

alumina
Alıntı
cekirge66 :

Bir gun ogrenmeye karar verirsen elinde kaynak olmasi icin biraz daha basitlestirilmis bir versiyonu..
Kod:

(defun c:ok (/ ds n) (vl-load-com)
  (if (and (ssget '((0 . "line"))) (setq ds (getdist "\nOffset dist:")))
    (progn (setvar 'cmdecho 0) (vl-cmdf "._undo" "be")
      (mapcar '(lambda(a) (vlax-invoke (setq n (vlax-ename->vla-object a)) 'offset
        (* (if (<= (/ pi 2) (vla-get-Angle n) (+ pi (/ pi 2))) 1 -1) ds))
          (entdel a)) (vl-remove-if 'listp (mapcar 'cadr (ssnamex (ssget "_P")))))
      (vl-cmdf "._undo" "e") (setvar 'cmdecho 1)
    )
  ) (prin1)
)

> 1 <
Copyright © 2004-2022 SQL: 1.182 saniye - Sorgu: 54 - Ortalama: 0.02189 saniye