Đến nội dung


Hình ảnh
- - - - -

vẽ line or polyline trim


  • Please log in to reply
24 replies to this topic

#1 banmethuoc1112

banmethuoc1112

    biết zoom

  • Members
  • Pip
  • 10 Bài viết
Điểm đánh giá: 0 (bình thường)

Đã gửi 20 May 2015 - 02:26 PM

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...bo90/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


  • 0

#2 namnhim

namnhim

    biết vẽ polygon

  • Members
  • PipPip
  • 73 Bài viết
Điểm đánh giá: 5 (bình thường)

Đã gửi 20 May 2015 - 05:00 PM

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


  • 0

#3 hoan2182

hoan2182

    biết lệnh adcenter

  • Members
  • PipPipPipPipPipPipPip
  • 2646 Bài viết
Điểm đánh giá: 832 (rất tốt)

Đã gửi 20 May 2015 - 06:14 PM

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


  • 0

Gió đưa cây cải về trời

Rau răm ở lại chịu lời đắng cay...


#4 banmethuoc1112

banmethuoc1112

    biết zoom

  • Members
  • Pip
  • 10 Bài viết
Điểm đánh giá: 0 (bình thường)

Đã gửi 20 May 2015 - 07:35 PM

pls, help me 


  • 0

#5 conghoa

conghoa

    biết lệnh attdef

  • Members
  • PipPipPipPipPipPip
  • 412 Bài viết
Điểm đánh giá: 88 (tàm tạm)

Đã gửi 21 May 2015 - 09:22 AM

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...bo90/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.


  • 0

#6 banmethuoc1112

banmethuoc1112

    biết zoom

  • Members
  • Pip
  • 10 Bài viết
Điểm đánh giá: 0 (bình thường)

Đã gửi 21 May 2015 - 01:30 PM

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


  • 0

#7 gia_bach

gia_bach

    biết lệnh adcenter

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 1436 Bài viết
Điểm đánh giá: 1426 (rất tốt)

Đã gửi 21 May 2015 - 02:02 PM

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 à ?


  • 0

#8 conghoa

conghoa

    biết lệnh attdef

  • Members
  • PipPipPipPipPipPip
  • 412 Bài viết
Điểm đánh giá: 88 (tàm tạm)

Đã gửi 21 May 2015 - 03:23 PM

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.c...blockbreak.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.


  • 0

#9 Tr.CongSon

Tr.CongSon

    biết lệnh array

  • Members
  • PipPipPip
  • 183 Bài viết
Điểm đánh giá: 40 (tàm tạm)

Đã gửi 22 May 2015 - 11:19 AM

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 á^^


  • 0

#10 Doan Van Ha

Doan Van Ha

    biết lệnh adcenter

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 5454 Bài viết
Điểm đánh giá: 2626 (tuyệt vời)

Đã gửi 22 May 2015 - 12:07 PM

Bạn cũng dùng Fence thôi. Khi Pline gãy khúc bạn lấy các điểm gãy của Pline.


  • 1

* Chỉ nên yêu cầu Lisp khi bạn làm việc đó mất cả ngày nhưng họ chỉ viết 1 giờ. Đừng nêu yêu cầu Lisp khi bạn chỉ làm 1 giờ nhưng bắt họ phải mất cả ngày.

* Nhờ viết lisp cũng như đi khám bệnh. Chỉ gởi căn cước và than sắp chết thì không bác sỹ nào cứu sống được.


#11 banmethuoc1112

banmethuoc1112

    biết zoom

  • Members
  • Pip
  • 10 Bài viết
Điểm đánh giá: 0 (bình thường)

Đã gửi 22 May 2015 - 03:36 PM

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


  • 0

#12 snowman.hms

snowman.hms

    biết vẽ ellipse

  • Members
  • PipPip
  • 55 Bài viết
Điểm đánh giá: 26 (tàm tạm)

Đã gửi 22 May 2015 - 06:52 PM

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ẽ?


  • 0

#13 banmethuoc1112

banmethuoc1112

    biết zoom

  • Members
  • Pip
  • 10 Bài viết
Điểm đánh giá: 0 (bình thường)

Đã gửi 23 May 2015 - 10:40 AM

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é


  • 0

#14 Tr.CongSon

Tr.CongSon

    biết lệnh array

  • Members
  • PipPipPip
  • 183 Bài viết
Điểm đánh giá: 40 (tàm tạm)

Đã gửi 23 May 2015 - 11:49 AM

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^^


  • 0

#15 snowman.hms

snowman.hms

    biết vẽ ellipse

  • Members
  • PipPip
  • 55 Bài viết
Điểm đánh giá: 26 (tàm tạm)

Đã gửi 23 May 2015 - 05:22 PM

;;==============================================================;;
;;======================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! ***|;


  • 0

#16 ketxu

ketxu

    Copier - Paster - Editor

  • Moderator
  • PipPipPipPipPipPipPip
  • 5685 Bài viết
Điểm đánh giá: 2606 (tuyệt vời)

Đã gửi 23 May 2015 - 05:25 PM

 Mình thấy rất nhiều hàm con không được đánh dấu copyright :)


  • 0

Thành viên nhóm CadMagic.
Mời bạn ghé thăm facebook nhóm - Page viết lisp theo yêu cầu  :
CAD MAGIC


#17 snowman.hms

snowman.hms

    biết vẽ ellipse

  • Members
  • PipPip
  • 55 Bài viết
Điểm đánh giá: 26 (tàm tạm)

Đã gửi 23 May 2015 - 05:55 PM

 Mình thấy rất nhiều hàm con không được đánh dấu copyright :)

 rút kinh nghiệm  :D


  • 0

#18 banmethuoc1112

banmethuoc1112

    biết zoom

  • Members
  • Pip
  • 10 Bài viết
Điểm đánh giá: 0 (bình thường)

Đã gửi 23 May 2015 - 10:05 PM

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...4t4/S_CONC2.dwg


  • 0

#19 snowman.hms

snowman.hms

    biết vẽ ellipse

  • Members
  • PipPip
  • 55 Bài viết
Điểm đánh giá: 26 (tàm tạm)

Đã gửi 23 May 2015 - 10:39 PM

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...4t4/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ể  :)


  • 0

#20 banmethuoc1112

banmethuoc1112

    biết zoom

  • Members
  • Pip
  • 10 Bài viết
Điểm đánh giá: 0 (bình thường)

Đã gửi 25 May 2015 - 02:01 PM

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


  • 0