Đến nội dung


Hình ảnh
- - - - -

Nhờ Tư Vấn Lisp Chuyển Polyline Sang Arc


  • Please log in to reply
32 replies to this topic

#21 DuongTrungHuy

DuongTrungHuy

    biết lệnh copy

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

Đã gửi 14 October 2016 - 08:57 PM

Chào Huy

 

Vấn đề là mịn pline nhưng sẽ định vị nhiều điểm để xác định cung tròn nhỏ trong 1 số trường hợp cần dùng. Mà nghĩ lại thì chỉ convert được với 1 đỉnh, 2 đỉnh hoặc 3 đỉnh là hợp lý. Nói chung là chỉ nên convert như thế này là mình thấy hợp lý rồi. :D

Như vậy mình có thể lưu lại các thông số của cung tròn nhỏ và gán vào thông số mở rộng của cung lớn, khi cần mình lấy ra để dùng được ko Bee. Các thông số cùng tròn cần lưu là 3 điểm trên cung là được nhỉ.


  • 0

#22 Bee

Bee

    biết lệnh extend

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

Đã gửi 14 October 2016 - 09:23 PM

Như vậy mình có thể lưu lại các thông số của cung tròn nhỏ và gán vào thông số mở rộng của cung lớn, khi cần mình lấy ra để dùng được ko Bee. Các thông số cùng tròn cần lưu là 3 điểm trên cung là được nhỉ.

Mình nghĩ dừng ở đây thôi. Vì nếu convert thêm những cung tròn nhỏ thì tạo ra ccung lớn nhưng không bám theo được cung nhỏ đó. ^_^


  • 0

#23 DuongTrungHuy

DuongTrungHuy

    biết lệnh copy

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

Đã gửi 14 October 2016 - 09:33 PM

Mình nghĩ dừng ở đây thôi. Vì nếu convert thêm những cung tròn nhỏ thì tạo ra ccung lớn nhưng không bám theo được cung nhỏ đó. ^_^

Ok đúng rồi Bee.


  • 0

#24 tuan138

tuan138

    biết zoom

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

Đã gửi 17 October 2016 - 09:39 AM

 

Vẫn làm đc ^_^ nhưng sẽ không chính xác 1 số góc cong. Thử cái này xem nhé.

(defun c:test (/ ss pLlst vLst n p1 p2 p3)
  (command "ucs" "name" "save" "temp")
  (command "ucs" "w")
  (if (not (setq ss (ssget '((0 . "LWPOLYLINE")))))
    (print "Ban da khong chon pline.")
    (progn
      (setq pLlst (vl-remove-if
		    'listp
		    (mapcar 'cadr (ssnamex ss))
		  )
      )
      
      (foreach pl pLlst
	(setq vLst   (mapcar 'cdr
			     (vl-remove-if-not
			       '(lambda (x) (= 10 (car x)))
			       (entget pl)
			     )
		     )
	)				;setq
	(setq n 0)
	(while (< 1 (length vLst))
	  (setq	p1 (nth n vLst)
		p2 (nth (+ n 1) vLst)
		p3 (nth (+ n 2) vLst)
	  )				;setq
	  (command "_arc" "_none" p1 "_none" p2 "_none" p3)
	  (setq vLst (cddr vLst))
	)				;while
      )					;foreach
    )					;progn
  )					;if
  (command "ucs" "name" "restore" "temp")
  (command "ucs" "name" "delete" "temp")
  (princ)
)					;defun

 

Bác Bee ơi.

 

Cho em hỏi chút. Em chạy Lisp này của bác nhưng bị lỗi sau khi vẽ được 1 cung đầu tiên.

; error: bad argument type: fixnump: nil

Theo em hiểu thì nó báo sai định dạng.

Em thử atof để chuyển nó về Float cũng không được bác nhỉ. Bác giúp em với. 

Em dùng ( autocad 2009 mechanical)

Thanks bác.


  • 0

#25 Bee

Bee

    biết lệnh extend

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

Đã gửi 17 October 2016 - 11:53 AM

Bác Bee ơi.

 

Cho em hỏi chút. Em chạy Lisp này của bác nhưng bị lỗi sau khi vẽ được 1 cung đầu tiên.

; error: bad argument type: fixnump: nil

Theo em hiểu thì nó báo sai định dạng.

Em thử atof để chuyển nó về Float cũng không được bác nhỉ. Bác giúp em với. 

Em dùng ( autocad 2009 mechanical)

Thanks bác.

Mình test lisp chạy trên file bạn gửi vẫn ok. ACAD2017. Bạn chạy file lỗi thì up lên mình xem rồi mới sửa lisp của mình được.


  • 1

#26 tuan138

tuan138

    biết zoom

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

Đã gửi 17 October 2016 - 01:01 PM

Em vẫn chạy trên file em share đầu tiên đó bác.

 

Có lẽ do CAD 2009 của em rồi ( máy công ty  không cho cài CAD khác)

 

Buồn thật.

 

Capture43597.jpg

 

Thanks bác đã trả lời.


  • 0

#27 Bee

Bee

    biết lệnh extend

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

Đã gửi 17 October 2016 - 01:08 PM

Em vẫn chạy trên file em share đầu tiên đó bác.

 

Có lẽ do CAD 2009 của em rồi ( máy công ty  không cho cài CAD khác)

 

Buồn thật.

 

Capture43597.jpg

 

Thanks bác đã trả lời.

Add thử dòng này: (vl-load-com) ở dưới cùng xem thế nào.!


  • 0

#28 tuan138

tuan138

    biết zoom

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

Đã gửi 17 October 2016 - 02:44 PM

Add thử dòng này: (vl-load-com) ở dưới cùng xem thế nào.!

Vẫn không được bác ạ.

 

Báo lỗi tương tự.

 

Không biết do đâu nữa.

 

Thanks bác nhiều nhiều đã trả lời.


  • 0

#29 quocmanh04tt

quocmanh04tt

    biết lệnh imageclip

  • Members
  • PipPipPipPipPipPipPip
  • 673 Bài viết
Điểm đánh giá: 315 (khá)

Đã gửi 17 October 2016 - 02:56 PM

Khám bệnh nhé!

ở dòng: (while (< 1 (length vLst)) ... => chương trình tiếp tục thực hiện nếu số điểm > 1

Với số điểm còn lại là 2 thì sao? => Nó không vẽ được Arc và báo lỗi như trên.

=> Giải quyết (while (< 2 (length vLst))

​*** Sẽ xảy ra trường hợp như ndtnv nói ở bài trước "Lisp của Bee chỉ đổi 2 đoạn liền nhau thành 1 arc, nếu số đoạn lẻ thì mất đoạn cuối"


  • 0

#30 tuan138

tuan138

    biết zoom

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

Đã gửi 17 October 2016 - 03:21 PM

Khám bệnh nhé!
ở dòng: (while (< 1 (length vLst)) ... => chương trình tiếp tục thực hiện nếu số điểm > 1
Với số điểm còn lại là 2 thì sao? => Nó không vẽ được Arc và báo lỗi như trên.
=> Giải quyết (while (< 2 (length vLst))
​*** Sẽ xảy ra trường hợp như ndtnv nói ở bài trước "Lisp của Bee chỉ đổi 2 đoạn liền nhau thành 1 arc, nếu số đoạn lẻ thì mất đoạn cuối"

Thanks bác quocmanh đã góp ý.
 
Thực tế mình cũng đã để kiểm tra điều kiện lặp để < 2 và đoạn cuối mình sẽ vẽ thủ công ( hoặc sẽ tìm hướng khác).
 
Nhưng lỗi vẫn xảy ra ngay sau khi lệnh hoàn thành vẽ xong cung đầu tiên:
; error: bad argument type: fixnump: nil
veCung1(303.672 61.0967)(303.196 86.5916)(303.166 102.487)
veCung2(303.166 102.487)(302.945 115.544)(302.426 128.673)
veCung3(302.426 128.673)(301.497 141.81)(300.6 150.605)
veCung4(300.6 150.605)(299.439 159.327)(297.909 167.818)
veCung5(297.909 167.818)(295.778 176.24)(292.924 184.246)
veCung6(292.924 184.246)(289.139 191.903)(279.726 192.438)
veCung7(279.726 192.438)(276.985 187.757)(274.943 182.75)
veCung8(274.943 182.75)(273.297 177.594)(271.866 172.402)
veCung9(271.866 172.402)(270.395 166.699)(269.054 161.551)
veCung10(269.054 161.551)(267.615 156.357)(255.503 130.658)
veCung11(255.503 130.658)(251.57 126.221)(247.214 122.322)
veCung12(247.214 122.322)(242.418 118.894)(239.925 117.382)
veCung13(239.925 117.382)(237.395 116.005)(234.692 114.679)
veCung14(234.692 114.679)(232.211 113.554)(228.937 112.119)
veCung15(228.937 112.119)(226.564 111.062)(224.846 110.252)
veCung16(224.846 110.252)(223.4 109.516)(222.028 108.733)
veCung17(222.028 108.733)(220.745 107.823)(219.97 107.031)
veCung18(219.97 107.031)(219.308 106.124)(217.874 103.587)
veCung19(217.874 103.587)(216.512 100.86)(215.178 98.1919)
veCung20(215.178 98.1919)(211.068 90.2457)(206.808 82.3809)
veCung21(206.808 82.3809)(200.866 72.0911)(194.531 62.033)
veCung22(194.531 62.033)(187.716 52.3445)(180.259 43.1943)
veCung23(180.259 43.1943)(174.794 37.4788)(168.88 32.1713)
veCung24(168.88 32.1713)(162.573 27.3949)(155.912 23.1944)
veCung25(155.912 23.1944)(148.913 19.5532)(141.597 16.4831)
veCung26(141.597 16.4831)(136.231 14.6741)(130.762 13.2067)
veCung27(130.762 13.2067)(126.625 12.3498)(120.085 11.4496)
veCung28(120.085 11.4496)(113.489 11.1358)(106.943 11.4039)
veCung29(106.943 11.4039)(100.441 12.2268)(91.8751 14.2384)
veCung30(91.8751 14.2384)(83.7115 17.2609)(76.0047 21.2671)
veCung31(76.0047 21.2671)(68.8179 26.2092)(62.2698 31.9591)
veCung32(62.2698 31.9591)(56.3633 38.4362)(51.2013 45.3988)
veCung33(51.2013 45.3988)(46.6914 52.8111)(42.7928 60.5928)
veCung34(42.7928 60.5928)(39.5356 68.4813)(36.776 76.6333)
veCung35(36.776 76.6333)(34.4396 85.1117)(33.2232 90.3103)
veCung36(33.2232 90.3103)(32.1118 95.5886)(31.0695 101.01)
veCung37(31.0695 101.01)(30.118 106.334)(29.2059 111.712)
veCung38(29.2059 111.712)(28.4002 116.603)(27.5707 121.671)
veCung39(27.5707 121.671)(26.7879 126.38)(25.9499 131.231)
veCung40(25.9499 131.231)(25.0535 136.1)(24.0827 140.921) 
 
Em thử in ra các tọa độ để lấy được thì định dạng vẫn rất ok:
 
 
Chắc tại do ACAD 2009 của em rồi.
  • 0

#31 Bee

Bee

    biết lệnh extend

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

Đã gửi 17 October 2016 - 03:36 PM

Khám bệnh nhé!

ở dòng: (while (< 1 (length vLst)) ... => chương trình tiếp tục thực hiện nếu số điểm > 1

Với số điểm còn lại là 2 thì sao? => Nó không vẽ được Arc và báo lỗi như trên.

=> Giải quyết (while (< 2 (length vLst))

​*** Sẽ xảy ra trường hợp như ndtnv nói ở bài trước "Lisp của Bee chỉ đổi 2 đoạn liền nhau thành 1 arc, nếu số đoạn lẻ thì mất đoạn cuối"

Mất đoạn cuối thì đúng rồi. Nhưng mà máy mình ko báo lỗi nào22222.png

 

3333.png


  • 0

#32 tuan138

tuan138

    biết zoom

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

Đã gửi 17 October 2016 - 03:53 PM

Mất đoạn cuối thì đúng rồi. Nhưng mà máy mình ko báo lỗi nào22222.png
 
3333.png


Em thử trên ACAD 2011 lisp chạy ngon lành.
Do CAD rồi.

Em cảm ơn bác Bee nhé!
  • 0

#33 Bee

Bee

    biết lệnh extend

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

Đã gửi 17 October 2016 - 04:00 PM

Em thử trên ACAD 2011 lisp chạy ngon lành.
Do CAD rồi.

Em cảm ơn bác Bee nhé!

Chạy ngon là tốt roài ^_^


  • 1