Đến nội dung


Hình ảnh
- - - - -

Nhờ viết thêm xuất ra text cho lisp


  • Please log in to reply
9 replies to this topic

#1 khanhmytho

khanhmytho

    biết pan

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

Đã gửi 12 August 2013 - 11:50 AM

_ Mình xem trên diễn đàn thấy lisp kick đo khoảng cách giữa 2 điểm rất hay mình có down về sử dụng và sửa đôi chút (do mình chỉ cần 2 điểm) lisp dùng quá tốt nhưng mình muốn xuất kết quả đó ra thay vào 1 text thì mình không làm được, anh em nào viết giúp tiếp cho mình phần này mình xin cám ơn nhiều. Lisp bên dưới

;----------------------------------------------------------
(defun c:dl()
(setq po1 (getpoint "\n Pick diem A :"))
(setq po2 (getpoint po1 "\n Pick diem B :"))
(setq S (+ (distance po1 po2) (distance po2 po1)))
(while 
(setq po4 (getpoint po2 "\n Pick diem tiep theo de tinh khoang cach/ Enter de ket thuc :"))
(setq S (+ S (distance po3 po4)) po3 po4)
)
(alert (strcat "Tong S = " (rtos S)))
(princ)
)
;---------------------------------------------------------- 

_ Xin chân thành cám ơn !!!!


  • 0

#2 tien51z37400

tien51z37400

    Chưa sử dụng CAD

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

Đã gửi 12 August 2013 - 12:30 PM

Nhờ các bác cao thủ viết dùm em lisp với  yêu cầu là : khi ta đánh lệnh chèn ( ví dụ chèn block cột điện hay hố ga gì đó ) nó sẽ hỏi chèn vào số thứ tự bao nhiêu ( ví dụ 1 , 8  , 25 , 36 v.v..) , xong  nó hỏi tiếp là chèn với tỷ lệ bao nhiêu ( ví dụ 1/1 hay 0.5 v.v..) . Tại vì em bên đo đạc khào sát nên khi trút số liệu từ máy ra để vẽ bình đồ thì file đó gồm có số thứ tự , cao độ . Mong các cao thủ ra tay nghĩa hiệp dùm em , em cám ơn trước nha . chúc các anh chị ngày đầu tuần vui vẻ .


  • 0

#3 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 12 August 2013 - 01:21 PM

_ Mình xem trên diễn đàn thấy lisp kick đo khoảng cách giữa 2 điểm rất hay mình có down về sử dụng và sửa đôi chút (do mình chỉ cần 2 điểm) lisp dùng quá tốt nhưng mình muốn xuất kết quả đó ra thay vào 1 text thì mình không làm được, anh em nào viết giúp tiếp cho mình phần này mình xin cám ơn nhiều. Lisp bên dưới

;----------------------------------------------------------
(defun c:dl()
(setq po1 (getpoint "\n Pick diem A :"))
(setq po2 (getpoint po1 "\n Pick diem B :"))
(setq S (+ (distance po1 po2) (distance po2 po1)))
(while 
(setq po4 (getpoint po2 "\n Pick diem tiep theo de tinh khoang cach/ Enter de ket thuc :"))
(setq S (+ S (distance po3 po4)) po3 po4)
)
(alert (strcat "Tong S = " (rtos S)))
(princ)
)
;---------------------------------------------------------- 

_ Xin chân thành cám ơn !!!!

Similar topics from web:
Lisp – Wikipedia tiếng Việt
Chia sẻ Bộ Lisp rất hay: ”Kho báu của Minh” [Lưu Trữ]
Hệ thập lục phân – Wikipedia tiếng Việt
Kinh ngiệm dùng CAD và LISP
Visual Lisp? [Lưu Trữ]
Ứng dụng lisp trong vẽ cad phục vụ dân cầu đường chuyên nghiệp
Phần mềm PKT 1.0 trong khảo sát thiết kế: Giảm thời gian, tránh sai ...
Lisp Cad hỗ trợ trong thiết kế | Lisp Cad ho tro trong thiet ke
Chuyên trang đào tạo kiến thức và phần mềm kỹ thuật hạ tầng đô thị ...
AutoCAD: Tin tức, hình ảnh, video clip về AutoCAD
Ngôn ngữ AutoLISP
[Nhờ viết lisp] Xuất cao độ từ CAD sang Notpad hoặc Excel ...
Làm sao lấy dữ liệu trong cad qua excel?
THIẾT KẾ TRÊN MÁY VI TÍNH
VBA for AutoCAD [Lưu Trữ]

Hề hề hề.

Chủ thớt thử chêm đoạn dưới đây vào dưới dòng code 

(alert (strcat "Tong S = " (rtos S)))

và trên dòng code 

(princ)

xem sao nhé.

 

(setq txt (car (entsel "\n Chọn text muon thay the"))
          elst (entget txt)
          elst (subst (cons 1 (rtos S 2 2) ) (assoc 1 elst) elst)
)
(entmod elst)
(setq txt (car (entsel "\n Chọn text muon thay the"))
          elst (entget txt)
          elst (subst (cons 1 (rtos S 2 2) ) (assoc 1 elst) elst)
)
(entmod elst)

(setq txt (car (entsel "\n Chon text muon thay the")))

         elst (entget txt)

         elst (subst (cons 1 (rtos S 2 2)) (assoc 1 elst) elst)

)

(entmod elst)


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

#4 khanhmytho

khanhmytho

    biết pan

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

Đã gửi 12 August 2013 - 01:32 PM

Hề hề hề.

Chủ thớt thử chêm đoạn dưới đây vào dưới dòng code 

(alert (strcat "Tong S = " (rtos S)))

và trên dòng code 

(princ)

xem sao nhé.

 

(setq txt (car (entsel "\n Chọn text muon thay the"))
          elst (entget txt)
          elst (subst (cons 1 (rtos S 2 2) ) (assoc 1 elst) elst)
)
(entmod elst)
(setq txt (car (entsel "\n Chọn text muon thay the"))
          elst (entget txt)
          elst (subst (cons 1 (rtos S 2 2) ) (assoc 1 elst) elst)
)
(entmod elst)

(setq txt (car (entsel "\n Chon text muon thay the")))

         elst (entget txt)

         elst (subst (cons 1 (rtos S 2 2)) (assoc 1 elst) elst)

)

(entmod elst)

Em đã thử nhưng vẫn không được :( 


  • 0

#5 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 12 August 2013 - 11:56 PM

Em đã thử nhưng vẫn không được :(

Hề hề hề,
Không được thì nó báo lỗi gì hả bạn???
Có nhẽ lỗi là do cái lisp của bạn đấy. Vì bạn nói lisp dùng chuẩn rồi nên mình chả sửa gì, nhưng thực ra lisp đó có lỗi đấy.
Cái điểm p03 lấy ở đâu mà có được (distance p03 p04) ???
Còn (setq S (+ (distance p01 p02) (distance p02 p01))) để làm chi vậy??? Tại sao phải cộng hai lần distance này???

Đoạn code mình đưa ra chỉ là để thay cái kết quả S vào cái text mà bạn muốn thay thôi. Nếu cái lisp của bạn không chạy đúng thì tất nhiên nó sẽ chả cho ra cái kết quả đúng đâu.

Bạn hãy rút kinh nghiệm khi dùng lisp.

Bài viết đã được chỉnh sửa nội dung bởi phamthanhbinh: 13 August 2013 - 12:09 AM

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

#6 khanhmytho

khanhmytho

    biết pan

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

Đã gửi 13 August 2013 - 08:28 AM

Hề hề hề,
Không được thì nó báo lỗi gì hả bạn???
Có nhẽ lỗi là do cái lisp của bạn đấy. Vì bạn nói lisp dùng chuẩn rồi nên mình chả sửa gì, nhưng thực ra lisp đó có lỗi đấy.
Cái điểm p03 lấy ở đâu mà có được (distance p03 p04) ???
Còn (setq S (+ (distance p01 p02) (distance p02 p01))) để làm chi vậy??? Tại sao phải cộng hai lần distance này???

Đoạn code mình đưa ra chỉ là để thay cái kết quả S vào cái text mà bạn muốn thay thôi. Nếu cái lisp của bạn không chạy đúng thì tất nhiên nó sẽ chả cho ra cái kết quả đúng đâu.

Bạn hãy rút kinh nghiệm khi dùng lisp.

Đoạn code đó là viết cho lisp khi kích 3 điểm đó anh nhưng em chỉ cần 2 điểm thôi, em sửa "lụi" nên nó ra thế mà không sao chỉnh lại tí sẽ ok thôi, còn đoạn code anh gửi cho em thì nó có hiện ra dòng lệnh chọn text muốn thay thế nhưng khi kích vào text thì nó không thay thế được, đoạn code đã chỉnh sửa và thêm vào code của anh như sau : 

(defun c:dl()
(setq po1 (getpoint "\n Pick diem A :"))
(setq po2 (getpoint po1 "\n Pick diem B :"))
(setq S (+ (distance po1 po2)))
(while 
(setq po4 (getpoint po2 "\n Pick diem tiep theo de tinh khoang cach/ Enter de ket thuc :"))
(setq S (+ S (distance po1 po2)))
)
(alert (strcat "Tong S = " (rtos S)))
(setq txt (car (entsel "\n Chon text muon thay the")))
         elst (entget txt)
         elst (subst (cons 1 (rtos S 2 2)) (assoc 1 elst) elst)
)
(entmod elst)
(princ)
)

_ Thật ra thì nó giống như lệnh di của cad nhưng thêm phần thay thế vào text :)). Cám ơn anh đã quan tâm !!!


  • 0

#7 Doan Van Ha

Doan Van Ha

    biết lệnh adcenter

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

Đã gửi 13 August 2013 - 08:39 AM

Thừa 1  dấu ngoặc đóng ở dòng này:

(setq txt (car (entsel "\n Chon text muon thay the")))


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


#8 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 13 August 2013 - 10:02 AM

Thừa 1  dấu ngoặc đóng ở dòng này:

(setq txt (car (entsel "\n Chon text muon thay the")))

Hề hề hề,

Thank bác DoanVanHa, đúng là mình không kiểm tra lại code trước khi post vì nghĩ nó đơn giản. Song nếu vậy thì load lisp nó sẽ báo lỗi chứ không thể chạy lisp đến tận dòng code đó được.

Hình như chủ thớt không test lisp hay sao ấy, chứ nguyên code cũ của chủ thớt cũng khó mà chạy ra kết quả đúng được bác ạ.

Hề hề hề,...


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

#9 khanhmytho

khanhmytho

    biết pan

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

Đã gửi 13 August 2013 - 11:49 AM

Hề hề hề,

Thank bác DoanVanHa, đúng là mình không kiểm tra lại code trước khi post vì nghĩ nó đơn giản. Song nếu vậy thì load lisp nó sẽ báo lỗi chứ không thể chạy lisp đến tận dòng code đó được.

Hình như chủ thớt không test lisp hay sao ấy, chứ nguyên code cũ của chủ thớt cũng khó mà chạy ra kết quả đúng được bác ạ.

Hề hề hề,...

ỌC em có test mà anh trai, vì em đang cần nên có test thấy không được nên em mới pm nè, chứ không test thì sao em lại pm là không xuất được kết quả :D 


  • 0

#10 khanhmytho

khanhmytho

    biết pan

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

Đã gửi 13 August 2013 - 12:08 PM

Tình hình là em dùng Ok rồi xin cám ơn anh 

phamthanhbinh và anh Doan Van Ha rất nhiều :D
  • 0