Đến nội dung


Hình ảnh
- - - - -

[Yêu cầu] Xin Lisp biến pline có bề dày thành rectang


  • Please log in to reply
8 replies to this topic

#1 gachick87

gachick87

    biết zoom

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

Đã gửi 01 August 2012 - 11:29 AM

các bác viết giúp em lisp sau với ạ:
lisp: p2r.lsp
Lisp biến cùng lúc nhiều pline có bề dày trong khung cửa sổ lựa chọn thành rectang bao quanh vừa khít Pline có độ dày đó.
Với layer vẽ rectang mới là layer hiện hành của bản vẽ ạ.

Hình minh họa:

Hình đã gửi

Em xin cảm ơn các bác nhiều nhiều ạ.
  • 0

#2 ketxu

ketxu

    Copier - Paster - Editor

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

Đã gửi 01 August 2012 - 12:34 PM

Yêu cầu của bạn toàn Pline nằm ngang ? hãy nhớ để dựng hình thì thằng ngang khác với thằng k ngang (dễ hơn ^^) :)

Ví dụ nhanh với Pline ngang :


(defun c:p2r(/ massocV eRec isSame id tmp lst lstObj ov)
(defun massocV (id data)
(mapcar 'cdr (vl-remove-if-not '(lambda(x)(eq id (car x))) data))
)
(defun eRec (p1 p2 hw / lst)(setq lst (list 0 hw 0))
(entmake
(append
(list '(0 . "LWPOLYLINE") '(100 . "AcDbEntity") '(100 . "AcDbPolyline")
(cons 8 (getvar 'cLayer))
(cons 90 4)(cons 70 1)
)
(mapcar '(lambda (x) (cons 10 x)) (mapcar '(lambda(x y)(mapcar x y lst)) '(+ + - -) (list p1 p2 p2 p1)))
)
)
)
(defun isSame (lst)(and (not (zerop (car lst)))(apply 'and (mapcar '(lambda(x y)(equal x y)) lst (cdr lst)))))
(setq id '(40 41) ov (getvar 'plinewid))
(setvar 'plinewid 0)
(foreach obj (setq lstObj (acet-ss-to-list (ssget (list (cons 0 "*POLYLINE")(cons 90 2)))))
(if (isSame (setq lst (apply 'append (mapcar '(lambda(x)(massocV x (entget obj))) id))))
(erec (car (setq tmp (massocV 10 (entget obj))))(last tmp) (* 0.5 (car lst)))
)
)
(if (wcmatch (getstring "\nXoa duong goc [Y/N]? <Y> :") ",[yY]")
(mapcar 'entdel lstObj)
)
(setvar 'plinewid ov)
)

- Nếu k ngang thì lại phải sửa đi 1 chút
- Nếu k phải chỉ có 1 segment thì lại sửa đi 1 chút nữa
- Nếu k phải chỉ có segment thẳng thì lại phải sửa đi nhiều nữa
- Nếu k phải chiều dày đầu cuối bằng nhau thì ...
....
....
Google!
  • 1

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


#3 gachick87

gachick87

    biết zoom

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

Đã gửi 01 August 2012 - 02:18 PM

uầy, quả thật không đơn giản. Thế bác xem sửa cho em đúng với các pline chỉ gồm 1 đoạn thẳng, góc quay bất kì, chiều dày đầu cuối bằng nhau được không ạ?
  • 0

#4 ketxu

ketxu

    Copier - Paster - Editor

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

Đã gửi 01 August 2012 - 03:40 PM

Bạn thử lấy cái ở Link này xem có phù hợp k? Cái trên mình viết cho vui thôi
  • 2

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


#5 gia_bach

gia_bach

    biết lệnh adcenter

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

Đã gửi 01 August 2012 - 04:08 PM

- Nếu chiều dày bằng nhau thì ...
....
....

... offset 2 bên với k/cách bằng 1/2 chiều dày, sau đó bít 2 đầu chắc là được ?!
  • 0

#6 gachick87

gachick87

    biết zoom

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

Đã gửi 01 August 2012 - 05:22 PM

Yeah, link của ketxu hàng khủng quá. Chuẩn không cần chỉnh bác ạ. Em cảm ơn bác nhiều nhiều nhé. Chúc bác mạnh khỏe cống hiến được nhiều hơn nữa cho đời :)
  • 0

#7 ketxu

ketxu

    Copier - Paster - Editor

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

Đã gửi 01 August 2012 - 07:07 PM

... offset 2 bên với k/cách bằng 1/2 chiều dày, sau đó bít 2 đầu chắc là được ?!

Được bác ạ, em đã thử làm từ lúc chiều. Tuy nhiên khi đó phải explode 2 đối tượng vừa offset ra (vì nó vẫn mang Plinewid của phân đoạn cũ), sau đó bít 2 đầu và nối lại ^^ Hơn nữa cách đó chỉ áp dụng nếu startwidth và endwidth giống nhau .
  • 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


#8 haanh

haanh

    biết lệnh adcenter

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

Đã gửi 02 August 2012 - 12:04 PM

các bác viết giúp em lisp sau với ạ:
lisp: p2r.lsp
Lisp biến cùng lúc nhiều pline có bề dày trong khung cửa sổ lựa chọn thành rectang bao quanh vừa khít Pline có độ dày đó.
Với layer vẽ rectang mới là layer hiện hành của bản vẽ ạ.

Hình minh họa:

Hình đã gửi

Em xin cảm ơn các bác nhiều nhiều ạ.

Em tò mò muốn hỏi bác: " biến Pline có bề dày thành Rectang có ứng dụng gì trong công việc ? Nếu chỉ để in ra giấy nhìn đoạn PL nó giống như hình chữ nhật thì chỉ cần dùng 02 lệnh AutoCAD là có thể làm được đúng như hình minh họa.

  • 0

“Sống trong đời sống cần có một tấm lòng / Để làm gì em biết không ? / Để gió cuốn đi, để gió cuốn đi...”


#9 ketxu

ketxu

    Copier - Paster - Editor

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

Đã gửi 02 August 2012 - 12:13 PM

Có lẽ chỉ là do Fillmode k phản ánh đúng mong muốn của chủ topic thôi ^^
  • 2

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