Đến nội dung


Hình ảnh

cắt pline thành các đoạn theo chiểu dài chọn


  • Please log in to reply
28 replies to this topic

#21 LoveLisp

LoveLisp

    biết lệnh extend

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

Đã gửi 15 November 2012 - 09:34 AM

Mấu chốt nằm ở chỗ "tìm giao của nó với L" bác Hà ạ! Đường thẳng thì dễ, có thể dùng hàm (inters để xác định, nhưng các Arc, Elip, Spline, Pline có đoạn cong thì xác định như thế nào, bác có thể hướng dẫn được không?
  • 0

#22 Doan Van Ha

Doan Van Ha

    biết lệnh adcenter

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

Đã gửi 15 November 2012 - 09:41 AM

Hàm tìm giao điểm của 2 vla-object:
(vlax-invoke obj1 'IntersectWith obj2 acExtendNone)
; - acExtendNone Does not extend either object.
; - acExtendThisEntity Extends the Fst object.
; - acExtendOtherEntity Extends the Nxt object.
; - acExtendBoth Extends both objects.
Hoặc nếu dùng acet thì:
(acet-geom-intersectwith en1 en2 flag)
Hàm trả về listpoint tọa độ các điểm giao của 2 đối tượng en1 en2. Flag là số interger, cờ quy định các kiểu giao:
0: không mở rộng 2 đối tượng en1, en2
1: mở rộng đối tượng en1, không mở rộng đối tượng en2.
2: không mở rộng đối tượng en1, mở rộng đối tượng en2.
3: mở rộng 2 đối tượng en1 en2
  • 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.


#23 LoveLisp

LoveLisp

    biết lệnh extend

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

Đã gửi 15 November 2012 - 11:04 AM

Cám ơn bác Hà rất nhiều! Mình đã viết thử theo hướng dẫn của bác và nó chạy ngon lành. Tuy nhiên, phần trợ giúp của VLisp (trên cad2007) chỉ có hàm (vlax-invoke-method thôi, còn hàm (vlax-invoke nó vẫn thực thi và vẫn đổi thành màu xanh như các hàm khác mà không có phần trợ giúp, vì vậy mình không tìm được cách dùng của (vlax-invoke.
  • 0

#24 Doan Van Ha

Doan Van Ha

    biết lệnh adcenter

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

Đã gửi 15 November 2012 - 11:16 AM

Cách nào cũng được cả!
Giao của ent1 và ent2:
(vlax-invoke (vlax-ename->vla-object ent1) 'IntersectWith (vlax-ename->vla-object ent2) 0)
Love Lisp, but not love "Like This"! :D
  • 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.


#25 LoveLisp

LoveLisp

    biết lệnh extend

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

Đã gửi 15 November 2012 - 11:38 AM

so sorry!!! :)) Mình vừa "Like This" hết hạn mức ngày hôm nay lun!!
Mình đã viết một đoạn lisp như sau:

;Chon cac doi tuong
;va pick 2 diem
;Cac doi tuong se bi ngat tai giao voi duong thang noi 2 diem
(defun c:br2p(/ chon d1 d2 ename-s1 vla-name-s1 dem kind vla-name-s2 inter)
(command ".ucs" "w" ".undo" "e" ".undo" "be")
(vl-load-com)
(princ "\nSelect objects to break: ")
(if (setq chon (ssget))
(if (setq d1 (getpoint "\nBreak line from: "))
(if (setq d2 (getpoint d1 "\nBreak line to: "))
(progn
(command ".line" d1 d2 "")
(setq ename-s1 (entlast)
vla-name-s1 (vlax-ename->vla-object (entlast)))

(setq dem 0)
(while (< dem (sslength chon))
(progn
(setq kind (cdr (assoc 0 (entget (ssname chon dem)))))
(if (member kind (list "LINE" "POLYLINE" "LWPOLYLINE" "ARC" "SPLINE" "RAY" "XLINE"))
(progn
(setq vla-name-s2 (vlax-ename->vla-object (ssname chon dem))
inter (vlax-invoke vla-name-s1 'IntersectWith vla-name-s2 acExtendNone))
(command ".break" (ssname chon dem) inter inter)
)
(progn
(setq notify (strcat "\n" kind " cannot break!"))
(princ notify)));if
(setq dem (1+ dem))
));while
(command ".erase" ename-s1 "")
))));if
(command ".undo" "e")
(princ))
Mình muốn mở rộng nó ra cho CIRCLE, ELLIPSE, MLINE nữa nhưng chưa biết làm thế nào.
Lệnh này cũng không có tác dụng đối với ARC nếu như nó cắt ARC nhiều hơn một lần.
  • 0

#26 Doan Van Ha

Doan Van Ha

    biết lệnh adcenter

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

Đã gửi 15 November 2012 - 12:26 PM

Bạn chú ý kết quả trả về của hàm vlax-invoke.
Nó trả về 1 list kiểu thế này: (X1 Y1 Z1 X2 Y2 Z2 ... Xi Yi Zi .... Xn Yn Zn)
Từ đó, dễ thấy với line thì list này là 1 điểm, với các đối tượng khác thì list này nói chung không phải là 1 điểm => bạn phải lập hàm để đưa nó về list các điểm rồi sẽ giải quyết được tất cả thắc mắc của bạn.
Chúc thành công!
  • 0

* 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.


#27 LoveLisp

LoveLisp

    biết lệnh extend

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

Đã gửi 15 November 2012 - 01:16 PM

à, cám ơn bác! Tuy nhiên có một vấn đề là sau khi ngắt nó ra, tên đối tượng bị thay đổi (tạo thêm đối tượng mới). Do đó, với các đối tượng cắt nhiều hơn 1 lần thì sẽ khó bác ạ, vì mình không biết sau khi ngắt lần 1 thì điểm còn lại sẽ nằm trên đối tượng cũ hay đối tượng mới.
  • 0

#28 Doan Van Ha

Doan Van Ha

    biết lệnh adcenter

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

Đã gửi 15 November 2012 - 01:33 PM

Bạn hỏi một hồi thì "lạc đề" với câu hỏi đầu tiên mà bạn đưa ra là muốn cắt các đối tượng ra làm 2.
Cuối cùng là bạn muốn đạt được cái gì?
  • 0

* 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.


#29 LoveLisp

LoveLisp

    biết lệnh extend

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

Đã gửi 15 November 2012 - 02:15 PM

hihi.. thì cơ bản là như ban đầu, muốn cắt ra làm 2 thôi, chỉ về sau này mở rộng và phát triển lên thôi bác ạ! :)
  • 0