Đến nội dung


Hình ảnh
- - - - -

Lisp nối Line thành Pline ?


  • Please log in to reply
80 replies to this topic

#21 VUVUZELA

VUVUZELA

    biết lệnh chamfer

  • Members
  • PipPipPipPip
  • 210 Bài viết
Điểm đánh giá: 97 (tàm tạm)

Đã gửi 21 August 2010 - 03:34 PM

Một số trường hợp dùng Lisp này, nó tự động tìm các đoạn liện kết để nối nhưng lại không đúng ý mình lắm. Nhờ các bác sửa lại giúp em là chỉ nối những đối tượng mà mình chọn. Cảm ơn các bác!


Day bac thu daon nay xem
(defun c:nn (/)
(setvar "cmdecho" 0)
(setq ss (ssget))
(if ss
(progn
(setq a (ssname ss 0))
(setq name (cdr (assoc 0 (entget a))))
(cond
((= name "LINE") (command "pedit" a "" "j" ss "" ""))
((= name "ARC") (command "pedit" a "" "j" ss "" ""))
((= name "POLYLINE") (command "pedit" a "j" ss "" ""))
((= name "LWPOLYLINE") (command "pedit" a "j" ss "" ""))
)
)
)
)

  • 2

Hệ thống Liên Kết, Thiết Kế Tự Động

ttps://www.facebook...etThietKeTuDong


#22 huyanangia

huyanangia

    Chưa sử dụng CAD

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

Đã gửi 18 June 2012 - 08:03 PM

Thanks! bác
VUVUZELA
  • 0

#23 TRUNGNGAMY

TRUNGNGAMY

    biết lệnh block

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

Đã gửi 03 August 2012 - 12:09 AM

Dạo trước mình thấy mấy cái lisp chuyển line, arc ... thành pline nhiều lắm nhưng do lúc đó mình cũng có viết cái tạm dùng đc nên kg quan tâm lắm. Nay thấy cần xét cả TH đối tượng là spline thì làm thế nào chuyển nó thành polyline hay region thì kg thấy đâu nữa. Tìm cũng chẳng có. Chắc mình tìm hơi dở nên chưa thấy.
Phiền các bác trên DĐ đã viết hay đã biết thì giúp mình cái lisp chọn nhiều đt cùng lúc trong đó có line, pline, arc, spline rồi chuyển nó thành polyline hay region. Nó lặp cho đến lúc nào trong ss (tập hợp chọn) kg thể tạo đc nữa thì thôi. Cám ơn các bác
  • 0

#24 haanh

haanh

    biết lệnh adcenter

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

Đã gửi 03 August 2012 - 12:24 AM

Dạo trước mình thấy mấy cái lisp chuyển line, arc ... thành pline nhiều lắm nhưng do lúc đó mình cũng có viết cái tạm dùng đc nên kg quan tâm lắm. Nay thấy cần xét cả TH đối tượng là spline thì làm thế nào chuyển nó thành polyline hay region thì kg thấy đâu nữa. Tìm cũng chẳng có. Chắc mình tìm hơi dở nên chưa thấy.
Phiền các bác trên DĐ đã viết hay đã biết thì giúp mình cái lisp chọn nhiều đt cùng lúc trong đó có line, pline, arc, spline rồi chuyển nó thành polyline hay region. Nó lặp cho đến lúc nào trong ss (tập hợp chọn) kg thể tạo đc nữa thì thôi. Cám ơn các bác

Bác xem trong này: http://www.cadviet.c...showtopic=10621
Từ Aucad2007 đã có chức năng chuyển Spl thành pl
Từ Autocad 2011 đã có lệnh Bo sử dụng 2 tham số để chuyển l, spl, arc khép kìn thành Polyline hoặc Region.
Hình đã gửi
  • 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...”


#25 Doan Van Ha

Doan Van Ha

    biết lệnh adcenter

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

Đã gửi 03 August 2012 - 07:01 AM

Dạo trước mình thấy mấy cái lisp chuyển line, arc ... thành pline nhiều lắm nhưng do lúc đó mình cũng có viết cái tạm dùng đc nên kg quan tâm lắm. Nay thấy cần xét cả TH đối tượng là spline thì làm thế nào chuyển nó thành polyline hay region thì kg thấy đâu nữa. Tìm cũng chẳng có. Chắc mình tìm hơi dở nên chưa thấy.
Phiền các bác trên DĐ đã viết hay đã biết thì giúp mình cái lisp chọn nhiều đt cùng lúc trong đó có line, pline, arc, spline rồi chuyển nó thành polyline hay region. Nó lặp cho đến lúc nào trong ss (tập hợp chọn) kg thể tạo đc nữa thì thôi. Cám ơn các bác

Cái này Ketxu viết để convert Spline->Pline, nhưng bác có thể sửa để chuyển 1 curve (line, arc, spline...) thành pline được.
(Chuyển thành pline thì không quan tâm kín/hở, còn chuyển thành region chỉ khi kín thôi mà!)
@Ketxu: nên chuyển lisp này thành: chuyển Curve -> Pline cho tổng quát luôn.
http://xaydungit.vn/...68-Spline-Pline
  • 2

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


#26 phamthanhbinh

phamthanhbinh

    biết lệnh adcenter

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

Đã gửi 03 August 2012 - 07:20 AM

Dạo trước mình thấy mấy cái lisp chuyển line, arc ... thành pline nhiều lắm nhưng do lúc đó mình cũng có viết cái tạm dùng đc nên kg quan tâm lắm. Nay thấy cần xét cả TH đối tượng là spline thì làm thế nào chuyển nó thành polyline hay region thì kg thấy đâu nữa. Tìm cũng chẳng có. Chắc mình tìm hơi dở nên chưa thấy.
Phiền các bác trên DĐ đã viết hay đã biết thì giúp mình cái lisp chọn nhiều đt cùng lúc trong đó có line, pline, arc, spline rồi chuyển nó thành polyline hay region. Nó lặp cho đến lúc nào trong ss (tập hợp chọn) kg thể tạo đc nữa thì thôi. Cám ơn các bác

Hề hề hề,
Đây là cái lisp chuyển Spline thành polyline mình mót từ diễn đàn, hình như của bác nguyenhoanh hay SSG chi đó mà mình không nhớ, bác dùng thử xem có đúng ý không nhé.


(defun C:s2p ()
(while (not (and
(setq lstSelection (entsel "\nSelect Spline: "))
(setq sngSegment (getdist "\nGet Segment Length: "))
(setq objSelection (vlax-ename->vla-object (car
lstSelection)))
(wcmatch (vla-get-objectname objSelection)

"AcDb2dPolyline,AcDbPolyline,AcDbLine,AcDbArc,AcDbSpline"
)
)
)
(princ "\nError please select again: ")
)
(setq sngLength (vlax-curve-getDIstAtParam objSelection
(vlax-curve-getEndParam objSelection)
)
sngDistance 0.0
)
(vl-cmdf "._pline" (vlax-curve-getpointatDist objSelection 0.0)) (repeat (fix (/ sngLength sngSegment))
(vl-cmdf (vlax-curve-getpointatDist objSelection sngDistance))
(setq sngDistance (+ sngDistance sngSegment))
)
(vl-cmdf (vlax-curve-getPointAtParam objSelection
(vlax-curve-getEndParam objSelection)
)
""
)
)
Chúc bác luon khỏe và vui
  • 3
Chúc các quý Anh trên diễn đàn luôn khỏe, đẻ thêm được nhiều thứ để mót.

#27 TRUNGNGAMY

TRUNGNGAMY

    biết lệnh block

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

Đã gửi 03 August 2012 - 07:39 PM

Cám ơn bác Bình. Ý mình muốn nó tạo từ nhiều loại đối tượng thành polyline hay region. Sau khi sd Lisp bác gởi thì mình nghĩ ra chỉ cần dùng Lisp đơn giản (command "_.region" ss "") thì đc liền. Đôi lúc cũng ngớ ngẩn.
Các bác cho mình hỏi, làm thề nào có thể lấy đc tọa độ bao của region, hình như nó kg có trong dũ liệu đối tượng thì phải, chỉ lấy đc gần đúng thôi phải kg. Mình thấy dữ liệu của nó chẳng thể hiểu đc. Bạn nào có thể lấy đc tọa độ của nó sao cho diện tích khi tính bằng tọa độ tương đương với cách tính cùa cad. Mình dùng tọa độ bao của nó vào mục đích khác nữa chứ kg riêng gì tính diện tích.
Cám ơn các bác
  • 0

#28 haanh

haanh

    biết lệnh adcenter

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

Đã gửi 03 August 2012 - 09:51 PM

Cám ơn bác Bình. Ý mình muốn nó tạo từ nhiều loại đối tượng thành polyline hay region. Sau khi sd Lisp bác gởi thì mình nghĩ ra chỉ cần dùng Lisp đơn giản (command "_.region" ss "") thì đc liền. Đôi lúc cũng ngớ ngẩn.
Các bác cho mình hỏi, làm thề nào có thể lấy đc tọa độ bao của region, hình như nó kg có trong dũ liệu đối tượng thì phải, chỉ lấy đc gần đúng thôi phải kg. Mình thấy dữ liệu của nó chẳng thể hiểu đc. Bạn nào có thể lấy đc tọa độ của nó sao cho diện tích khi tính bằng tọa độ tương đương với cách tính cùa cad. Mình dùng tọa độ bao của nó vào mục đích khác nữa chứ kg riêng gì tính diện tích.
Cám ơn các bác

Ý tưởng của bác không còn là ...GÁNH HÀNG RONG nữa mà nó đã trở thành ĐẠI...SIÊU... THỊ...TƯỞNG! Bởi vì Splin là đường cong bậc ba được tạo bởi vô cùng vô tận điểm.
Nếu dùng lệnh Measure chia đường spline ra làm nhiều phân đoạn đều nhau, mỗi phân đoạn có chiều dài 0.00000001 milimet thì trong mỗi phân đoạn ngắn ngủi đó đã có tới trên 2 tỷ tọa độ điểm.
  • 1

“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...”


#29 chutuan

chutuan

    biết zoom

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

Đã gửi 03 August 2012 - 10:48 PM

Hề hề, có 1 dấu tick Thanks, bạn tick vào đó là được mờ.
NgocSon hãy thử code này :
Bạn pick vào 1 trong các line, arc, pline nào đó -> là nó tự tìm các đoạn liên kết được để nối và các đoạn này có cùng tên layer. Tên Layer này được lấy theo đối tượng mà bạn đã pick. OK?
Đây là code

(defun c:nn (/ tdt ssdt sodt index)(defun ObjName (ssdt /)(cdr (assoc '0 (entget ssdt))))(defun MoPL (ssdt /)(= (cdr (assoc '70 (entget ssdt))) 0))(defun NoiPL (ssdt /)(if (MoPL ssdt)(command ".PEDIT" ssdt "J" tdt "" "X")))(defun NoiLC (ssdt /)(command ".PEDIT" ssdt "Y" "J" tdt "" "X"))(setq ent (car(entsel "\nPick vao 1 doi tuong de noi :")))(setqtdt (ssget "X"	(list        (assoc 8 (entget ent) )	) 	)sodt (sslength tdt)index 0)(repeat sodt(setqssdt (ssname tdt index)index (1+ index))(if (or (= (Objname ssdt) "LWPOLYLINE")(= (Objname ssdt) "POLYLINE"))(NoiPL ssdt))(if (or (= (Objname ssdt) "LINE") (= (Objname ssdt) "ARC"))(NoiLC ssdt)))(princ))

Hy vọng trúng ý của bạn


em thấy lisp này rất hay, em thường xuyên sử dụng, nhưng mà lisp này khi chọn layer nó lại nối toàn bộ các layer trong hết 1 bản vẽ, giờ em muốn các bác chỉnh lại giúp em là chỉ nối trong 1 vùng bản vẽ mình chọn thôi, cảm ơn các bác.
  • 0

#30 TRUNGNGAMY

TRUNGNGAMY

    biết lệnh block

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

Đã gửi 03 August 2012 - 11:26 PM

Ý tưởng của bác không còn là ...GÁNH HÀNG RONG nữa mà nó đã trở thành ĐẠI...SIÊU... THỊ...TƯỞNG! Bởi vì Splin là đường cong bậc ba được tạo bởi vô cùng vô tận điểm. Nếu dùng lệnh Measure chia đường spline ra làm nhiều phân đoạn đều nhau, mỗi phân đoạn có chiều dài 0.00000001 milimet thì trong mỗi phân đoạn ngắn ngủi đó đã có tới trên 2 tỷ tọa độ điểm.

Cám ơn bác đã có gợi ý. Trước đây đã có bạn trên cadviet biến một cái polyline chỉ gồm những cung tròn thành pline mà diện tích tương đương. Sau đó bạn ấy có thể bận quá nên kg tiếp tục với spline. Tuy nhiên, muốn làm đc chúng ta phải đặt ra một qui ước nào đó. VD tọa độ phải nằm về hai phía của spilne ...
À, mà đường cong bậc 3 biểu diễn spline đc hiểu như thế nào nhỉ, mình chưa hiểu rõ lắm, mong bạn giải thích thêm
  • 0

#31 Doan Van Ha

Doan Van Ha

    biết lệnh adcenter

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

Đã gửi 03 August 2012 - 11:38 PM

Ý tưởng của bác không còn là ...GÁNH HÀNG RONG nữa mà nó đã trở thành ĐẠI...SIÊU... THỊ...TƯỞNG! Bởi vì Splin là đường cong bậc ba được tạo bởi vô cùng vô tận điểm.
Nếu dùng lệnh Measure chia đường spline ra làm nhiều phân đoạn đều nhau, mỗi phân đoạn có chiều dài 0.00000001 milimet thì trong mỗi phân đoạn ngắn ngủi đó đã có tới trên 2 tỷ tọa độ điểm.

Cho tôi hỏi tí: làm sao biết nó là đường cong bậc 3 mà không không phải là bậc khác?
  • 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.


#32 haanh

haanh

    biết lệnh adcenter

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

Đã gửi 04 August 2012 - 06:49 PM

Em chỉ cảm nhận theo cảm tính thôi bác ạ! Bậc 1 + Bậc 2 = Bậc 3, không biết có đúng không?
- Khi Spline chỉ đi qua hai điểm, nhìn nó giống như đường y= ax + b (Bậc 1)
- Khi Spline chỉ đi qua 3 điểm là các đỉnh của tam giác cân, nó giống như đồ thị đường cong y= ax2^ + bx + c (Bậc 2)
và giống như hai câu thơ:
"Cổng trường đại học cao vời vợi
Mười người leo tới chín người rơi"
- Khi Spline đi qua nhiều điểm nhìn nó đẹp lắm, bác ạ!
  • 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...”


#33 haanh

haanh

    biết lệnh adcenter

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

Đã gửi 04 August 2012 - 10:25 PM

À, mà đường cong bậc 3 biểu diễn spline đc hiểu như thế nào nhỉ, mình chưa hiểu rõ lắm, mong bạn giải thích thêm

Hình đã gửi

Đường Spline hay thật! Nó vô tư, chạy nhảy trong môi trường 3D y sì như 3Dpoly, lại còn cho người ta Covenrt để chuyển đổi thành Polyline mới vui chứ. Trong khi Polyline chỉ bó hẹp trong môi trường 2D, thì Spline tung tẩy làm đường dẫn để tạo tay vịn cầu thang 3D, thật là tuyệt vời > Xin cảm ơn Spline!
Code dưới đây là hình ảnh tóm tắt giải thuật Spline tự nhiên:
Không biết có liên quan đến công việc của bác TRUNGNGAMY không?
AutoCAD chỉ cho nhìn đến 0,00000001. Không biết độ chính xác của nó đạt tới bao nhiêu số thập phân các bác nhỉ?
  • 1

“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...”


#34 TRUNGNGAMY

TRUNGNGAMY

    biết lệnh block

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

Đã gửi 06 August 2012 - 01:08 AM

Hình đã gửi

Đường Spline hay thật! Nó vô tư, chạy nhảy trong môi trường 3D y sì như 3Dpoly, lại còn cho người ta Covenrt để chuyển đổi thành Polyline mới vui chứ. Trong khi Polyline chỉ bó hẹp trong môi trường 2D, thì Spline tung tẩy làm đường dẫn để tạo tay vịn cầu thang 3D, thật là tuyệt vời > Xin cảm ơn Spline!
Code dưới đây là hình ảnh tóm tắt giải thuật Spline tự nhiên:
Không biết có liên quan đến công việc của bác TRUNGNGAMY không?
AutoCAD chỉ cho nhìn đến 0,00000001. Không biết độ chính xác của nó đạt tới bao nhiêu số thập phân các bác nhỉ?

Cám ơn bạn đã có những giải thích và minh họa sinh động. Mình cũng biết spline uốn lượn đẹp hơn polyline, có lẽ thế nên nó khó tiếp cận. Quả thật mình cũng rất muốn biết spline đã được vẽ theo qui luật như thế nào. Nếu kg có cad, chúng ta vẽ nó bằng cách thủ công đc kg. Ý nói có theo công thức kg, hay tùy bàn tay người thợ.
Mình chưa nhận đc gì từ cái bạn đưa lên ở trên "Code dưới đây là hình ảnh tóm tắt giải thuật Spline tự nhiên"
Thường công việc của mình chỉ cẩn đến 3 số lẽ thôi.
  • 1

#35 haanh

haanh

    biết lệnh adcenter

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

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

Cám ơn bạn đã có những giải thích và minh họa sinh động. Mình cũng biết spline uốn lượn đẹp hơn polyline, có lẽ thế nên nó khó tiếp cận. Quả thật mình cũng rất muốn biết spline đã được vẽ theo qui luật như thế nào. Nếu kg có cad, chúng ta vẽ nó bằng cách thủ công đc kg. Ý nói có theo công thức kg, hay tùy bàn tay người thợ.
Mình chưa nhận đc gì từ cái bạn đưa lên ở trên "Code dưới đây là hình ảnh tóm tắt giải thuật Spline tự nhiên"
Thường công việc của mình chỉ cẩn đến 3 số lẽ thôi.

Thông tin em đưa lên chỉ là là link dẫn đến hình ảnh minh họa. Em đã xóa code đó rồi, và cũng xóa luôn cả ảnh gốc (nhờ bác xóa giúp em code trong bài bác đã trích dẫn, em cảm ơn bác nhiều). Muốn tìm hiểu về Spline, bác hãy tìm kiếm theo cụm từ tóm tắt giải thuật Spline tự nhiên để truy cập vào gian hàng:
Đường cong spiline bậc 3
Đường spline vẽ đươc thủ công bằng giấy bút. Nét chữ, nét vẽ từ bàn tay chắc chắc khỏe vạm vỡ cho đến bàn tay mềm mại nhỏ nhắn xinh tươi đều tạo ra vẻ đẹp của spline, bác ạ!
Bác có thể vào "Đại siêu thị Google" để chiêm ngưỡng vẻ đẹp hùng vĩ, lộng lẫy và ...xa hoa trùng điệp của đề tài : “Nghiên cứu ứng dụng đường cong tham số B-Spline vào nhận dạng chữ số viết tay”.
Chúc bác khỏe và gặp vui nhiều!
  • 1

“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...”


#36 chutuan

chutuan

    biết zoom

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

Đã gửi 21 August 2012 - 11:53 PM

Hề hề, có 1 dấu tick Thanks, bạn tick vào đó là được mờ.
NgocSon hãy thử code này :
Bạn pick vào 1 trong các line, arc, pline nào đó -> là nó tự tìm các đoạn liên kết được để nối và các đoạn này có cùng tên layer. Tên Layer này được lấy theo đối tượng mà bạn đã pick. OK?
Đây là code

(defun c:nn (/ tdt ssdt sodt index)(defun ObjName (ssdt /)(cdr (assoc '0 (entget ssdt))))(defun MoPL (ssdt /)(= (cdr (assoc '70 (entget ssdt))) 0))(defun NoiPL (ssdt /)(if (MoPL ssdt)(command ".PEDIT" ssdt "J" tdt "" "X")))(defun NoiLC (ssdt /)(command ".PEDIT" ssdt "Y" "J" tdt "" "X"))(setq ent (car(entsel "\nPick vao 1 doi tuong de noi :")))(setqtdt (ssget "X"	(list        (assoc 8 (entget ent) )	) 	)sodt (sslength tdt)index 0)(repeat sodt(setqssdt (ssname tdt index)index (1+ index))(if (or (= (Objname ssdt) "LWPOLYLINE")(= (Objname ssdt) "POLYLINE"))(NoiPL ssdt))(if (or (= (Objname ssdt) "LINE") (= (Objname ssdt) "ARC"))(NoiLC ssdt)))(princ))

Hy vọng trúng ý của bạn


em thấy lisp này rất hay, em thường xuyên sử dụng, nhưng mà lisp này khi chọn layer nó lại nối toàn bộ các layer trong hết 1 bản vẽ, giờ em muốn các bác chỉnh lại giúp em là chỉ nối trong 1 vùng bản vẽ mình chọn thôi, cảm ơn các bác
  • 0

#37 Doan Van Ha

Doan Van Ha

    biết lệnh adcenter

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

Đã gửi 22 August 2012 - 08:52 AM

Sửa:
(ssget "X" (list (assoc 8 (entget ent))))
Thành:
(ssget (list (assoc 8 (entget ent))))
  • 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.


#38 Polyline

Polyline

    biết lệnh mirror

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

Đã gửi 07 April 2014 - 11:53 AM

Mình có 2 đối tượng này mà không nối bằng lệnh Pedit được.

 

http://www.cadviet.c..._and_line_1.dwg

 

Mình cũng đang viết một lisp để nối các (0 . "*LINE,ARC") lại với nhau mà không cần sử dụng lệnh PEDIT.

Tuy nhiên mình đang bí về thuật toán. Sau khi chọn "một cục" đối tượng xong, mình không biết làm sao để sắp xếp các đối tượng theo kiểu "End to End", nghĩa là các đối tượng này "nối đuôi" nhau (các điểm có thể trùng nhau hoặc cách nhau một đoạn cho trước).

 

Mong được sự giúp đỡ của các bác!


  • 0

#39 Tot77

Tot77

    biết lệnh adcenter

  • Members
  • PipPipPipPipPipPipPip
  • 990 Bài viết
Điểm đánh giá: 498 (tốt)

Đã gửi 07 April 2014 - 01:22 PM

Dùng hàm có tên là sapxep(ss kc) này, với ss là "một cục" của bạn , đoạn cách nhau cho trước là kc.

Kết quả ra 1 list gồm tên các phần tử trong "cái cục" của bạn nhưng theo thứ thự "nối đuôi" nhau.

 

 

(defun sapxep(ss kc / tm L1 L2 ng)
  (defun noithem(d v kc tr / tm tm1 obj)
    (if (setq tm (car (vl-remove nil
(mapcar '(lambda(x) (if (and (/= v (cadar x)) (or (equal d (car x) kc) (equal d (last x) kc))) x nil)) L1))))
      (if (or (and tr (equal d (car tm) kc)) 
     (and (not tr) (equal d (last tm) kc)))
(setq ng t tm1 (reverse tm))
(setq ng nil tm1 tm)))
  )
  ;;;
  (setq L1 (mapcar '(lambda(x) (list (vlax-curve-getStartPoint (setq obj (vlax-ename->vla-object x))) x
   (vlax-curve-getEndPoint obj))) (acet-ss-to-list ss))
L2 (list (car L1))
L1 (cdr L1))
  
  (while L1
    (if (setq tm (noithem (caar L2) (cadar L2) kc t))
      (setq L2 (cons tm L2) L1 (vl-remove (if ng (reverse tm) tm) L1)))
    (if (setq tm (noithem (last (last L2)) (cadr (last L2)) kc nil))
      (setq L2 (append L2 (list tm)) L1 (vl-remove (if ng (reverse tm) tm) L1))))
  (mapcar '(lambda(x) (cadr x)) L2)
)
 

 

 

  • 1

#40 Doan Van Ha

Doan Van Ha

    biết lệnh adcenter

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

Đã gửi 07 April 2014 - 02:25 PM

Đề phòng trường hợp endpoint thì gần mà startpoint thì xa, hoặc ngược lại.


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