Đến nội dung


Hình ảnh
- - - - -

[Yeu cau] lisp vẽ đường electrical


  • Please log in to reply
17 replies to this topic

#1 anpha3

anpha3

    biết vẽ arc

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

Đã gửi 17 April 2013 - 01:51 PM

Nhờ Các Bác trên diễn đàn viết hộ em 1 lisp vẽ đường điện như sau:

file dữ liệu là file excel.csv gồm có:

+TT.

+Khoảng cách

+Góc lái.

+Block

 

file kết quả là file cad như ví dụ em gửi

Cám ơn Các Bác

http://www.cadviet.c...98866_vi_du.rar


  • 0

#2 anpha3

anpha3

    biết vẽ arc

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

Đã gửi 18 April 2013 - 02:10 PM

Nhờ Bác Bình;Bác Ketxu và các bác trên diễn đàn giúp em với. Em cám ơn các Bác nhiều.


  • 0

#3 anpha3

anpha3

    biết vẽ arc

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

Đã gửi 20 April 2013 - 09:06 AM

Xin Kính Nhờ Các Bác Cao thủ trên diễn đàn giúp đỡ Em.


  • 0

#4 phamthanhbinh

phamthanhbinh

    biết lệnh adcenter

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

Đã gửi 21 April 2013 - 01:29 PM

Xin Kính Nhờ Các Bác Cao thủ trên diễn đàn giúp đỡ Em.

Hề hề hề,

Bạn dùng thử cái này coi đã đúng ý bạn hay chưa nhé. Do không phải chuyên ngành của bạn nên mình đoán mò theo cái bản vẽ bạn gửi lên thôi, không rõ có đúng ý đồ của bạn hay không. Mình gửi lên để bạn kiểm tra , nếu được sẽ hoàn chỉnh sau.

Bạn lưu ý cần sửa lại cái file csv để CAD có thể không nhầm lẫn như sau:

1/- Xóa toàn bộ các dòng tiêu đề, chỉ để lại các dòng dữ liệu sử dụng.

2/- Sửa các text ghi góc lái, bỏ dấu " sau con số chỉ giây hoặc bạn đổi các giá trị này về giá trị thập phân của độ. Tỷ như 38o29'54" thành 38o29'54 hoặc 38.49833 độ. Lưu ý rằng khi bạn không chuyển về giá trị thập phân theo độ thì CAD sẽ chỉ nhận góc chẵn độ đễ tính toán tức là 38 độ còn số lẻ sẽ bị bỏ qua.

Hãy test thử và nếu có gì chưa ưng ý hãy post lên để mình xem lại.

 

(defun c:vdd ()
(setq  fn (getfiled "Select Data File" "" "csv" 0)
            f (open fn "r")
            k 1 
)
(command "undo" "be")
(setq p1 (getpoint "\n Nhap diem bat dau ve"))
(setq a1 (getreal "\n Nhap goc bat dau ve theo radian: "))
(while (and  (/= (setq str (read-line f)) nil) (/= (atof str) 0.0))
       (setq lst (separate str (chr 44)))
       (setq lst1 (separate (nth 2 lst) "="))
       (if (> (length lst1) 1)
           (progn
                    (if (= (nth 0 lst1) "T")
                        (progn 
                                 (command "insert" (nth 3 lst)  p1 1 1 (+ (/ (* 180 a1) pi) (/ (atof (nth 1 lst1)) 2 )))
                                 (command "pline" p1 (setq p1 (polar p1 (setq a1 (+ a1 (/ (* pi (atof (nth 1 lst1))) 180))) (atof (nth 1 lst)))) "")
                                 
                        )
                        (progn
                                 (command "insert" (nth 3 lst)  p1 1 1 (- (/ (* 180 a1) pi) (/ (atof (nth 1 lst1)) 2)))
                                 (command "pline" p1 (setq p1 (polar p1 (setq a1 (-  a1 (/ (* pi (atof (nth 1 lst1))) 180))) (atof (nth 1 lst)))) "")
                                 
                        )
                    )
          )
          (progn   
                    (command "insert" (nth 3 lst)  p1 1 1 (+ (/ (* 180 a1) pi) (atof (nth 2 lst))))                 
                    (command "pline" p1 (setq p1 (polar p1 (+ a1 (atof (nth 2 lst))) (atof (nth 1 lst)))) "")
                    
          )
       )
)
(command "undo" "e")
)
 
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(defun Separate (S sym / i L ch)
(setq i 0 L nil)
(while (< i (strlen S))
      (setq i (1+ i) ch (substr S i 1))
      (if (= ch sym) (progn
(setq
     L (append L (list (substr S 1 (- i 1))))
     S (substr S (1+ i) (- (strlen S) i))
     i 0
)
      ))
)
(append L (list S))
)      

  • 0
Chúc các quý Anh trên diễn đàn luôn khỏe, đẻ thêm được nhiều thứ để mót.

#5 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 21 April 2013 - 02:27 PM

Hề hề hề!

Bác Bình "phải có trách nhiệm" lấy được giá trị góc kiểu 1d2'3" chứ ai lại bắt bỏ cái " đi (dùng substr thô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.


#6 anpha3

anpha3

    biết vẽ arc

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

Đã gửi 21 April 2013 - 03:11 PM

Cám ơn Bác Bình Và Bác Hà Giúp Em . Em Chạy Lisp của Bác Đúng Với Công Việc của Em rồi. Nhưng Bác giúp em bổ sung cho em thêm 1 số ý như sau:

+ Như Ý Bác Hà Ngợi Ý lấy giá trị góc kiểu 1d2'3'' Bác Ạ.

+ Bác bổ sung cho em thứ tự cột và khoảng cách cột nữa.

Cám ơn các Bác chúc các bác có 1 ngày chủ nhật vui vẻ !


  • 0

#7 phamthanhbinh

phamthanhbinh

    biết lệnh adcenter

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

Đã gửi 21 April 2013 - 07:34 PM

Cám ơn Bác Bình Và Bác Hà Giúp Em . Em Chạy Lisp của Bác Đúng Với Công Việc của Em rồi. Nhưng Bác giúp em bổ sung cho em thêm 1 số ý như sau:

+ Như Ý Bác Hà Ngợi Ý lấy giá trị góc kiểu 1d2'3'' Bác Ạ.

+ Bác bổ sung cho em thứ tự cột và khoảng cách cột nữa.

Cám ơn các Bác chúc các bác có 1 ngày chủ nhật vui vẻ !

Hề hề hề,

1/- Cái việc bắt lisp phải cắt không phải quá khó, song quả thực chả biết chủ thớt còn những kiểu ghi góc gì nữa nên hơi lười. Theo góp ý của bác DoanVanHa mình đã bổ sung việc này, song nếu chủ thớt lại đổi kiểu ghi góc lái thì lisp này sẽ thua.

2/- Bổ sung thêm phần ghi khoảng cách giữa các cột và đánh số cột. Tuy nhiên cũng do lười nên mình không sử dụng hàm con cho nó nên code hơi rườm rà. Chủ thớt hoặc các bác khác có thể gom thành một hàm con để làm việc này thì code sẽ gọn gàng và oai hơn nhiều.

 

Hề hề hề,

 

 

(defun c:vdd (/ fn f p1 a1 lst lst1)
(setq  fn (getfiled "Select Data File" "" "csv" 0)
            f (open fn "r")
)
(command "undo" "be")
(setq p1 (getpoint "\n Nhap diem bat dau ve"))
(setq a1 (getreal "\n Nhap goc bat dau ve theo radian: "))
(while (and  (/= (setq str (read-line f)) nil) (/= (atof str) 0.0))
       (setq lst (separate str (chr 44)))
       (setq lst1 (separate (substr (nth 2 lst) 2 (- (strlen (nth 2 lst)) 2)) "="))
       (if (> (atof (nth 1 lst)) 0.0)
       (if  (> (length lst1) 1) 
           (progn
                    (if (= (nth 0 lst1) "T")
                        (progn 
                                 (command "insert" (nth 3 lst)  p1 1 1 (+ (/ (* 180 a1) pi) (/ (atof (nth 1 lst1)) 2 )))
                                 (setvar "cecolor" "6")
                                 (command "circle" (polar p1 (-  a1 (/ pi 2)) 10) 5)
                                 (setvar "cecolor" "0")
                                 (command "text" "j" "mc" (polar p1 (- a1 (/ pi 2)) 10) 4 (* 180 (/ a1 pi)) (itoa (1- (atoi (nth 0 lst)))))
                                 (command "pline" p1 (setq p1 (polar p1 (setq a1 (+ a1 (/ (* pi (atof (nth 1 lst1))) 180))) (atof (nth 1 lst)))) "")
                                 (command "text" "j" "mc" (polar (polar p1 (- a1 pi) (/ (atof (nth 1 lst)) 2)) (+ a1 (/ pi 2)) 5) 2.5 (* 180 (/ a1 pi)) 
 
(nth 1 lst))
                        )
                        (progn
                                 (command "insert" (nth 3 lst)  p1 1 1 (- (/ (* 180 a1) pi) (/ (atof (nth 1 lst1)) 2)))
                                 (setvar "cecolor" "6")
                                 (command "circle" (polar p1 (-  a1 (/ pi 2)) 10) 5)
                                 (setvar "cecolor" "0")
                                 (command "text" "j" "mc" (polar p1 (- a1 (/ pi 2)) 10) 4 (* 180 (/ a1 pi)) (itoa (1- (atoi (nth 0 lst)))))
                                 (command "pline" p1 (setq p1 (polar p1 (setq a1 (-  a1 (/ (* pi (atof (nth 1 lst1))) 180))) (atof (nth 1 lst)))) "")
                                 (command "text" "j" "mc" (polar (polar p1 (- a1 pi) (/ (atof (nth 1 lst)) 2)) (+ a1 (/ pi 2)) 5) 2.5 (* 180 (/ a1 pi)) 
 
(nth 1 lst))
                        )
                    )
          )
          (progn   
                    (command "insert" (nth 3 lst)  p1 1 1 (+ (/ (* 180 a1) pi) (atof (nth 2 lst)))) 
                    (setvar "cecolor" "6")
                    (command "circle" (polar p1 (-  a1 (/ pi 2)) 10) 5)
                    (setvar "cecolor" "0")
                    (command "text" "j" "mc" (polar p1 (- a1 (/ pi 2)) 10) 4 (* 180 (/ a1 pi)) (itoa (1- (atoi (nth 0 lst)))))
                    (command "pline" p1 (setq p1 (polar p1 (+ a1 (atof (nth 2 lst))) (atof (nth 1 lst)))) "")
                    (command "text" "j" "mc" (polar (polar p1 (- a1 pi) (/ (atof (nth 1 lst)) 2)) (+ a1 (/ pi 2)) 5) 2.5 (* 180 (/ a1 pi)) (nth 1 
 
lst))
          )
       )
       )
)
(command "insert" (nth 3 lst)  p1 1 1 (+ (/ (* 180 a1) pi) (atof (nth 2 lst)))) 
(setvar "cecolor" "6")
(command "circle" (polar p1 (-  a1 (/ pi 2)) 10) 5)
(setvar "cecolor" "0")
(command "text" "j" "mc" (polar p1 (- a1 (/ pi 2)) 10) 4 (* 180 (/ a1 pi)) (nth 0 lst))
(command "undo" "e")
)
 
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(defun Separate (S sym / i L ch)
(setq i 0 L nil)
(while (< i (strlen S))
      (setq i (1+ i) ch (substr S i 1))
      (if (= ch sym) (progn
(setq
     L (append L (list (substr S 1 (- i 1))))
     S (substr S (1+ i) (- (strlen S) i))
     i 0
)
      ))
)
(append L (list S))
)      

  • 0
Chúc các quý Anh trên diễn đàn luôn khỏe, đẻ thêm được nhiều thứ để mót.

#8 anpha3

anpha3

    biết vẽ arc

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

Đã gửi 21 April 2013 - 08:49 PM

Bác Bình ơi Bác xem lại hộ em xem cứ đến đoạn góc là lisp dùng lại không chạy nữa Bác ạ.

file số liệu đây bác ạ:


  • 0

#9 anpha3

anpha3

    biết vẽ arc

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

Đã gửi 21 April 2013 - 09:11 PM

Sao mãi em mới úp đwowcj lên Bác Ạ

http://www.cadviet.c...ile_du_lieu.rar


  • 0

#10 phamthanhbinh

phamthanhbinh

    biết lệnh adcenter

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

Đã gửi 21 April 2013 - 11:38 PM

Sao mãi em mới úp đwowcj lên Bác Ạ

http://www.cadviet.c...ile_du_lieu.rar

Hề hề hề,

Lỗi là do bạn đã sử dụng dạng format khác với file mẫu bạn đã gửi. Mình không thể biết bạn sẽ sử dụng bao nhiêu loại format khác nhau nên không thể cho ra một lisp có thể đọc mọi loại format oái oăm của bạn. Vì thế bạn nên thống nhất một dạng format thể hiện giá trị góc lái này. nên sử dụng như bản vẽ bạn đã post hoặc dạng thể hiện số đo độ theo dạng thập phân như mình đã post ở bài trước.

Còn nếu bạn muốn sử dụng dạng format kiểu 28d21'54" thì bạn phải chịu khó sửa lại dòng code:

(setq lst1 (separate (substr (nth 2 lst) 2 (- (strlen (nth 2 lst)) 2)) "="))

thành:

(setq lst1 (separate (substr (nth 2 lst) 2 4) "="))

và test thử coi sao.


  • 0
Chúc các quý Anh trên diễn đàn luôn khỏe, đẻ thêm được nhiều thứ để mót.

#11 anpha3

anpha3

    biết vẽ arc

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

Đã gửi 23 April 2013 - 03:18 PM

Thanhk Bác Bình. CAD sẽ chỉ nhận góc chẵn độ đễ tính toán. Bác và các Bác trên diễn đàn cho em hỏi có cách nào để tính táon chính xác góc có cả độ phút và giây không. Nếu có nhờ các Giúp em .Cám ơn các Bác nhiều!


  • 0

#12 phamthanhbinh

phamthanhbinh

    biết lệnh adcenter

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

Đã gửi 23 April 2013 - 04:24 PM

Thanhk Bác Bình. CAD sẽ chỉ nhận góc chẵn độ đễ tính toán. Bác và các Bác trên diễn đàn cho em hỏi có cách nào để tính táon chính xác góc có cả độ phút và giây không. Nếu có nhờ các Giúp em .Cám ơn các Bác nhiều!

Hề hề hề,

Thực ra không phải lỗi do CAD mà là do hàm (atof ...) trong lisp. Để có thể nhận được đúng kết quả thì số đo góc của bạn nên được thể hiện dưới dạng số đo thập phân của độ như trong bài trước mình đạ đề cập. Như vậy khi hàm (atof .....) làm việc nó sẽ trả về đúng giá trị số đo của góc mà không mất đi một li một lai nào.


  • 0
Chúc các quý Anh trên diễn đàn luôn khỏe, đẻ thêm được nhiều thứ để mót.

#13 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 23 April 2013 - 04:55 PM

Ơ hay! Sao không angtof mà atof bác Bình nhỉ?


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


#14 phamthanhbinh

phamthanhbinh

    biết lệnh adcenter

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

Đã gửi 24 April 2013 - 12:20 PM

Ơ hay! Sao không angtof mà atof bác Bình nhỉ?

Hề hề hề,

Sorry all. Lỗi là do mình dốt thôi. Cái hàm (angtof....)  mình chửa xài bao giờ (hoặc là quá ít dùng) nên không biết là có nó. Còn cái thằng (atof ...) thì quen mặt rồi nên cứ thế mà dùng chứ cũng chả nghĩ ngợi gì nhiều bác ạ.

Để mình ngâm cứu thêm thằng này rồi sẽ sửa lisp sau vậy.

Hề hề hề,...

 

Chu choa, dùng cái thằng (angtof ... ) xem ra còn oái oăm hơn (atof .... ) bác ạ. Vì nếu format chuỗi số đo góc trong Excel mà hổng giống ai như của chủ thớt thì (angtof .... ) nó luôn trả về nil bác ạ. 

Thôi thì cứ (atof ....) cho nó lành vậy. Ít ra còn có chút hiêu hiểu về nó mà chọc ngoáy tùy theo dạng format của chủ thớt vậy.


  • 0
Chúc các quý Anh trên diễn đàn luôn khỏe, đẻ thêm được nhiều thứ để mót.

#15 anpha3

anpha3

    biết vẽ arc

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

Đã gửi 24 April 2013 - 05:03 PM

Vâng Vậy nhờ Bác Bình sửa lại lisp giúp em cho độ chính xác của góc cao. 


  • 0

#16 phamthanhbinh

phamthanhbinh

    biết lệnh adcenter

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

Đã gửi 25 April 2013 - 03:37 PM

Vâng Vậy nhờ Bác Bình sửa lại lisp giúp em cho độ chính xác của góc cao. 

Hề hề hề,

Chịu chết nếu như chả biết bạn format cái text trong excels theo kiểu gì bạn ạ.


  • 0
Chúc các quý Anh trên diễn đàn luôn khỏe, đẻ thêm được nhiều thứ để mót.

#17 anpha3

anpha3

    biết vẽ arc

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

Đã gửi 25 April 2013 - 03:55 PM

Dạ Em không hiểu hàm trong cad nhận góc trong dữ liệu đầu vào như thế nào .Vậy Em nhờ Bác sửa hộ em dữ liệu đầu vào của góc của text trong excel để hàm có thể vẽ chính xác độ, phút , giây. Em cám ơn Bác nhiều...


  • 0

#18 phamthanhbinh

phamthanhbinh

    biết lệnh adcenter

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

Đã gửi 25 April 2013 - 04:20 PM

Dạ Em không hiểu hàm trong cad nhận góc trong dữ liệu đầu vào như thế nào .Vậy Em nhờ Bác sửa hộ em dữ liệu đầu vào của góc của text trong excel để hàm có thể vẽ chính xác độ, phút , giây. Em cám ơn Bác nhiều...

Hề hề hề,

Như mình đã nói rồi mà. Cái hàm (atof ...) thì nó nhận theo cách format là số đo độ theo hệ thập phân là chuẩn nhất. Tỷ như 21d52' 48'' thì bạn nên đổi thành 21.88 độ

Còn với hàm (angtof .... ) thì số đo độ ghi trên excel lại phải trùng khớp với cách ghi số đo góc trong CAD. Điều này không hề dễ dàng bởi các số liệu đọc từ excel đều được CAd hiểu theo nghĩa là các chuỗi text chứ không phải chuỗi ký tự đơn vị đo góc. Vì thế hầu hết các chuỗi này khi dùng hàm (angtof .....) đều bị trả về nil. Mình cũng chưa biết cách xử lý vấn đề này. Có nhẽ sẽ có các bác khác giúp bạn. Mình chỉ mới biết sơ sơ là hàm (angtof ....) sẽ trả về đúng giá trị của góc nếu như chuỗi ký tự trong hàm là nhận được từ hàm (angtos ....). Do chưa biết cách chuyển chuỗi ký tự từ excel thành chuỗi tương tự như của hàm (angtos....) nên đành bó ..... lisp bạn ạ.

Theo quan điểm hơi chuối của mình thì cứ mèo nào bắt được chuột là mèo tốt nên bạn hãy thử dùng hàm (atof ....) theo cái cách mà mình gợi ý trên xem nó có ngon lành không nào. Việc chuyển dữ liệu từ số đo độ theo độ phút giây thành số đo dộ theo hệ thập phân trong excel không phải là quá khó nếu như bạn sử dụng excel thành thạo. Với các hàm có sẵn trong excel, bạn chỉ cần lập một công thức rồi quét một nhát là ăn tiền, khỏi phải lăn tăn này nọ bạn ạ.

Chúc bạn thành công.


  • 0
Chúc các quý Anh trên diễn đàn luôn khỏe, đẻ thêm được nhiều thứ để mót.