Chuyển đến nội dung
Diễn đàn CADViet
Nguyen Hoanh

Viết Lisp theo yêu cầu

Các bài được khuyến nghị

chào các bạn, mong các bạn jup đỡ. mình cần 1 lisp có thể làm như sau : mình hay phải sửa bản vẽ của dân kiến trúc, họ hay vẽ mặt cắt với cỡ chữ rất to.khi mình cho nhỏ lại thì các chữ cách nhau rất xa (6 6) và phải chỉnh cho gan lại (6 6) (có rất nhiều mặt cắt => sửa rất nhiều lần ) các bạn có thể cho mình 1 lisp mỗi khi click vào mặt cắt ( ví dụ 6 6 ) nó sẽ tự cho gần lại với khoảng cách do mình chọn đuợc kô nếu làm được với muti nữa thì tốt wa, cảm ơn các bạn rất nhiều. hình ảnh minh hoạ

http://www.cadviet.com/upfiles/untitled_85.jpg

Đầu tiên, có thể bạn sử dụng lệnh Tjust để chuyển một chữ căn lề trái, một chữ căn lề phải ( mà không bị thay đổi vị trí của text) theo bạn Nataca. Hoặc có thể bạn không dùng cũng được. sau này bạn move ra một chút

. Và bạn sử dụng đoạn Code của mình để thực hiện ý muốn của mình.

Dưới đây là Code :

;;;;;;
(defun C:SCC ()
(prompt "Ban chon doi tuong text :")
(princ "\nSelect object :")
(setq obj (ssget))
(setq c1 (getdist "Cho khoang cach 2 text dau :")) (terpri)
(setq c2 (getdist "Cho khoang cach 2 text cuoi :")) (terpri)
(setq base (getpoint "Diem giua 2 text :")) (terpri)

(setq TL (/ C2 C1))
(command "scale" obj "" base TL)
(tt)
)







;;; --------------------------------------------------------------------------
;;; Thay doi chieu cao TEXT:
(DEFUN TT (/ G A B C D E F)
(SETVAR "CMDECHO" 0)

(INITGET 1 "S H ")
(SETQ G (STRCASE (SUBSTR (getkword "Height/: ")1 1)))
(COND
((OR (= G "S") (= G " "))
 (SETQ A (SSGET "p"))
 (SETQ B (SSLENGTH A))
 (INITGET 7) (SETQ C (GETDIST "\nKich thuoc TEXT moi: "))
 (WHILE
  (> B 0)
(SETQ B (1- B))
(SETQ D (SSNAME A B))
(SETQ D (ENTGET D))
(IF (= "TEXT" (CDR (ASSOC 0 D)))
 (PROGN
 (SETQ E (ASSOC 40 D))
 (SETQ F (CONS 40 C))
 (ENTMOD (SETQ D (SUBST F E D)))))
)
(SETQ A NIL)
)
((= G "H")
(INITGET 7) (SETQ A (GETDIST "\Chieu cao loai Texts can thay doi: "))
(SETQ B (FIX (* 100 A)))
(INITGET 7) (SETQ C (GETDIST "\Thay doi chieu cao thanh: "))
(SETQ D (ENTNEXT))
(SETQ E (CONS 40 C))
(WHILE
 D
  (PRINC "-> ")
  (SETQ F (ASSOC 0 (ENTGET D)))
  (IF
(= "TEXT" (CDR F))
 (PROGN
  (SETQ F (ASSOC 40 (ENTGET D)))
  (SETQ G (FIX (* 100 (CDR F))))
  (IF
   (= B G)
   (ENTMOD (SUBST E F (ENTGET D)))
  )
 )
)
  (SETQ D (ENTNEXT D))
 )
)
)
(PRINC)
)
;;; ---------------------------------------------------------------------------

Để mình giải thích .

Đoạn code trên dựa trên lệnh scale với điểm chèn là trung điểm của đường thẳng nối 2 text.

Và tỉ lệ của lệnh Scale trên bằng khoảng cách 2 text đầu (chữ to) chia cho khoảng cách 2 text cuoi (là khoảng cách do mình chọn lúc cuối cùng)

Mục đích là để thu hẹp khoảng cách của 2 text. Sau đó sử dụng hàm tt để thay đổi chiều cao của 2 text đó :

Ở dòng lệnh :

Height/Select:

Nếu bạn chọn S thì : chương trình bảo bạn nhập kích thước text mới

Nếu bạn chọn H thì : chương trình bảo bạn chọn Chieu cao loai Texts can thay doi và chiều cao text thay doi chieu cao thanh:

Trong trường hợp này bạn nên chọn S

Còn bạn muốn thực hiện lệnh là multiple

thì bạn hãy gõ

Command : multiple

 

Enter command name to repeat: scc

....

 

Bạn có thể thiết lập lệnh tắt multiple trong file acad.pgp

 

 

 

Nhớ thanks ủng hộ nhé.

Chúc vui :leluoi:

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

Các bác ui ! Viết giúp em cái Lisp đổi font chữ của các Style,Em hay làm NOVA cần đổi Font của Style " Chuso" và "Standar" sang Font .VNarial Narrow . Và đổi Font của Style tên cọc và Style "Tieude","Tencoc" thành Font .VNarial NarrowH.( Font ban đầu của nó là TXT.SHX) .Các bác viết júp em nhé . Thanks !!

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
Các bác ui ! Viết giúp em cái Lisp đổi font chữ của các Style,Em hay làm NOVA cần đổi Font của Style " Chuso" và "Standar" sang Font .VNarial Narrow . Và đổi Font của Style tên cọc và Style "Tieude","Tencoc" thành Font .VNarial NarrowH.( Font ban đầu của nó là TXT.SHX) .Các bác viết júp em nhé . Thanks !!

bạn đã dùng thử lệnh STYLE chưa?

 

bạn có thể upload file mẫu lên diễn đàn được không?

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
Mình tìm trên diễn đàn có lisp tính tổng số các Text, ai có thể cho mình xin trừ Text được không?

vi du: 6 - 3 = 3, cám ơn nhiều.

Bạn có thê upload file lisp tính tổng số các Text của bạn được không?

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
Mình tìm trên diễn đàn có lisp tính tổng số các Text, ai có thể cho mình xin trừ Text được không?

vi du: 6 - 3 = 3, cám ơn nhiều.

Bạn dùng lisp thêm dấu trừ phía trước các số muốn trừ rồi dùng lisp cộng như bình thường.

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

đoạn code này sai ở chỗ nào vậy các bạn? Ai biết xin chỉ giáo dùm

 
(defun c:vtd ()
 (setq n 1)
 (setq pt1 (list 0 0))
 (repeat 10
   (setq pt2 (list n (+ n 0.5)))
   (setq n (1+  n))
   (command "line" pt1 pt2 " ")
   )
 (command "zoom" "e")
 )

Ai

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
File đây bạn, giúp gìm nhé.

http://www.cadviet.com/upfiles/2_3.dwg

Mình nói bạn upload file Lisp chứ đâu phải nói upload file dwg đâu.

Bạn có thê upload file lisp tính tổng số các Text lên đay nhé.

Bạn có thể mở file lisp đó của bạn ra và làm theo hướng dẫn của bạn duy782006

Bạn dùng lisp thêm dấu trừ phía trước các số muốn trừ rồi dùng lisp cộng như bình thường

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
Mình nói bạn upload file Lisp chứ đâu phải nói upload file dwg đâu.

Bạn có thê upload file lisp tính tổng số các Text lên đay nhé.

Bạn có thể mở file lisp đó của bạn ra và làm theo hướng dẫn của bạn duy782006

File lisp đây, xin lỗi nhé, mình làm theo bạn Duy thì mắc công quá, mỗi lần làm phải thêm dấu -

không tiện vì mình làm nhiều số lắm.

Đây là file tính tổng, bạn sửa lại thành trừ giúp mình, thank.

http://www.cadviet.com/upfiles/Add_1_1.lsp

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
Mình tìm trên diễn đàn có lisp tính tổng số các Text, ai có thể cho mình xin trừ Text được không?

vi du: 6 - 3 = 3, cám ơn nhiều.

Cái nhà bác này nói khó hiểu quá,

Trừ Text nghĩa là thế nào nhỉ? Đếm số text trong một bản vẽ rồi trừ đi hay sao? Hay là có một chuỗi text, bạn muốn cắt đi vài chữ cái trong đó???

Ví dụ của bác lại là một phép tính trừ?? Hay bác muốn lisp biểu diễn phép tính trừ theo kiểu text : Sáu trừ ba bằng ba ???? hu hu khó hiểu quá.

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
Cái nhà bác này nói khó hiểu quá,

Trừ Text nghĩa là thế nào nhỉ? Đếm số text trong một bản vẽ rồi trừ đi hay sao? Hay là có một chuỗi text, bạn muốn cắt đi vài chữ cái trong đó???

Ví dụ của bác lại là một phép tính trừ?? Hay bác muốn lisp biểu diễn phép tính trừ theo kiểu text : Sáu trừ ba bằng ba ???? hu hu khó hiểu quá.

Đơn giản thôi mà, có lisp tính tổng ở trên, mình chỉ muốn sửa lại để làm tính trừ thôi.

Vd: lisp tổng ở trên tính là 6 + 3 = 9, mình muốn sửa lại lisp trên thành 6 - 3 = 3.

cám ơn.

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
Đơn giản thôi mà, có lisp tính tổng ở trên, mình chỉ muốn sửa lại để làm tính trừ thôi.

Vd: lisp tổng ở trên tính là 6 + 3 = 9, mình muốn sửa lại lisp trên thành 6 - 3 = 3.

cám ơn.

Chân thành góp ý bạn nhé:

1-Phép toán tổng đã bao hàm hiệu. Muốn hiệu thì biến của người dùng nhập phải âm

2-Bạn đừng cho là mất công vì việc nhấn đúp text để thêm dấu - là việc cần thiết; nếu ko riết 1 hồi mãi mê làm quay lại kiểm tra bạn biết số nào là hiệu của các số và ngược lại?

3-Nếu bạn chỉ thuần dùng phép trừ thì mở file trong Notepad dùng lệnh thay ký tự + thành ký tự -. Hic nhưng mà về mặt thuật toán lập trình thì có vẽ nhiêu khê.

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
Chân thành góp ý bạn nhé:

1-Phép toán tổng đã bao hàm hiệu. Muốn hiệu thì biến của người dùng nhập phải âm

2-Bạn đừng cho là mất công vì việc nhấn đúp text để thêm dấu - là việc cần thiết; nếu ko riết 1 hồi mãi mê làm quay lại kiểm tra bạn biết số nào là hiệu của các số và ngược lại?

3-Nếu bạn chỉ thuần dùng phép trừ thì mở file trong Notepad dùng lệnh thay ký tự + thành ký tự -. Hic nhưng mà về mặt thuật toán lập trình thì có vẽ nhiêu khê.

Cám ơn, mình đã làm được rồi.

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

Xin chào mọi người!

 

Có thể viết giúp mình Lisp với ứng dụng như sau:

- Dùng window quét một biên dạng bất kì (chủ yếu xuất từ 3D qua) sẽ lấy được (Xmax,Ymax) và (Xmin,Ymin) của biên dạng đó.(Biên dạng là tập hơp nhiều line, spline.... được xuất từ 3D qua.)

Mụch đích: Sử dụng để cắt phôi trong thiết kế khuôn mẫu.

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
Bạn có thể post yêu cầu về autolisp ở topic này.

Bác Hoành oi cho tôi xin 1 cái líp như vầy: chọn 1 đối tượng rồi mình ra lệnh thì cad tự tạo 1 layẻ mới và gán đối tượng mình chọn cho layẻ mới tạo, xin cám ơn.

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
Bác Hoành oi cho tôi xin 1 cái líp như vầy: chọn 1 đối tượng rồi mình ra lệnh thì cad tự tạo 1 layẻ mới và gán đối tượng mình chọn cho layẻ mới tạo, xin cám ơn.

Mình không hiểu ý bạn. Đối tượng có rất nhiều thuộc tính.

Bạn gán như thế nào? Có thể nói rõ hơn không?

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
Mình không hiểu ý bạn. Đối tượng có rất nhiều thuộc tính.

Bạn gán như thế nào? Có thể nói rõ hơn không?

cám ơn bạn đã quan tâm, đơn giản là đưa đối tượng đó về layer vừa tạo thui

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
cám ơn bạn đã quan tâm, đơn giản là đưa đối tượng đó về layer vừa tạo thui

Bạn dùng đoạn code này nhé :

(defun c:DLM () 
 (prompt "Doi cac doi tuong chon sang layer moi ")
(princ "\n Change: Doi sang layer moi")
 (setq tue (ssget))
 (if (null tue)
(progn 
(princ "\nLoi : Khong co doi tuong nao duoc chon.")
	 (exit)
)
 )
(command "layer" "m" "Newlayer" "c" "3" "" "" "")
 (command "_.change" tue "" "P" "la" "newlayer" "") 
(princ)
)

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
làm theo bạn Duy thì mắc công quá, mỗi lần làm phải thêm dấu -

không tiện vì mình làm nhiều số lắm.

Mình nói dùng líp thêm dấu trừ nghĩa là có líp làm việc này. Bạn xem ở đây. NÓ làm cho nhiều text 1 lúc đó bạn.

http://www.cadviet.com/forum/index.php?showtopic=6991

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
Bạn dùng đoạn code này nhé :

(defun c:DLM () 
 (prompt "Doi cac doi tuong chon sang layer moi ")
(princ "\n Change: Doi sang layer moi")
 (setq tue (ssget))
 (if (null tue)
(progn 
(princ "\nLoi : Khong co doi tuong nao duoc chon.")
	 (exit)
)
 )
(command "layer" "m" "Newlayer" "c" "3" "" "" "")
 (command "_.change" tue "" "P" "la" "newlayer" "") 
(princ)
)

Bạn xem giùm mình file này có vấn đề gì mà load vào cad xài ko được, thanks

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
Các bác ơi mình học và làm vơi autoCAD lâu lắm rồi nhưng mình mới làm quen với lisp nên mình thấy lisp khó kiểmt ra lỗi quá các bác đi trước có kinh nghiệm chỉ mình cách sửa lỗi nhanh nhất với xin cảm ơn các bác rất nhiều

Để kiểm tra lỗi chính tả, bạn có thể dùng Vlide của Cad (gõ vlide tại dấu nhắc lệnh).

Vào Tool->Check text in Editor

 

Trong LISP có hàm *error* để bẫy lỗi, cách dùng bạn có thể tham khảo tại : http://www.cadviet.com/forum/index.php?sho...24&hl=error

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
Khách
Chủ đề này bây giờ đã bị đóng lại để trả lời thêm.

×