Chuyển đến nội dung
Diễn đàn CADViet
banmethuoc1112

vẽ line or polyline trim

Các bài được khuyến nghị

hi all,

 

 

Hiện tại mình có một vấn đề là :

   => làm sao khi mình vẽ một line hoặc polyline thì các đoạn thằng bên trong hình chữ nhật được trim đi như file cad đính kèm trong đường dẫn sau :

        http://www.mediafire.com/download/ktmx82h701ebo90/S+CONC.dwg

 

do trình độ hạn chế nên rất mong nhận sự được giúp đỡ của mọi người trên diễn đàn,tks all

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

có lẽ do bản cad này đời cao hơn nên dành cho các cao thủ vậy, muốn nghía thử file này lại phải cài cad chán thật....   :D

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

có lẽ do bản cad này đời cao hơn nên dành cho các cao thủ vậy, muốn nghía thử file này lại phải cài cad chán thật....   :D

 

Đây là hình minh họa của chủ thớt:

 

39678_sdg.png

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

hi all,

 

 

Hiện tại mình có một vấn đề là :

   => làm sao khi mình vẽ một line hoặc polyline thì các đoạn thằng bên trong hình chữ nhật được trim đi như file cad đính kèm trong đường dẫn sau :

        http://www.mediafire.com/download/ktmx82h701ebo90/S+CONC.dwg

 

do trình độ hạn chế nên rất mong nhận sự được giúp đỡ của mọi người trên diễn đàn,tks all

Bạn có thể dùng wipeout cho đối tượng block đó để che phần line chạy qua block, như thế thì không cần phải cắt đường line của bạn mà nó vẫn bị mất.

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

thank conghoa , hic nhưng mình muốn nó được cắt đi luôn chứ ko ẩn đi, nhờ a,e giúp nếu được xin hậu ta hic :D

Dùng lệnh trim không được à ?

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

thank conghoa , hic nhưng mình muốn nó được cắt đi luôn chứ ko ẩn đi, nhờ a,e giúp nếu được xin hậu ta hic :D

http://www.lee-mac.com/autoblockbreak.html

Bạn có thể tham khảo cái này, dựa vào đây để đưa ý tưởng và có thể nhờ các cao thủ lisp trên Cadviet giúp sức.

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

Mình mới học Lisp nên bon chen tí để học hỏi them

 

  • Code đây bạn (Khi chon vùng nhớ quét chon cả PL màu hồng + hình chữ nhật đỏ nữa nha)

 

(defun c:TPL (/ lstpt osm p1 p2 plcn plt sspl)
(command "Undo" "BE")
(setq osm (getvar "OSMODE" ))
(prompt "\nQu\U+00E9t Ch\U+1ECDn V\U+00F9ng Ch\U+1EE9a Polyline C\U+1EA7n Trim:")
(setq sspl (acet-ss-to-list (ssget '((0 . "LWPOLYLINE"))))
plt (car (vl-remove-if-not '(lambda(x) (wcmatch (acet-dxf 8 (entget x)) "textcad1183")) sspl))
plcn (vl-remove plt sspl))
(setvar "OSMODE" 0)
(foreach x plcn
(setq lstpt (acet-geom-intersectwith x plt 0)
p1 (car lstpt)
p2 (cadr lstpt))
(command ".break" plt p1 p2)
)
(setvar "OSMODE" osm)
(command "Undo" "END")
(princ)
)
  • Em có ý tưởng:Chọn 1 Polyline màu hồng thì sẽ chon được tất cả PLine mà có điểm giao với Pline màu hồng này.Nếu đường thẳng thì em dùng chế độ "Fence" trong bộ chon SSget chon được các HCN này.Nhưng không biết nếu đường gấp khúc thì chon thế nào ạ??...Anh chị có thể code vài dòng cho em thao khảo với được không ạ

Em cảm ơn.

 

P/s:Mình nghĩ bạn dùng lệnh Break còn nhanh hơn á^^

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

Thank  Tr.CongSon và mọi  người trong diễn đàn nhiều, hi cái truorng hợp của mình là các hình chữ nhật luôn có sẵn , và ta chỉ cần vẽ mới polyline qua nó, sau đó trim đi

 

ð  Mong tiếp tục nhận được sự giúp đỡ của mọi người nhé, tks

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

1. Qui luật của các hình chữ nhật như thế nào?

2. Quy luật vẽ các Line như thế nào?

 

 

3. tôi thấy trong file bạn gửi, mỗi hình chữ nhật là 2 pline trùng nhau.

4. tại sao không dùng block với những khối đối tượng lặp đi lặp lại như trong hình vẽ?

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

1. Qui luật của các hình chữ nhật như thế nào? => hình chữ nhật luôn thằng hàng với nhau, còn bề rộng có thể thay đổi

2. Quy luật vẽ các Line như thế nào? => cái polyline đucợ vẽ từ mép ngoài cùng bên trái đến mép ngoài cùng bên phải đó snowman.hms

 

hi  :D giúp mình nhé

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

1. Qui luật của các hình chữ nhật như thế nào? => hình chữ nhật luôn thằng hàng với nhau, còn bề rộng có thể thay đổi

2. Quy luật vẽ các Line như thế nào? => cái polyline đucợ vẽ từ mép ngoài cùng bên trái đến mép ngoài cùng bên phải đó snowman.hms

 

hi  :D giúp mình nhé

Mép ngoài cùng thì có đi qua trung điểm cạnh hình chữ nhật không bạn????

Vậy ý tưởng viết Lisp: Vẽ Polyline từ Hình chữ nhật đầu tiên đến mép ngoài hình chữ nhật cuối cùng -->rồi tự trim bên trong Hình chữ nhật luôn^^

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

;;==============================================================;;
;;======================RECTANGLES CONNECT======================;;
;;==============================================================;;
(defun c:RCN (/ l s x y osm *error* _StartUndo _EndUndo _Acdoc)

(defun *error* (msg)
(setvar 'osmode osm)
(_EndUndo (_Acdoc))
(or (wcmatch (strcase msg) "*BREAK,*CANCEL*,*EXIT*")
(princ (strcat "\n** Error: " msg " **"))
)
(princ)
)

(defun _StartUndo (doc)
(_EndUndo doc)
(vla-startundomark doc)
)

(defun _EndUndo (doc)
(while (= 8 (logand 8 (getvar 'undoctl)))
(vla-endundomark doc)
)
)

(defun _Acdoc nil
(eval (list 'defun '_Acdoc 'nil (vla-get-activedocument (vlax-get-acad-object))))
(_Acdoc)
)
;;==============================================================;;

(if
(and (princ "\nSelect Rectangles...")
(setq s (ssget '((0 . "LWPOLYLINE") (70 . 1))))
(setq s (ss->lst s))
(setq l (vl-remove-if-not '(lambda (x) (Rectangle-p x)) s))
(setq
l (_Unique-Fuzz
(mapcar
'(lambda (x) (obj->lst (vlax-ename->vla-object x)))
l
)
1e-8
)
)
(setq l (vl-sort l '(lambda (a b) (< (caar a) (caar b)))))
)
(if (< 1 (setq len (length l)))
(progn
(setq osm (getvar 'osmode))
(setvar 'osmode 0)
(_StartUndo (_Acdoc))
(while (cadr l)
(setq x (car l)
y (cadr l)
l (cdr l)
)
(_Line (trans (caddr x) 1 0)
(trans (cadr y) 1 0)
)
)
)
)
)
(setvar 'osmode osm)
(_EndUndo (_Acdoc))
(princ)
)

;;==============================================================;;
;;==============================================================;;


(defun ss->lst (ss / i l)
(if ss
(repeat (setq i (sslength ss))
(setq l (cons (ssname ss (setq i (1- i))) l))
)
)
)
;;==============================================================;;

(defun _Unique-Fuzz (lst fuzz)
(if lst
(cons (car lst)
(_Unique-Fuzz
(vl-remove-if
(function (lambda (x) (equal x (car lst) fuzz)))
(cdr lst)
)
fuzz
)
)
)
)
;;==============================================================;;

(defun _vertices (el)
(if (setq el (member (assoc 10 el) el))
(cons (cdr (assoc 10 el)) (_vertices (cdr el)))
)
)
;;==============================================================;;

(defun obj->lst (obj / a b lst _mid)
(defun _mid (a b)
(mapcar (function (lambda (a b) (/ (+ a b) 2.0))) a b)
)
(if
(and
(vlax-method-applicable-p obj 'getboundingbox)
(not
(vl-catch-all-error-p
(vl-catch-all-apply 'vla-getboundingbox (list obj 'a 'b))
)
)
(setq lst (mapcar 'vlax-safearray->list (list a b)))
)
(list
(_mid (car lst) (cadr lst))
(vl-list* (caar lst)
(_mid (list (cadar lst)) (list (cadadr lst)))
)
(vl-list* (caadr lst)
(_mid (list (cadar lst)) (list (cadadr lst)))
)
)
)
)
;;==============================================================;;

(defun _line (p1 p2)
(entmakex
(list
(cons 0 "LINE")
(cons 10 p1)
(cons 11 p2)
)
)
)
;;==============================================================;;

(defun Rectangle-p (ent / enx lst p1 p2 p3 p4)
(and
(= "LWPOLYLINE" (cdr (assoc 0 (setq enx (entget ent)))))
(= 1 (cdr (assoc 70 enx)))
(setq lst (_vertices enx))
(= 4 (length lst))
(vl-every
'(lambda (x) (zerop x))
(mapcar
'(lambda (p) (vla-GetBulge (vlax-ename->vla-object ent) p))
'(0 1 2 3)
)
)
(mapcar '(lambda (v p) (set v p)) '(p1 p2 p3 p4) lst)
(equal 1 (/ (distance p1 p2) (distance p3 p4)) 1e-9)
(equal 1 (/ (distance p1 p4) (distance p2 p3)) 1e-9)
(equal 1 (/ (distance p1 p3) (distance p2 p4)) 1e-9)
)
)

;;==============================================================;;

(vl-load-com)
;|«Visual LISP© Format Options»
(70 2 1 2 nil "_eof " 100 9 0 0 1 T T T T)
;*** DO NOT add text below the comment! ***|;

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

Hi hi hay quá mấy bạn ơi,Cadviet muôn năm :P

 

 

Bạn Snowman cho mình hỏi là cái này có thể làm bằng vba cad được ko ban hi(có quà riêng nhé keke) :ph34r:

 

Với lại lisp trên của bạn nếu mình vẽ theo phương X trên cad thì ok nhưng nêu vẽ theo phương Y thì có lỗi bắt điểm như file đính kèm bạn xem dùm mình nha.

 

file đính kèm :  http://www.mediafire.com/download/6ldw1y1sr72n4t4/S_CONC2.dwg

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

Hi hi hay quá mấy bạn ơi,Cadviet muôn năm :P

 

 

Bạn Snowman cho mình hỏi là cái này có thểm bằng vba cad được ko ban hi(có quà riêng nhé keke) :ph34r:

 

Với lại lisp trên của bạn nếu mình vẽ theo phương X trên cad thì ok nhưng nêu vẽ theo phương Y thì có lỗi bắt điểm như file đính kèm bạn xem dùm mình nha.

 

file đính kèm :  http://www.mediafire.com/download/6ldw1y1sr72n4t4/S_CONC2.dwg

1. VBA hoàn toàn có thể làm được!

2. Đấy là do đề bài đặt ra 

 

"1. Qui luật của các hình chữ nhật như thế nào? => hình chữ nhật luôn thằng hàng với nhau, còn bề rộng có thể thay đổi

2. Quy luật vẽ các Line như thế nào? => cái polyline đucợ vẽ từ mép ngoài cùng bên trái đến mép ngoài cùng bên phải đó snowman.hms"

còn muốn lập lisp theo các phương khác thì hoàn toàn có thể  :)

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

 

Pls, help me =VBA với   :D  :P , lisp mình mù tịt ko biết gì, VBA thì mình còn mò được, cho mình cái sườn thôi cũng được nữa, giúp mính với nhé . tks all

 

(defun c:rcn (/ s i e el lst vl cn dir foo fun)
  (if (setq s (ssget '((0 . "LWPOLYLINE") (90 . 4) (-4 . "&=") (70 . 1))))
    (progn
      (initget "Vertical Horizontal")
      (setq dir
	     (eq
	       "Vertical"
	       (getkword
		 "\nConnect direction [Vertical/Horizontal]??? <Horizontal> > : "
	       )
	     )
      )
      (repeat (setq i (sslength s))
	(setq e	 (ssname s (setq i (1- i)))
	      el (entget e)
	)
	(if (Rectangle-p el)
	  (setq	vl  (_massoc 10 el)
		cn  (apply
		      (function _mid)
		      (mapcar '(lambda (x) (apply 'mapcar (cons x vl)))
			      '(min max)
		      )
		    )
		lst (cons (list cn e) lst)
	  )
	)
      )      
      (if dir
	(setq foo (lambda (a b) (equal (caar a) (caar b) 0.01))
	      fun (lambda (a b) (< (cadar a) (cadar b)))
	)
	(setq foo (lambda (a b) (equal (cadar a) (cadar b) 0.01))
	      fun (lambda (a b) (< (caar a) (caar b)))
	)
      )
      (setq lst	(mapcar	'(lambda (x) (vl-sort x (function fun)))
			(LM:GroupByFunction lst foo)
		)
      )
      (foreach l lst
	(mapcar '(lambda (a b) (_connect a b)) l (cdr l))
      )
    )
  )
  (princ)
)
;;---------------------------------------------------------------;;
(defun _massoc (key lst)
  (if (setq itm (assoc key lst))
    (cons (cdr itm) (_massoc key (cdr (member itm lst))))
  )
)
;;---------------------------------------------------------------;;
(defun _mid (a b)
  (mapcar (function (lambda (a b) (/ (+ a b) 2.0))) a b)
)
;;---------------------------------------------------------------;;
(defun Rectangle-p (el / lst p1 p2 p3 p4)
  (and
    (= "LWPOLYLINE" (cdr (assoc 0 el)))
    (= 1 (cdr (assoc 70 el)))
    (setq lst (_massoc 10 el))
    (= 4 (length lst))
    (vl-every
      '(lambda (x) (zerop x))
      (_massoc 42 el)
    )
    (mapcar '(lambda (v p) (set v p)) '(p1 p2 p3 p4) lst)
    (equal 1 (/ (distance p1 p2) (distance p3 p4)) 1e-9)
    (equal 1 (/ (distance p1 p4) (distance p2 p3)) 1e-9)
    (equal 1 (/ (distance p1 p3) (distance p2 p4)) 1e-9)
  )
)
;;---------------------------------------------------------------;;
(defun _line (p1 p2)
  (entmakex
    (list
      (cons 0 "LINE")
      (cons 10 p1)
      (cons 11 p2)
    )
  )
)
;;---------------------------------------------------------------;;
(defun _connect (l1 l2)
  (_line (vlax-curve-getclosestpointto (cadr l1) (car l2))
	 (vlax-curve-getclosestpointto (cadr l2) (car l1)))
)
;;---------------------------------------------------------------;;
;; Group By Function  -  Lee Mac
;; Groups items considered equal by a given predicate function

(defun LM:GroupByFunction ( lst fun / tmp1 tmp2 x1 )
    (if (setq x1 (car lst))
        (progn
            (foreach x2 (cdr lst)
                (if (fun x1 x2)
                    (setq tmp1 (cons x2 tmp1))
                    (setq tmp2 (cons x2 tmp2))
                )
            )
            (cons (cons x1 (reverse tmp1)) (LM:GroupByFunction (reverse tmp2) fun))
        )
    )
)
;;---------------------------------------------------------------;;
(vl-load-com)
;|«Visual LISP© Format Options»
(70 2 1 2 nil "_eof " 100 9 0 0 1 T T T T)
;*** DO NOT add text below the comment! ***|;

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

1. VBA hoàn toàn có thể làm được!

2. Đấy là do đề bài đặt ra 

 

"1. Qui luật của các hình chữ nhật như thế nào? => hình chữ nhật luôn thằng hàng với nhau, còn bề rộng có thể thay đổi

2. Quy luật vẽ các Line như thế nào? => cái polyline đucợ vẽ từ mép ngoài cùng bên trái đến mép ngoài cùng bên phải đó snowman.hms"

còn muốn lập lisp theo các phương khác thì hoàn toàn có thể   :)

thanks cad việt , mình đã biết thêm học hỏi mọi người về cad 

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

Tạo một tài khoản hoặc đăng nhập để nhận xét

Bạn cần phải là một thành viên để lại một bình luận

Tạo tài khoản

Đăng ký một tài khoản mới trong cộng đồng của chúng tôi. Điều đó dễ mà.

Đăng ký tài khoản mới

Đăng nhập

Bạn có sẵn sàng để tạo một tài khoản ? Đăng nhập tại đây.

Đăng nhập ngay

×