Chuyển đến nội dung
Diễn đàn CADViet
Jin Yong

Hỏi về Lisp (thuật toán, ý tưởng, coding,...)

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

Bạn Post trong box này môt thời gian rồi mà hình như có những quy tắc về việc post bài của box này bạn không chịu hiểu thì fải.

Nhữngc Lisp trên bạn lấy nó ở đâu thì hãy post yêu cầu đúng ở đó. mấy bài của bạn gần đây post lung tung hết cả, bạ chỗ nào cũng post được. bạn thử xem lại mà xem.

Yêu cầu trên của bạn mình đọc hoài rồi cũng vẫn chưa hiểu. mình đâu fải là bạn mà biết bản vẽ của bạn nó thế nào, diễn giải thế kia làm sao mình hiểu được. cách tốt nhất là bạn hãy up lên một bản vẽ. (và nếu có thể thì giải thích điều bạn muốn trong đó luôn như mọi người vẫn làm)

Bạn hãy post yêu cầu và bản vẽ của bạn cho đúng topic của lisp này. nếu giúp được mình sẵn lòng. Hi vọng bạn làm được.

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 lỗi, vì mình chưa hiểu hết các nội dung.

Thứ lỗi cho mình nha.

Chào bạn khaosat 2009,

Qua các bài viết của bạn mình thấy rằng bạn khá chịu khó sưu tầm các lisp và trong công việc của bạn có vẻ như lisp có tác dụng khá tốt. Nếu quả thực như vậy thì bạn rất nên tìm hiểu sâu hơn về lisp để bạn có thể đọc và hiểu được các lisp mà bạn đã sưu tầm được.

Bởi vì như bạn đã thấy, các lisp được mọi người viết ra đều chỉ nhằm cho một mục tiêu nhất định nào đó, có thể gần giống với yêu cầu của bạn chứ không thể hoàn toàn đúng như bạn muốn được đâu. Do đó nếu bạn hiểu được các lisp này có nghĩa là bạn sẽ có khả năng để chỉnh sửa nó cho thất đúng với ý muốn của bạn. Hơn nữa những người viết các lisp có thể có những suy luận khác nhau để cho ra một kết quả tương tự như nhau. Và nhờ đó khi bạn hiểu được các lisp này cũng có nghĩa là bạn sẽ biết thêm được cách suy luận của người viết lisp, và thế là bạn sẽ mót được thêm rất nhiều từ các lisp này chứ không chỉ đơn thuần là việc sử dụng nó bạn ạ.

Bản thân mình, để có thể sử dụng được các lisp này mình phải bỏ công ngồi đọc nó và gặm dần cho tới khi hiểu được, nhiều khi giắt răng phải gỡ mất mấy ngày mới xong một khúc lisp đó bạn ạ. Tuy nhiên nhờ đó mà mình no dần lên và cò thể tùy ý sử dụng chúng cho các mục tiêu của mình bạn ạ. Kinh nghiệm của mình cho thấy nếu chỉ load lisp về dùng mà không hiểu cặn kẽ nó thì nhiều phen mắc nghẹn lắm bạn ạ. Chả những nó chả chống đói được cho mình mà còn làm mình vãi cả mật xanh mật vàng ra, chạy thầy chạy thuốc khốn khổ mới gỡ được cái nghẹn đấy.

Diễn đàn thực ra chỉ có thể giúp để bạn có thể hiểu và vận dụng được lisp vào từng công việc cụ thể của bạn chứ chả thể làm thay cho bạn được đâu. Cho dù có rất nhiều bác giỏi về lisp nhưng không phải lúc nào các bác ấy cũng rảnh rang để có thể ngồi viết giùm bạn đúng như cái bạn cần được đâu. Tỷ dụ như đúng vào cái lúc bạn cần nhất, xếp thì giục toáy lên còn các bác ấy lại đương đi nghỉ mát thì bạn sẽ làm sao nhỉ??? Ấy là chưa kể tới việc do bạn diễn đạt hơi loăng ngoằng các bác ấy hiểu chưa đúng ý bạn và tống cho bạn một quả lisp chỉ đạt 60% yêu cầu của bạn, bạn lại vội vàng áp dụng nó liền thì chắc hẳn sẽ được xếp ca cho mát mặt đó. Vậy nên bạn rất cần phải có kiến thức cơ bản về lisp để có thể chủ động lựa chọn và tự tạo cho mình những công cụ thích hợp bằng lisp mà đối phó với công việc của mình bạn ạ.

Rất mong bạn cố gắng để có thể thành công với lisp trong công việc của bạn.

  • Vote tăng 1

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ạn cho mình hỏi. Trong lisp muốn sử dụng dấu cách thì phải thể hiện như thế nào. Cảm ơn tất cả.

Cụ thể trong lisp dưới đây (lisp đánh số hiệu bản vẽ - VD: KT:01/1; CN:01/1)

Mình muốn giữa ký tự chữ và số có dấu cách (KT: 01/1; CN: 01/1)

Đây là lisp:

;; copyright by Tue_NV
(defun c:shbv(/ dau tong po po1 ent i pre cao)
(prompt "\n Danh so hieu ban ve dang n/m ")
(setvar "cmdecho" 0)

(command "style" "CADVIET" "Vhelven.TTF" "2" "1" "0" "n" "n")


(setq cao (getreal "\n Nhap chieu cao chu :"))
(setq pre (getstring 5"\n Nhap ky hieu ban ve : "))
(setq dau (getint "\n Danh so bat dau (n):"))
(setq tong (getint "\n Danh so tong (m):") i 1)

(setq po (getpoint 
(strcat "\n Cho diem chen cua so: " (if (< dau 10) (strcat pre "0" (itoa dau)) (itoa dau)) "/" (itoa tong))))
(wtxt (strcat (if (< dau 10) (strcat pre  "0" (itoa dau)) (itoa dau)) "/" (itoa tong)) po)

(Repeat (- tong dau)
(setq po1 (getpoint po 
(strcat "\n Cho diem chen cua so: " (if (< (+ dau i) 10) (strcat pre "0" (itoa (+ dau i))) (itoa (+ dau i))) "/" (itoa tong))))

(command "copy" "L" "" po po1) 
(setq ent (entget(entlast)))
(setq ent 
(subst 
(cons 1 (strcat (if (< (+ dau i) 10) (strcat pre  "0" (itoa (+ dau i))) (itoa (+ dau i))) "/" (itoa tong))) (assoc 1 ent) ent))
(entmod ent)
(setq i (1+ i))
(setq po po1)
)
(princ)
)
;
(defun wtxt (txt p / sty d h)
(setq sty (getvar "textstyle")
d (tblsearch "style" sty)
h (cdr (assoc 40 d)))
(entmake (list (cons 0 "TEXT") (cons 7 sty) (cons 1 txt) (cons 10 p) (cons 11 p) 
(cons 72 1) (cons 73 2)
(if (> h 0) (cons 40 h) (assoc 40 d)) (assoc 41 d))
)
)

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ạn cho mình hỏi. Trong lisp muốn sử dụng dấu cách thì phải thể hiện như thế nào. Cảm ơn tất cả.

Cụ thể trong lisp dưới đây (lisp đánh số hiệu bản vẽ - VD: KT:01/1; CN:01/1)

Mình muốn giữa ký tự chữ và số có dấu cách (KT: 01/1; CN: 01/1)

Đây là lisp:

;; copyright by Tue_NV
(defun c:shbv(/ dau tong po po1 ent i pre cao)
(prompt "\n Danh so hieu ban ve dang n/m ")
(setvar "cmdecho" 0)

(command "style" "CADVIET" "Vhelven.TTF" "2" "1" "0" "n" "n")
(setq cao (getreal "\n Nhap chieu cao chu :"))
(setq pre (getstring 5"\n Nhap ky hieu ban ve : "))
(setq dau (getint "\n Danh so bat dau (n):"))
(setq tong (getint "\n Danh so tong (m):") i 1)

(setq po (getpoint 
(strcat "\n Cho diem chen cua so: " (if ((wtxt (strcat (if (
(Repeat (- tong dau)
(setq po1 (getpoint po 
(strcat "\n Cho diem chen cua so: " (if (
(command "copy" "L" "" po po1) 
(setq ent (entget(entlast)))
(setq ent 
(subst 
(cons 1 (strcat (if ((entmod ent)
(setq i (1+ i))
(setq po po1)
)
(princ)
)
;
(defun wtxt (txt p / sty d h)
(setq sty (getvar "textstyle")
d (tblsearch "style" sty)
h (cdr (assoc 40 d)))
(entmake (list (cons 0 "TEXT") (cons 7 sty) (cons 1 txt) (cons 10 p) (cons 11 p) 
(cons 72 1) (cons 73 2)
(if (> h 0) (cons 40 h) (assoc 40 d)) (assoc 41 d))
)
)

Chào bạn HoangSon 614,

Việc thêm các khoảng trắng vào trong chuỗi chỉ đơn giản là bạn thêm một chuỗi chứa khoảng trắng " " vào chỗ bạn muốn thêm mà thôi.

Trong lisp bạn gửi giá trị của chuỗi là do hàm (strcat pre "0" (itoa dau)) (itoa dau)) "/" (itoa tong)) tạo ra. Do vậy để thêm khoảng trắng vào giữa ký tự chữ và số như bạn mô tả tức là thêm chuỗi chứa khoảng trắng vào giữa biến pre và chuỗi "0". Có hai cách làm

a/- Thay chuỗi "0" bằng chuỗi " 0" (có chứa một khoảng trắng trước số 0)

b/- Thêm chuỗi " " (chuỗi chứa khoảng trắng) vào trứơc chuỗi "0"

 

Thực ra mình chưa hiểu bạn làm vậy để làm chi vì trong biến pre của bác Tue_NV đã có chứa một khoảng trắng sau dấu hai chấm rồi mà, chả nhẽ bạn lại muốn cho nó cách xa ra tí nữa à???

 

Chúc bạn thành cô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
Các bạn cho mình hỏi. Trong lisp muốn sử dụng dấu cách thì phải thể hiện như thế nào. Cảm ơn tất cả.

Cụ thể trong lisp dưới đây (lisp đánh số hiệu bản vẽ - VD: KT:01/1; CN:01/1)

Mình muốn giữa ký tự chữ và số có dấu cách (KT: 01/1; CN: 01/1)

Đây là lisp:

;; copyright by Tue_NV
(defun c:shbv(/ dau tong po po1 ent i pre cao)
(prompt "\n Danh so hieu ban ve dang n/m ")
(setvar "cmdecho" 0)

(command "style" "CADVIET" "Vhelven.TTF" "2" "1" "0" "n" "n")
(setq cao (getreal "\n Nhap chieu cao chu :"))
(setq pre (getstring 5"\n Nhap ky hieu ban ve : "))
(setq dau (getint "\n Danh so bat dau (n):"))
(setq tong (getint "\n Danh so tong (m):") i 1)

(setq po (getpoint 
(strcat "\n Cho diem chen cua so: " (if ((wtxt (strcat (if (
(Repeat (- tong dau)
(setq po1 (getpoint po 
(strcat "\n Cho diem chen cua so: " (if (
(command "copy" "L" "" po po1) 
(setq ent (entget(entlast)))
(setq ent 
(subst 
(cons 1 (strcat (if ((entmod ent)
(setq i (1+ i))
(setq po po1)
)
(princ)
)
;
(defun wtxt (txt p / sty d h)
(setq sty (getvar "textstyle")
d (tblsearch "style" sty)
h (cdr (assoc 40 d)))
(entmake (list (cons 0 "TEXT") (cons 7 sty) (cons 1 txt) (cons 10 p) (cons 11 p) 
(cons 72 1) (cons 73 2)
(if (> h 0) (cons 40 h) (assoc 40 d)) (assoc 41 d))
)
)

Chào HoangSon

 

Nếu (setq pre (getstring "\n Nhap ky hieu ban ve : ")) -> thì biến pre là biến chuỗi và không nhận dấu cách nào

Còn (setq pre (getstring 5"\n Nhap ky hieu ban ve : ")) -> thì biến pre là biến chuỗi và có nhận cả dấu cách rồi bạn à

:cheers:

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ào bạn khaosat 2009,

Qua các bài viết của bạn mình thấy rằng bạn khá chịu khó sưu tầm các lisp và trong công việc của bạn có vẻ như lisp có tác dụng khá tốt. Nếu quả thực như vậy thì bạn rất nên tìm hiểu sâu hơn về lisp để bạn có thể đọc và hiểu được các lisp mà bạn đã sưu tầm được.

Bởi vì như bạn đã thấy, các lisp được mọi người viết ra đều chỉ nhằm cho một mục tiêu nhất định nào đó, có thể gần giống với yêu cầu của bạn chứ không thể hoàn toàn đúng như bạn muốn được đâu. Do đó nếu bạn hiểu được các lisp này có nghĩa là bạn sẽ có khả năng để chỉnh sửa nó cho thất đúng với ý muốn của bạn. Hơn nữa những người viết các lisp có thể có những suy luận khác nhau để cho ra một kết quả tương tự như nhau. Và nhờ đó khi bạn hiểu được các lisp này cũng có nghĩa là bạn sẽ biết thêm được cách suy luận của người viết lisp, và thế là bạn sẽ mót được thêm rất nhiều từ các lisp này chứ không chỉ đơn thuần là việc sử dụng nó bạn ạ.

Bản thân mình, để có thể sử dụng được các lisp này mình phải bỏ công ngồi đọc nó và gặm dần cho tới khi hiểu được, nhiều khi giắt răng phải gỡ mất mấy ngày mới xong một khúc lisp đó bạn ạ. Tuy nhiên nhờ đó mà mình no dần lên và cò thể tùy ý sử dụng chúng cho các mục tiêu của mình bạn ạ. Kinh nghiệm của mình cho thấy nếu chỉ load lisp về dùng mà không hiểu cặn kẽ nó thì nhiều phen mắc nghẹn lắm bạn ạ. Chả những nó chả chống đói được cho mình mà còn làm mình vãi cả mật xanh mật vàng ra, chạy thầy chạy thuốc khốn khổ mới gỡ được cái nghẹn đấy.

Diễn đàn thực ra chỉ có thể giúp để bạn có thể hiểu và vận dụng được lisp vào từng công việc cụ thể của bạn chứ chả thể làm thay cho bạn được đâu. Cho dù có rất nhiều bác giỏi về lisp nhưng không phải lúc nào các bác ấy cũng rảnh rang để có thể ngồi viết giùm bạn đúng như cái bạn cần được đâu. Tỷ dụ như đúng vào cái lúc bạn cần nhất, xếp thì giục toáy lên còn các bác ấy lại đương đi nghỉ mát thì bạn sẽ làm sao nhỉ??? Ấy là chưa kể tới việc do bạn diễn đạt hơi loăng ngoằng các bác ấy hiểu chưa đúng ý bạn và tống cho bạn một quả lisp chỉ đạt 60% yêu cầu của bạn, bạn lại vội vàng áp dụng nó liền thì chắc hẳn sẽ được xếp ca cho mát mặt đó. Vậy nên bạn rất cần phải có kiến thức cơ bản về lisp để có thể chủ động lựa chọn và tự tạo cho mình những công cụ thích hợp bằng lisp mà đối phó với công việc của mình bạn ạ.

Rất mong bạn cố gắng để có thể thành công với lisp trong công việc của bạn.

Cám ơn Bạn có lời quan tâm và giúp đỡ.

Thật tình mình chưa hiểu gì về Lisp cả, trước đây mình cũng không chú ý sâu về Cad. Chỉ chuyên sâu vào các PMền chuyên ngành nhưng không phải là trên môi trường Cad.

Từ khi nhận thấy Lisp hổ trợ cụ thể những ứng dụng, có thể nói là rất gần gủi. Thấy đây là việc phải cần thiết và phải tập trung và được một diễn đàn tốt, những người thầy, người bạn tốt hết lòng giúp. Nhưng không ai có thể giúp mình hoài được đâu... mình biết.

Mình rất cần có 1 tài liệu tự học lisp, những vấn đề đơn giản được diển giải dể hiểu và có ví dụ minh họa.

Nếu Bạn có, up cho mình xin với.

Một lần nữa xin chân thành cám ơn bạn về những gì bạn giúp.

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ào bạn HoangSon 614,

Việc thêm các khoảng trắng vào trong chuỗi chỉ đơn giản là bạn thêm một chuỗi chứa khoảng trắng " " vào chỗ bạn muốn thêm mà thôi.

Trong lisp bạn gửi giá trị của chuỗi là do hàm (strcat pre "0" (itoa dau)) (itoa dau)) "/" (itoa tong)) tạo ra. Do vậy để thêm khoảng trắng vào giữa ký tự chữ và số như bạn mô tả tức là thêm chuỗi chứa khoảng trắng vào giữa biến pre và chuỗi "0". Có hai cách làm

a/- Thay chuỗi "0" bằng chuỗi " 0" (có chứa một khoảng trắng trước số 0)

b/- Thêm chuỗi " " (chuỗi chứa khoảng trắng) vào trứơc chuỗi "0"

 

Thực ra mình chưa hiểu bạn làm vậy để làm chi vì trong biến pre của bác Tue_NV đã có chứa một khoảng trắng sau dấu hai chấm rồi mà, chả nhẽ bạn lại muốn cho nó cách xa ra tí nữa à???

 

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

 

@Tue_NV

 

Chào HoangSon

Nếu (setq pre (getstring "\n Nhap ky hieu ban ve : ")) -> thì biến pre là biến chuỗi và không nhận dấu cách nào

Còn (setq pre (getstring 5"\n Nhap ky hieu ban ve : ")) -> thì biến pre là biến chuỗi và có nhận cả dấu cách rồi bạn à

Cảm ơn phamthanhbinh và Tue_NV đã quan tâm.

Theo như giải thích của 2 bạn là lisp trên đã có khoảng trắng. Nhưng mình không hiểu sao khi sử dụng lisp trên lại không có khoảng trắng (không biết có phải do lỗi lisp hay do lỗi máy của mình).

Khi sửa lại theo ý của phamthanhbinh thì OK không có vấn đề gì.

Một lần nữa cảm ơn hai bạn đã quan tâm.

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ào HoangSon

 

Nếu (setq pre (getstring "\n Nhap ky hieu ban ve : ")) -> thì biến pre là biến chuỗi và không nhận dấu cách nào

Còn (setq pre (getstring 5"\n Nhap ky hieu ban ve : ")) -> thì biến pre là biến chuỗi và có nhận cả dấu cách rồi bạn à

:cheers:

Cảm ơn Tue_NV nhiều lắm!

(Cho mình hỏi riêng tư tý nha! đợt bão số 9 vừa qua không biết gia đình bạn có bị ảnh hưởng gì nhiều không? Cho mình chia sẽ những khó khăn nếu gia đình bạn gặp phải. Chúc bạn và gia đình luôn mạnh khoẻ).

  • Vote tăng 1

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 phamthanhbinh và Tue_NV đã quan tâm.

Theo như giải thích của 2 bạn là lisp trên đã có khoảng trắng. Nhưng mình không hiểu sao khi sử dụng lisp trên lại không có khoảng trắng (không biết có phải do lỗi lisp hay do lỗi máy của mình).

Khi sửa lại theo ý của phamthanhbinh thì OK không có vấn đề gì.

Một lần nữa cảm ơn hai bạn đã quan tâm.

Bạn sử dụng Lisp này Tue_NV viết thêm thử xem :

-> sẽ hiện lên hộp thoại Edit text : Bạn muốn thêm bớt gì thì tuỳ thích nhé :

;; copyright by Tue_NV
(defun c:shbv(/ dau tong po po1 ent i pre cao)
(prompt "\n Danh so hieu ban ve dang n/m ")
(setvar "cmdecho" 0)

(command "style" "CADVIET" "Vhelven.TTF" "2" "1" "0" "n" "n")
(if (not caoo) (setq caoo 2))
(setq cao (getreal (strcat "\n Nhap chieu cao chu :")))
(if (not cao) (setq cao caoo) (setq caoo cao))

(setq pre ": ")
(wtxt pre '(0 0 0))
(command "ddedit" (entlast) "") 
(setq pre (cdr(assoc 1 (entget(entlast)))))
(entdel (entlast))
(setq dau (getint "\n Danh so bat dau (n):"))
(setq tong (getint "\n Danh so tong (m):") i 1)

(setq po (getpoint 
(strcat "\n Cho diem chen cua so: " (if ((wtxt (strcat (if (
(Repeat (- tong dau)
(setq po1 (getpoint po 
(strcat "\n Cho diem chen cua so: " (if (
(command "copy" "L" "" po po1) 
(setq ent (entget(entlast)))
(setq ent 
(subst 
(cons 1 (strcat (if ((entmod ent)
(setq i (1+ i))
(setq po po1)
)
(princ)
)
;
(defun wtxt (txt p / sty d h)
(setq sty (getvar "textstyle")
d (tblsearch "style" sty)
h (cdr (assoc 40 d)))
(entmake (list (cons 0 "TEXT") (cons 7 sty) (cons 1 txt) (cons 10 p) (cons 11 p) 
(cons 72 1) (cons 73 2)
(if (> h 0) (cons 40 h) (assoc 40 d)) (assoc 41 d))
)
)

Chổ mình có bão nhưng may mắn không việc gì. Cảm ơn bạn đã quan tâm.

Mình cũng cầu chúc cho bạn và các bạn trên diễn đàn luôn được mạnh khoẻ

Thanks

  • Vote tăng 1

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

Nhân tiện cái lisp của bác Hoangson614 các anh cho em hỏi, có biến hệ thống nào giúp lisp viết những số nguyên từ -9 đến 9 mà có thêm số 0 ở trước không? VD: 01, 02..

Chúng ta hay sử dụng cách viết này cho một số trường hợp. chẳng hạn đánh số thứ tự bản vẽ. Hiện tại em cũng đang fải lợi dụng hàm if cho việc này. về kết quả nhận đươc thì ko sao, nhưng em cứ lăn tăn khi fải dùng cách này.

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 viết thử và muốn thêm đối tượng tạo ra cuối cùng trong cad (khi coppy gõ "copy" "last") nhưng bi lỗi nhờ các cao thủ kiểm tra và chỉnh hộ. Vì trình độ abc nên có khi mắc lỗi cơ bản mong các cao thủ chiếu cố và bỏ qua:

 

(defun c:12 ()

(setq ss (ssadd) lstName (list))

 

(while (setq sel (entsel "\nChon doi tuong them vao tap hop SS : "))

(setq obj (car sel))

(if (= (type obj) 'ENAME)

(progn

(ssadd obj ss)

 

(setq obl ent)

(ssadd obl ss)

)

 

)

)

(princ (strcat "\nTap hop SS co " (itoa (sslength ss)) " doi tuong."))

 

 

 

 

)

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 viết thử và muốn thêm đối tượng tạo ra cuối cùng trong cad (khi coppy gõ "copy" "last") nhưng bi lỗi nhờ các cao thủ kiểm tra và chỉnh hộ. Vì trình độ abc nên có khi mắc lỗi cơ bản mong các cao thủ chiếu cố và bỏ qua:

...........

Bạn dùng hàm (entlast) để lấy đối tuợng tạo ra cuối cùng trong bản vẽ.

(defun c:test ()
 (if (setq ent (entlast))
   (alert (strcat "Doi tuong cuoi cung la : "(cdr (assoc 0 (entget ent)))))    )
 (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

Mình có lisp được một anh bạn cho (vẽ trắc dọc ống cấp nước). Lisp sử dụng rất tốt nhưng có những cái chưa hoàn thiện lắm và rất còn bất tiện cho người sử dụng

Đối với lisp mình chỉ mới bắt đầu tìm hiểu nên còn lơ mơ lắm. Có vấn đề muốn nhờ các bạn trên diễn đàn chỉ bảo thêm (mình chưa hiểu lắm đừng cười mình nha)

Mình trích một đoạn code (của đoạn code dưới) như thế này:

.........

(setq

Tln (getint "\nTy le ngang 1/x (100, 200, 500, 1000); x="))

Tld (getint "\nTy le dung 1/y (100, 200); y="))

Tn (/ 1000.0 Tln)

Td (/ 1000.0 Tld)

)

........

Mình muốn gán tỷ lệ đứng và ngang bằng cách dùng hàm strcat

"text" "j" "ml" Pta5 2.5 0.0 ((strcat "TYÛ LEÄ NGANG: 1/" (rtos Tln))

"text" "j" "ml" Pta6 2.5 0.0 (strcat "TYÛ LEÄ ÑÖÙNG: 1/" (rtos Tld))

nhưng khi nhập tỷ lệ đứng và ngang xong thì thoát luôn.

Nhờ các bạn giải thích và hướng dẫn giúp mình. Cảm ơn tất cả

;--------------------------------
;;function set parameter
(defun Init ()
(setvar "BLIPMODE" 0)
(setvar "CMDECHO" 0)
(setvar "ANGBASE" 0)
);;
;--------------------------------
;;function return parameter
(defun Reinit ()
(setvar "BLIPMODE" 0)
(setvar "CMDECHO" 1)
(setvar "ANGBASE" 0)
)
;--------------------------------
;;function change degree to radian
(defun doi (a)
(* PI (/ a 180))
)
;--------------------------------
;function set corner by radian
(defun doi1 ()
(setq a 1.5707965 a45 0.78539825
b 3.141593 b45 -0.78539825
c 4.7123895
)
)
;--------------------------------
;;function change radian to degree
(defun doi2 (d)
(* 180 (/ d pi))
)
;;
;--------------------------------
; make layer
(defun taolop ()
(command
"-OSNAP" "OFF"
"layer" "m" "manh" "c" "252" "" "l" "continuous" "manh" "lw" "0.2" "" ""
"layer" "m" "giong" "c" "252" "" "l" "continuous" "giong" "lw" "0.2" "" ""
"layer" "m" "bao" "c" "1" "" "l" "continuous" "bao" "lw" "0.25" "" ""
"layer" "m" "ong" "c" "5" "ong" "l" "continuous" "ong" "lw" "0.3" "" "" 
"layer" "m" "chua" "c" "3" "" "l" "continuous" "" ""
"layer" "m" "dat" "c" "16" "" "l" "continuous" "dat" "lw" "0.1" "" ""
"layer" "m" "chuv" "c" "3" "" "l" "continuous" "" ""
"style" "chuv" "VNI-Helve-condense" "" "1" "" "" ""
"style" "chua" "romans.shx" "" "0.7" "" "" "" ""
)
)
;
;--------------------------------
;---------------------------------
;1 ENDP 2 MID 4 CEN 8 NODE 16 QUA 32 INT 64 INS 128 PER 256 TAN 512 NEA 1024 QUI
;;ONAP ENDP INT(MID) NEAR
(defun onap ()
(setvar "OSMODE" (+ 1 32 512))
)
;;;;ONAP ENDP INT(MID) CEN
(defun onap1 ()
(setvar "OSMODE" (+ 1 4 32))
)
;;;
;;;;ONAP ENDP INT(MID) CEN
(defun onap2 ()
(setvar "OSMODE" (+ 1 2 4 16 32 128 512))
)
;;;;;;
(defun ofnap ()
(command "-OSNAP" "OFF" )
)
;----------------------------(ofnap) (onap2)
(defun COCSS()
(doi1)
(setq
i 1
j 0
Ess1 (+ Ess 1)
Ptssx (polar Ptss 0 -1) Ptssx1 (polar Ptssx a (* Esn Td))
Ptssy (polar Ptss 0 1) Ptssy1 (polar Ptssy a (* Esn Td))
)
(Repeat Esn
(setq Ess2 (rtos Ess1 2 2)
Ptss2 (polar Ptss 0 (* i 0.5))
Ptss21 (polar Ptss2 a (* j Td)) Ptss22 (polar Ptss21 a Td)
Ptss3 (polar Ptss 0 -1)
Ptss31 (polar Ptss3 a (+ (* j Td) Td)) Ptss32 (polar Ptss31 0 -5)
Ptss33 (polar Ptss32 0 -1)
)
(command
"layer" "s" "manh" ""
"pline" Ptss21 "w" 1.0 1.0 Ptss22 ""
"line" Ptss31 Ptss32 ""
"layer" "s" "chuv" ""
"style" "chuv" "VNI-Helve-condense" "" "1" "" "" ""
"text" "j" "mr" Ptss33 2.5 0.0 (strcat Ess2)
)
(setq
i (* i -1)
j (+ j 1)
Ess1 (+ Ess1 1)
)
);endrepeat
(command "layer" "s" "manh" "" "pline" Ptssx "w" 0.0 0.0 Ptssx1 Ptssy1 Ptssy ""
)
);end function comparation (princ lis)
;==========================
;function main
(defun C:STD ()
(setvar "dimzin" 0)
(Init)
(taolop)
(doi1)
;-----------------------------------------
;-----------------------------------------
(Princ "\n**Day la chuong trinh ve TRAC DOC duoc viet boi Anh NGUYEN NGOC QUANG**")
(setq
Tln (getint "\nTy le ngang 1/x (100, 200, 500, 1000); x="))
Tld (getint "\nTy le dung 1/y (100, 200); y="))
Tn (/ 1000.0 Tln)
Td (/ 1000.0 Tld)
)
;-----------------------------------------
(setq LisLkcd1 nil LisLkcd nil
LisLkcdo nil)
(initget "Moi Tieptuc")
(Princ "\n")
(setq Ansertt (getint "\nVe moi hay tiep tuc <1.Moi/2.Tieptuc> :")
)
(cond
((= Ansertt 1)
(setq
Kcdo 0 LisLkcdo (cons Kcdo LisLkcdo)
Kcd 0 LisLkcd1 (cons Kcd LisLkcd1)
LisLkcd LisLkcdo)
)
((= Ansertt 2)
(setq
Kcdo (getreal "\nChieu dai tai coc tiep theo (m):");distance 2 station
Kcd (* Kcdo Tn) ; distance
LisLkcd (cons (- Kcdo Kcdo) LisLkcd)
LisLkcdo (cons Kcdo LisLkcdo)
LisLkcd1 (cons Kcd LisLkcd1))
)
)
(progn
;------------------------------------(princ lis)
(onap)
(setq Pta (getpoint "\nChon diem bat dau ve :")
Pta1 (polar pta 0 60) 
Pta2 (polar pta 0 5) 
Pta3 (polar pta 0 60)
Pta4 (polar pta 0 14.75)
Pta5 (polar pta2 a 95)
Pta6 (polar pta4 a 90)
Ptss1 (polar pta 0 57) 
Ptss (polar Ptss1 a 70) 
Ptsg1 (polar pta 0 60)
Ptsg (polar Ptsg1 a 15)
Ess (getreal "\nCao do so sanh :")
Esn (getint "\nSo moc so sanh :")
Es (rtos Ess 2 2)
VL (getint "\nVat lieu ong <0.STK/1.uPVC/2.THEP/3.GANG/4.BE TONG/5.BTCT/6.SANH/7.HDPE>:")
D (getreal "\nDuong kinh ong :")
Ho (getreal "\nDo sau chon ong ban dau (m):")
kcong (getreal "\nThe hien MAT CAT DOC ONG :")    ;;;;;;duyvietthem;;;;;;;;;;
i 0
LisCSS '("[sTAKE NO.]" "TEÂN COÏC"
"[ANGLE OF DIRECTION]" "GOÙC QUAY MAËT BAÈNG (0%%176)"
"[ACCU. DISTANCE]" "KHOAÛNG CAÙCH COÄNG DOÀN (m)"
"[DIA - GRADIENT.]" "ÑÖÔØNG KÍNH - ÑOÄ DOÁC (%)"
"[DEPTH .]" "ÑOÄ SAÂU CHOÂN OÁNG (m)"
"[PIPE BOTTOM ELEV.]" "CAO ÑOÄ ÑAÙY OÁNG (m)"
"[GROUND ELEV.]" "CAO ÑOÄ MAËT ÑAÁT (m)"
"[DATUM.]" "COÁT SO SAÙNH")
LisTs '("Cot mat dat coc so" "Do doc doan ong giua hai coc"
"Khoang cach giua hai coc"
"Goc quay mat bang coc so")
LisVL '("STK" "uPVC" "THEÙP" "GANG" "BEÂ TOÂNG" "BTCT" "SAØNH" "HDPE")
Lismd nil Lisdo nil LisHo nil Lisi nil Lisio nil LisLkc nil LisLkco nil
LisTcoc nil LisGoc nil LisDeltaMD nil LisdeltaDO nil
)
(ofnap)
;--------
;-------------------------------------------
;data stake no.
(Princ "\n**Neu khong muon ky tu dau cua Coc la mot Chu Cai (VD:A, B...) ma la mot so thuc 
(VD:1, 2...) thì nhan phim Space bar de tiep tuc**")
(setq k (getint "\nSo coc:")
CTc (getstring "\nKy tu dau cua coc:")
Tcoc (getint "\nTen coc dau tien hoac tiep theo:")
Ki Tcoc
i1 Tcoc
i2 Tcoc
i3 Tcoc
i4 Tcoc
i5 Tcoc
)
(repeat k
(progn
(setq
LisTcoc (cons Tcoc LisTcoc)
Tcoc (1+ Tcoc)
)
);endprogn
);endrepeat;(princ Lis)
(setq LisTcoc (reverse LisTcoc))
;-------------------------------------------
;data ground level.
(repeat k
(progn
(print (nth 0 LisTs)) (prin1 CTc) (prin1 Ki)
(setq
Cmdo (getreal "\nCao do mat dat (m) :")
Cmd Cmdo
Lismd (cons Cmd Lismd)
Ki (1+ Ki)
)
);endprogn
);endrepeat;(princ Lis)
(setq Lismd (reverse Lismd))
;-------------------------------------------
;data gradient.
(repeat (- k 1)
(progn
(print (nth 1 LisTs)) (prin1 CTc) (prin1 i1) (prin1 CTc) (prin1 (+ i1 1))
(setq
io (getreal "\nDo doc dat ong <+ doc xuoi/- doc nguoc> (%) :")
io1 (/ io 1) Lisi (cons io1 Lisi)
io2 (* io 1000) Lisio (cons io2 Lisio)
i1 (1+ i1)
)
);endprogn
);endrepeat;(princ Lis)
(setq Lisi (reverse Lisi) Lisio (reverse Lisio))
;-------------------------------------------
;data distance.
(repeat (- k 1)
(progn
(print (nth 2 LisTs)) (prin1 CTc) (prin1 i2) (prin1 CTc) (prin1 (+ i2 1))
(setq
Kco (getreal "\nKhoang cach giua hai coc (m):");distance 2 station
Kc (* Kco Tn) ; distance
LisLkco (cons Kco LisLkco)
LisLkc (cons Kc LisLkc)
i2 (1+ i2)
)
);endprogn
);endrepeat;(princ Lis)
(setq LisLkc (reverse LisLkc) LisLkco (reverse LisLkco))
;----------------------------------------
;mapcar Kcdo Kcd1
(setq n1 0 Kcd1 0)
;Kcdo 0 LisLkcdo (cons Kcdo LisLkcdo)
;Kcd 0 LisLkcd1 (cons Kcd LisLkcd1))
(mapcar
'(lambda (Kco Kc)
(setq
Kcdo (+ Kcdo (nth n1 LisLkco)) LisLkcdo (cons Kcdo LisLkcdo)
Kcd (+ Kcd (nth n1 LisLkc)) LisLkcd1 (cons Kcd LisLkcd1)
Kcd1 (+ Kcd1 (nth n1 LisLkc)) LisLkcd (cons Kcd1 LisLkcd)
n1 (1+ n1)
)
);endlambda
LisLkco LisLkc
);endmapcar
(setq LisLkcdo (reverse LisLkcdo) LisLkcd1 (reverse LisLkcd1) LisLkcd (reverse LisLkcd))
;----------------------------------------
;mapcar deltaMD deltaDO
(setq n2 1
n3 0
LisHo (cons Ho LisHo)
Cdo (- (nth 0 Lismd) Ho) Lisdo (cons Cdo Lisdo)
DeltaMD (* (- (nth 0 Lismd) Ess) Td) DeltaDO (* (- (nth 0 Lismd) Ess Ho) Td)
LisDeltaMD (cons DeltaMD LisDeltaMD) LisDeltaDo (cons DeltaDo LisDeltaDo))
(mapcar
'(lambda (Cmd io1 Kco)
(setq
Cdo (- Cdo (* Kco (nth n3 Lisi))) Lisdo (cons Cdo Lisdo)
Ho (- (nth n2 Lismd) Cdo) LisHo (cons Ho LisHo)
DeltaMD (* (- (nth n2 Lismd) Ess) Td) LisDeltaMD (cons DeltaMD LisDeltaMD)
DeltaDO (- deltaDO (* (nth n3 LisLkco) (nth n3 Lisi) Td))
LisDeltaDO (cons DeltaDO LisDeltaDO)
n2 (1+ n2)
n3 (1+ n3)
)
);endlambda
Lismd Lisi LisLkco
);endmapcar
(setq LisDeltaMD (reverse LisDeltaMD) LisDeltaDO (reverse LisDeltaDO)
LisHo (reverse LisHo) Lisdo (reverse Lisdo))
;-------------------------------------------
;data cornor.
(repeat k
(progn
(print (nth 3 LisTs)) (prin1 CTc) (prin1 i3)
(setq
Gmb (getreal "\nGoc quay mat bang :")
LisGoc (cons Gmb LisGoc)
i3 (1+ i3)
)
);endprogn
);endrepeat;(princ Lis)
(setq LisGoc (reverse LisGoc))
;-------------------------------------------
(Repeat 8
(setq Ptb (polar Pta a (* i 10))
Ptc (polar Pta1 a (* i 10))
ptd (polar pta2 a (+ (* i 10) 3.5))
)
(command
"layer" "s" "manh" ""
"line" Ptb Ptc ""
"layer" "s" "chuv" ""
"style" "chuv" "VNI-Helve-condense" "" "1" "" "" ""
"text" "j" "ml" ptd 2.5 0.0 (nth (+ (* i 2) 1) LisCSS)
)
(setq i (+ i 1))
);endrepeat
(command
"layer" "s" "manh" ""
"line" Pta Ptb ""
"layer" "s" "chuv" ""
"style" "chuv" "VNI-Helve-condense" "" "1" "" "" "" ""
"text" "j" "ml" Pta5 2.5 0.0 (strcat "TYÛ LEÄ NGANG: 1/" (rtos Tln))
"text" "j" "ml" Pta6 2.5 0.0 (strcat "TYÛ LEÄ ÑÖÙNG: 1/" (rtos Tld))
;------------------------
(COCSS)
;draw one
(setq LisPTcoc nil PTcoc (polar Pta1 a 5) LisPTcoc (cons PTcoc LisPTcoc)
LisPGmb nil PGmb (polar Ptss1 a 15) LisPGmb (cons PGmb LisPGmb)
LisPGmb nil PGmb (polar Ptsg1 a 17) LisPGmb (cons PGmb LisPGmb)
LisPGmb1 nil PGmb1 (polar Pta1 a 13) LisPGmb1 (cons PGmb1 LisPGmb1)
LisPKc nil PKc (polar Pta1 a 25) LisPKc (cons PKc LisPKc)
LisPdd nil Pdd (polar Pta1 a 30) LisPdd (cons Pdd LisPdd)
Pddi (polar pta1 a 30)
LisPho nil Pho (polar Pta1 a 45) LisPho (cons Pho LisPho)
LisPmd nil Pmd (polar Pta1 a 65) LisPmd (cons Pmd LisPmd)
LisPdo nil Pdo (polar Pta1 a 55) LisPdo (cons Pdo LisPdo)
LisPss nil Pss (polar Pta1 a 70) LisPss (cons Pss LisPss)
LisPsg nil Psg (polar Pta1 a 15) LisPsg (cons Psg LisPsg)
LisPssd nil LisPssd1 nil LisPssdo nil LisPssdo1 nil
V 0
)
(mapcar
'(lambda (Kc)
(setq
PTcoc (polar PTcoc 0 (nth V LisLkc)) LisPTcoc (cons PTcoc LisPTcoc)
PGmb (polar PGmb 0 (nth V LisLkc)) LisPGmb (cons PGmb LisPGmb)
PGmb1 (polar PGmb1 0 (nth V LisLkc)) LisPGmb1 (cons PGmb1 LisPGmb1)
PKc (polar PKc 0 (nth V LisLkc)) LisPKc (cons PKc LisPKc)
Pdd (polar Pdd 0 (nth V LisLkc)) LisPdd (cons Pdd LisPdd)
Pho (polar Pho 0 (nth V LisLkc)) LisPho (cons Pho LisPho)
Pmd (polar Pmd 0 (nth V LisLkc)) LisPmd (cons Pmd LisPmd)
Pdo (polar Pdo 0 (nth V LisLkc)) LisPdo (cons Pdo LisPdo)
Pss (polar Pss 0 (nth V LisLkc)) LisPss (cons Pss LisPss)
V (1+ V)
)
)
LisLkc
)
(setq LisPTcoc (reverse LisPTcoc)
LisPGmb (reverse LisPGmb) LisPGmb1 (reverse LisPGmb1)
LisPKc (reverse LisPKc)
LisPdd (reverse LisPdd)
LisPHo (reverse LisPHo) LisPmd (reverse LisPmd) LisPdo (reverse LisPdo)
LisPss (reverse LisPss)
V1 0)
;-----------
(mapcar
'(lambda (PTcoc PGmb PGmb1 PKc Pho Pmd Pdo Pss
Tcoc Gmb Kcdo Ho Cmd Cdo deltaMD deltaDO)
(setq
;parameter draw rotational corner
PGmb11 (polar PGmb1 0 -3.5) PGmb14 (polar PGmb1 0 3.5)
PGmb12 (polar PGmb1 a 2) PGmb122 (polar PGmb12 0 -3.5) PGmb13 (polar PGmb12 0 3.5);90
PGmb133 (polar PGmb13 a 2.5) PGmb144 (polar PGmb13 a 4.5)
PGmb2 (polar PGmb1 a 2) PGmb21 (polar PGmb2 0 -3.5);<180
PGmb22 (polar PGmb2 a45 4.5) PGmb23 (polar PGmb2 a45 6.5);<180
PGmb24 (polar PGmb2 0 3.5) PGmb25 (polar PGmb2 0 6);=180
PGmb26 (polar PGmb2 b45 4) PGmb27 (polar PGmb2 b45 6.5);>180
PGmb3 (polar PGmb1 a 2) PGmb31 (polar PGmb3 0 -3.5) PGmb32 (polar PGmb3 0 3.5);270
PGmb33 (polar PGmb32 c 2.5) PGmb34 (polar PGmb32 c 4.5)
;end draw rotational corner
;parameter comparation
Pssd (polar Pss a (nth V1 LisDeltaMD)) LisPssd (cons Pssd LisPssd)
Pssdo (polar Pss a (nth V1 LisDeltaDO)) LisPssdo (cons Pssdo LisPssdo))
(command
"layer" "s" "chuv" ""
"style" "chuv" "VNI-Helve-condense" "" "1" "" "" ""
"text" "j" "mc" PTcoc 4.5 0.0 (strcat CTc (itoa (nth V1 LisTcoc)))
"text" "j" "mc" PKc 2.2 90.0 (rtos (nth V1 LisLkcdo) 2 2)
"text" "j" "mc" Pho 2.2 90.0 (rtos (nth V1 LisHo) 2 2)
"text" "j" "mc" Pmd 2.2 90.0 (rtos (nth V1 Lismd) 2 2)
"text" "j" "mc" Pdo 2.2 90.0 (rtos (nth V1 Lisdo) 2 2)
"layer" "s" "chua" ""
"style" "chua" "romans.shx" "" "0.7" "" "" "" ""
"text" "j" "mc" PGmb 2.0 0.0 (strcat (rtos (nth V1 LisGoc) 2 0) "%%d")
"layer" "s" "bao" ""
"circle" PTcoc "5"
"layer" "s" "giong" ""
"line" Pss Pssd ""
"layer" "s" "manh" "")
(cond
((= Gmb 90) (command "pline" PGmb122 PGmb13 PGmb133 "w" "1.0" "0" PGmb144 ""))
((< Gmb 180) (command "pline" PGmb21 PGmb2 PGmb22 "w" "1.0" "0" PGmb23 ""))
((= Gmb 180) (command "pline" PGmb21 PGmb24 "w" "1.0" "0" PGmb25 ""))
((or (and (> Gmb 180) (< Gmb 270)) (and (> Gmb 270) (< Gmb 360)))
(command "pline" PGmb21 PGmb2 PGmb26 "w" "1.0" "0" PGmb27 ""))
((= Gmb 270) (command "pline" PGmb31 PGmb32 PGmb33 "w" "1.0" "0" PGmb34 ""))
)
(setq V1 (1+ V1))
);endlambda
LisPTcoc LisPGmb LisPGmb1 LisPKc LisPho LisPmd LisPdo LisPss
LisTcoc LisGoc LisLkcdo LisHo Lismd Lisdo LisdeltaMD LisdeltaDO
);endmapcar (princ lis)
;-----
;draw two
(setq lisdd (cdr LisLkcd)
Pdd1 (polar Pddi a 3.5) Pdd2 (polar Pddi a 6.5) Pdd3 (polar Pddi a 10)
Pdd4 (polar Pddi a 5)
PKcd (polar Pta1 a 25)
)
(command "layer" "s" "manh" "" "line" pddi pdd3 "")
(setq V4 0)
(repeat (length Lisdd)
(setq
;parameter gradient
Pddi1 (polar Pddi 0 (- (nth V4 Lisdd) (nth V4 LisLkc)))
Pddi2 (polar Pdd3 0 (- (nth V4 Lisdd) (nth V4 LisLkc)))
Pddi3 (polar Pdd4 0 (- (nth V4 Lisdd) (nth V4 LisLkc)))
Pdd11 (polar Pdd1 0 (- (nth V4 Lisdd) (- (nth V4 LisLkc) 10)))
Pdd12 (polar Pdd1 0 (- (nth V4 Lisdd) 10))
Pdd21 (polar Pdd2 0 (- (nth V4 Lisdd) (- (nth V4 LisLkc) 10)))
Pdd22 (polar Pdd2 0 (- (nth V4 Lisdd) 10))
Pdd31 (polar Pdd3 0 (nth V4 Lisdd))
Pdd32 (polar Pddi 0 (nth V4 Lisdd))
Pdd41 (polar Pdd4 0 (nth V4 Lisdd))
PKcd1 (polar PKcd 0 (- (nth V4 Lisdd) (/ (nth V4 LisLkc) 2)))
)
(cond
((> (nth V4 Lisi) 0)
(command
"layer" "s" "manh" ""
"pline" Pddi2 Pdd32 Pdd31 ""
"layer" "s" "chuv" ""
"style" "chuv" "VNI-Helve-condense" "" "1" "" "" ""
"text" "j" "mc" PKcd1 2.5 0.0 (strcat (rtos (nth V4 LisLkco) 2 2) "m" )
"text" "j" "mc" Pdd11 2.5 0.0 (strcat (nth VL LisVL) " - " "D" (rtos D 2 0))
"text" "j" "mc" Pdd22 2.5 0.0 (strcat "i=" (rtos (nth V4 Lisi) 2 4))))
((= (nth V4 Lisi) 0)
(command
"layer" "s" "manh" ""
"pline" Pddi3 Pdd41 Pdd31 Pdd32 ""
"layer" "s" "chuv" ""
"style" "chuv" "VNI-Helve-condense" "" "1" "" "" ""
"text" "j" "mc" PKcd1 2.5 0.0 (strcat (rtos (nth V4 LisLkco) 2 2) "m" )
"text" "j" "mc" Pdd11 2.5 0.0 (strcat (nth VL LisVL) " - " "D" (rtos D 2 0))
"text" "j" "mc" Pdd22 2.5 0.0 (strcat "i=" (rtos (nth V4 Lisi) 2 4))))
((< (nth V4 Lisi) 0)
(command
"layer" "s" "manh" ""
"pline" Pddi1 Pdd31 Pdd32 ""
"layer" "s" "chuv" ""
"style" "chuv" "VNI-Helve-condense" "" "1" "" "" ""
"text" "j" "mc" PKcd1 2.5 0.0 (strcat (rtos (nth V4 LisLkco) 2 2) "m" )
"text" "j" "mc" Pdd12 2.5 0.0 (strcat (nth VL LisVL) " - " "D" (rtos D 2 0))
"text" "j" "mc" Pdd21 2.5 0.0 (strcat "i=" (rtos (nth V4 Lisi) 2 4))))
)
(setq V4 (1+ V4))
)
;--draws ground and pipe bottom level line
(setq
LisPssd (reverse LisPssd)
LisPssd1 (append (cdr LisPssd) (car LisPssd))
LisPssdo (reverse LisPssdo)
LisPssdo1 (append (cdr LisPssdo) (car LisPssdo))
V2 0 V3 0
)
;;;;;;doan nay di chuyen len cho chay truoc;;;;;;;;;;;;;;;;;
(repeat 8
(setq Ptdao (polar Pta1 a 70)
Ptda1 (polar Ptdao c (* V3 10))
Ptda2 (polar Pss c (* V3 10)))
(command "layer" "s" "manh" "" "line" Ptda1 Ptda2 "")
(setq V3 (1+ V3))
);repeat;;;;;;;;;;;;;ket thuc doan di chuyen len cho chay truoc;;;;;;;;;;;;;;;;;;;;;
(repeat (- (length LisPssd) 1)
    (setq gocxeoa(angle (nth V2 LisPssdo)  (nth V2 LisPssdo1)));;;;;;;;;duy viet them ;;;;;;;;;;;;;;;
    (setq a (polar (nth V2 LisPssdo) (+ (/ pi 2) gocxeoa) kcong));;;;;;;;;duy viet them ;;;;;;;;;;;;;;;
    (setq b (polar (nth V2 LisPssdo1) (+ (/ pi 2) gocxeoa) kcong));;;;;;;;;duy viet them ;;;;;;;;;;;;;;;
(command
"layer" "s" "manh" ""
"line" (nth V2 LisPssd) (nth V2 LisPssd1) ""
"layer" "s" "ong" ""
"line" (nth V2 LisPssdo) (nth V2 LisPssdo1) ""
"line" a b "";;;;;;;;;duy viet them ;;;;;;;;;;;;;;;
)
(chenkyhieudat)   ;;;;;;;;;duy viet them ;;;;;;;;;;;;;;;
(setq V2 (1+ V2))
)

;--end draws ground and pipe bottom level line
(onap2)
);progn
);end function STD
;--------------------
;;;;;;;;;;;;;;duy viet them phan chen ky hieu dat;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(defun chenkyhieudat ()
    (setq  daiab(distance (nth V2 LisPssd)  (nth V2 LisPssd1)))  
    (setq gocxeo(angle (nth V2 LisPssd)  (nth V2 LisPssd1)))
    (setq solan (- (fix (/ daiab 30)) 1))
    (setq c (polar (nth V2 LisPssd) gocxeo 30))
(command "layer" "s" "dat" "")
(command ".INSERT" "ky hieu dat 5" (nth V2 LisPssd) 1 1 (nth V2 LisPssd1))
(repeat solan
(command "copy" "last" "" (nth V2 LisPssd) c "")
)
);;;;;;;;;;;;;;ket thuc phan duy viet them;;;;;;;;;;;;;;;;;;;;;;

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 có lisp được một anh bạn cho (vẽ trắc dọc ống cấp nước). Lisp sử dụng rất tốt nhưng có những cái chưa hoàn thiện lắm và rất còn bất tiện cho người sử dụng

Đối với lisp mình chỉ mới bắt đầu tìm hiểu nên còn lơ mơ lắm. Có vấn đề muốn nhờ các bạn trên diễn đàn chỉ bảo thêm (mình chưa hiểu lắm đừng cười mình nha)

Mình trích một đoạn code (của đoạn code dưới) như thế này:

.........

(setq

Tln (getint "\nTy le ngang 1/x (100, 200, 500, 1000); x="))

Tld (getint "\nTy le dung 1/y (100, 200); y="))

Tn (/ 1000.0 Tln)

Td (/ 1000.0 Tld)

)

........

Mình muốn gán tỷ lệ đứng và ngang bằng cách dùng hàm strcat

"text" "j" "ml" Pta5 2.5 0.0 ((strcat "TYÛ LEÄ NGANG: 1/" (rtos Tln))

"text" "j" "ml" Pta6 2.5 0.0 (strcat "TYÛ LEÄ ÑÖÙNG: 1/" (rtos Tld))

nhưng khi nhập tỷ lệ đứng và ngang xong thì thoát luôn.

Nhờ các bạn giải thích và hướng dẫn giúp mình. Cảm ơn tất cả

;--------------------------------
;;function set parameter
(defun Init ()
(setvar "BLIPMODE" 0)
(setvar "CMDECHO" 0)
(setvar "ANGBASE" 0)
);;
;--------------------------------
;;function return parameter
(defun Reinit ()
(setvar "BLIPMODE" 0)
(setvar "CMDECHO" 1)
(setvar "ANGBASE" 0)
)
;--------------------------------
;;function change degree to radian
(defun doi (a)
(* PI (/ a 180))
)
;--------------------------------
;function set corner by radian
(defun doi1 ()
(setq a 1.5707965 a45 0.78539825
b 3.141593 b45 -0.78539825
c 4.7123895
)
)
;--------------------------------
;;function change radian to degree
(defun doi2 (d)
(* 180 (/ d pi))
)
;;
;--------------------------------
; make layer
(defun taolop ()
(command
"-OSNAP" "OFF"
"layer" "m" "manh" "c" "252" "" "l" "continuous" "manh" "lw" "0.2" "" ""
"layer" "m" "giong" "c" "252" "" "l" "continuous" "giong" "lw" "0.2" "" ""
"layer" "m" "bao" "c" "1" "" "l" "continuous" "bao" "lw" "0.25" "" ""
"layer" "m" "ong" "c" "5" "ong" "l" "continuous" "ong" "lw" "0.3" "" "" 
"layer" "m" "chua" "c" "3" "" "l" "continuous" "" ""
"layer" "m" "dat" "c" "16" "" "l" "continuous" "dat" "lw" "0.1" "" ""
"layer" "m" "chuv" "c" "3" "" "l" "continuous" "" ""
"style" "chuv" "VNI-Helve-condense" "" "1" "" "" ""
"style" "chua" "romans.shx" "" "0.7" "" "" "" ""
)
)
;
;--------------------------------
;---------------------------------
;1 ENDP 2 MID 4 CEN 8 NODE 16 QUA 32 INT 64 INS 128 PER 256 TAN 512 NEA 1024 QUI
;;ONAP ENDP INT(MID) NEAR
(defun onap ()
(setvar "OSMODE" (+ 1 32 512))
)
;;;;ONAP ENDP INT(MID) CEN
(defun onap1 ()
(setvar "OSMODE" (+ 1 4 32))
)
;;;
;;;;ONAP ENDP INT(MID) CEN
(defun onap2 ()
(setvar "OSMODE" (+ 1 2 4 16 32 128 512))
)
;;;;;;
(defun ofnap ()
(command "-OSNAP" "OFF" )
)
;----------------------------(ofnap) (onap2)
(defun COCSS()
(doi1)
(setq
i 1
j 0
Ess1 (+ Ess 1)
Ptssx (polar Ptss 0 -1) Ptssx1 (polar Ptssx a (* Esn Td))
Ptssy (polar Ptss 0 1) Ptssy1 (polar Ptssy a (* Esn Td))
)
(Repeat Esn
(setq Ess2 (rtos Ess1 2 2)
Ptss2 (polar Ptss 0 (* i 0.5))
Ptss21 (polar Ptss2 a (* j Td)) Ptss22 (polar Ptss21 a Td)
Ptss3 (polar Ptss 0 -1)
Ptss31 (polar Ptss3 a (+ (* j Td) Td)) Ptss32 (polar Ptss31 0 -5)
Ptss33 (polar Ptss32 0 -1)
)
(command
"layer" "s" "manh" ""
"pline" Ptss21 "w" 1.0 1.0 Ptss22 ""
"line" Ptss31 Ptss32 ""
"layer" "s" "chuv" ""
"style" "chuv" "VNI-Helve-condense" "" "1" "" "" ""
"text" "j" "mr" Ptss33 2.5 0.0 (strcat Ess2)
)
(setq
i (* i -1)
j (+ j 1)
Ess1 (+ Ess1 1)
)
);endrepeat
(command "layer" "s" "manh" "" "pline" Ptssx "w" 0.0 0.0 Ptssx1 Ptssy1 Ptssy ""
)
);end function comparation (princ lis)
;==========================
;function main
(defun C:STD ()
(setvar "dimzin" 0)
(Init)
(taolop)
(doi1)
;-----------------------------------------
;-----------------------------------------
(Princ "\n**Day la chuong trinh ve TRAC DOC duoc viet boi Anh NGUYEN NGOC QUANG**")
(setq
Tln (getint "\nTy le ngang 1/x (100, 200, 500, 1000); x="))
Tld (getint "\nTy le dung 1/y (100, 200); y="))
Tn (/ 1000.0 Tln)
Td (/ 1000.0 Tld)
)
;-----------------------------------------
(setq LisLkcd1 nil LisLkcd nil
LisLkcdo nil)
(initget "Moi Tieptuc")
(Princ "\n")
(setq Ansertt (getint "\nVe moi hay tiep tuc <1.Moi/2.Tieptuc> :")
)
(cond
((= Ansertt 1)
(setq
Kcdo 0 LisLkcdo (cons Kcdo LisLkcdo)
Kcd 0 LisLkcd1 (cons Kcd LisLkcd1)
LisLkcd LisLkcdo)
)
((= Ansertt 2)
(setq
Kcdo (getreal "\nChieu dai tai coc tiep theo (m):");distance 2 station
Kcd (* Kcdo Tn) ; distance
LisLkcd (cons (- Kcdo Kcdo) LisLkcd)
LisLkcdo (cons Kcdo LisLkcdo)
LisLkcd1 (cons Kcd LisLkcd1))
)
)
(progn
;------------------------------------(princ lis)
(onap)
(setq Pta (getpoint "\nChon diem bat dau ve :")
Pta1 (polar pta 0 60) 
Pta2 (polar pta 0 5) 
Pta3 (polar pta 0 60)
Pta4 (polar pta 0 14.75)
Pta5 (polar pta2 a 95)
Pta6 (polar pta4 a 90)
Ptss1 (polar pta 0 57) 
Ptss (polar Ptss1 a 70) 
Ptsg1 (polar pta 0 60)
Ptsg (polar Ptsg1 a 15)
Ess (getreal "\nCao do so sanh :")
Esn (getint "\nSo moc so sanh :")
Es (rtos Ess 2 2)
VL (getint "\nVat lieu ong <0.STK/1.uPVC/2.THEP/3.GANG/4.BE TONG/5.BTCT/6.SANH/7.HDPE>:")
D (getreal "\nDuong kinh ong :")
Ho (getreal "\nDo sau chon ong ban dau (m):")
kcong (getreal "\nThe hien MAT CAT DOC ONG :")    ;;;;;;duyvietthem;;;;;;;;;;
i 0
LisCSS '("[sTAKE NO.]" "TEÂN COÏC"
"[ANGLE OF DIRECTION]" "GOÙC QUAY MAËT BAÈNG (0%%176)"
"[ACCU. DISTANCE]" "KHOAÛNG CAÙCH COÄNG DOÀN (m)"
"[DIA - GRADIENT.]" "ÑÖÔØNG KÍNH - ÑOÄ DOÁC (%)"
"[DEPTH .]" "ÑOÄ SAÂU CHOÂN OÁNG (m)"
"[PIPE BOTTOM ELEV.]" "CAO ÑOÄ ÑAÙY OÁNG (m)"
"[GROUND ELEV.]" "CAO ÑOÄ MAËT ÑAÁT (m)"
"[DATUM.]" "COÁT SO SAÙNH")
LisTs '("Cot mat dat coc so" "Do doc doan ong giua hai coc"
"Khoang cach giua hai coc"
"Goc quay mat bang coc so")
LisVL '("STK" "uPVC" "THEÙP" "GANG" "BEÂ TOÂNG" "BTCT" "SAØNH" "HDPE")
Lismd nil Lisdo nil LisHo nil Lisi nil Lisio nil LisLkc nil LisLkco nil
LisTcoc nil LisGoc nil LisDeltaMD nil LisdeltaDO nil
)
(ofnap)
;--------
;-------------------------------------------
;data stake no.
(Princ "\n**Neu khong muon ky tu dau cua Coc la mot Chu Cai (VD:A, B...) ma la mot so thuc 
(VD:1, 2...) thì nhan phim Space bar de tiep tuc**")
(setq k (getint "\nSo coc:")
CTc (getstring "\nKy tu dau cua coc:")
Tcoc (getint "\nTen coc dau tien hoac tiep theo:")
Ki Tcoc
i1 Tcoc
i2 Tcoc
i3 Tcoc
i4 Tcoc
i5 Tcoc
)
(repeat k
(progn
(setq
LisTcoc (cons Tcoc LisTcoc)
Tcoc (1+ Tcoc)
)
);endprogn
);endrepeat;(princ Lis)
(setq LisTcoc (reverse LisTcoc))
;-------------------------------------------
;data ground level.
(repeat k
(progn
(print (nth 0 LisTs)) (prin1 CTc) (prin1 Ki)
(setq
Cmdo (getreal "\nCao do mat dat (m) :")
Cmd Cmdo
Lismd (cons Cmd Lismd)
Ki (1+ Ki)
)
);endprogn
);endrepeat;(princ Lis)
(setq Lismd (reverse Lismd))
;-------------------------------------------
;data gradient.
(repeat (- k 1)
(progn
(print (nth 1 LisTs)) (prin1 CTc) (prin1 i1) (prin1 CTc) (prin1 (+ i1 1))
(setq
io (getreal "\nDo doc dat ong <+ doc xuoi/- doc nguoc> (%) :")
io1 (/ io 1) Lisi (cons io1 Lisi)
io2 (* io 1000) Lisio (cons io2 Lisio)
i1 (1+ i1)
)
);endprogn
);endrepeat;(princ Lis)
(setq Lisi (reverse Lisi) Lisio (reverse Lisio))
;-------------------------------------------
;data distance.
(repeat (- k 1)
(progn
(print (nth 2 LisTs)) (prin1 CTc) (prin1 i2) (prin1 CTc) (prin1 (+ i2 1))
(setq
Kco (getreal "\nKhoang cach giua hai coc (m):");distance 2 station
Kc (* Kco Tn) ; distance
LisLkco (cons Kco LisLkco)
LisLkc (cons Kc LisLkc)
i2 (1+ i2)
)
);endprogn
);endrepeat;(princ Lis)
(setq LisLkc (reverse LisLkc) LisLkco (reverse LisLkco))
;----------------------------------------
;mapcar Kcdo Kcd1
(setq n1 0 Kcd1 0)
;Kcdo 0 LisLkcdo (cons Kcdo LisLkcdo)
;Kcd 0 LisLkcd1 (cons Kcd LisLkcd1))
(mapcar
'(lambda (Kco Kc)
(setq
Kcdo (+ Kcdo (nth n1 LisLkco)) LisLkcdo (cons Kcdo LisLkcdo)
Kcd (+ Kcd (nth n1 LisLkc)) LisLkcd1 (cons Kcd LisLkcd1)
Kcd1 (+ Kcd1 (nth n1 LisLkc)) LisLkcd (cons Kcd1 LisLkcd)
n1 (1+ n1)
)
);endlambda
LisLkco LisLkc
);endmapcar
(setq LisLkcdo (reverse LisLkcdo) LisLkcd1 (reverse LisLkcd1) LisLkcd (reverse LisLkcd))
;----------------------------------------
;mapcar deltaMD deltaDO
(setq n2 1
n3 0
LisHo (cons Ho LisHo)
Cdo (- (nth 0 Lismd) Ho) Lisdo (cons Cdo Lisdo)
DeltaMD (* (- (nth 0 Lismd) Ess) Td) DeltaDO (* (- (nth 0 Lismd) Ess Ho) Td)
LisDeltaMD (cons DeltaMD LisDeltaMD) LisDeltaDo (cons DeltaDo LisDeltaDo))
(mapcar
'(lambda (Cmd io1 Kco)
(setq
Cdo (- Cdo (* Kco (nth n3 Lisi))) Lisdo (cons Cdo Lisdo)
Ho (- (nth n2 Lismd) Cdo) LisHo (cons Ho LisHo)
DeltaMD (* (- (nth n2 Lismd) Ess) Td) LisDeltaMD (cons DeltaMD LisDeltaMD)
DeltaDO (- deltaDO (* (nth n3 LisLkco) (nth n3 Lisi) Td))
LisDeltaDO (cons DeltaDO LisDeltaDO)
n2 (1+ n2)
n3 (1+ n3)
)
);endlambda
Lismd Lisi LisLkco
);endmapcar
(setq LisDeltaMD (reverse LisDeltaMD) LisDeltaDO (reverse LisDeltaDO)
LisHo (reverse LisHo) Lisdo (reverse Lisdo))
;-------------------------------------------
;data cornor.
(repeat k
(progn
(print (nth 3 LisTs)) (prin1 CTc) (prin1 i3)
(setq
Gmb (getreal "\nGoc quay mat bang :")
LisGoc (cons Gmb LisGoc)
i3 (1+ i3)
)
);endprogn
);endrepeat;(princ Lis)
(setq LisGoc (reverse LisGoc))
;-------------------------------------------
(Repeat 8
(setq Ptb (polar Pta a (* i 10))
Ptc (polar Pta1 a (* i 10))
ptd (polar pta2 a (+ (* i 10) 3.5))
)
(command
"layer" "s" "manh" ""
"line" Ptb Ptc ""
"layer" "s" "chuv" ""
"style" "chuv" "VNI-Helve-condense" "" "1" "" "" ""
"text" "j" "ml" ptd 2.5 0.0 (nth (+ (* i 2) 1) LisCSS)
)
(setq i (+ i 1))
);endrepeat
(command
"layer" "s" "manh" ""
"line" Pta Ptb ""
"layer" "s" "chuv" ""
"style" "chuv" "VNI-Helve-condense" "" "1" "" "" "" ""
"text" "j" "ml" Pta5 2.5 0.0 (strcat "TYÛ LEÄ NGANG: 1/" (rtos Tln))
"text" "j" "ml" Pta6 2.5 0.0 (strcat "TYÛ LEÄ ÑÖÙNG: 1/" (rtos Tld))
;------------------------
(COCSS)
;draw one
(setq LisPTcoc nil PTcoc (polar Pta1 a 5) LisPTcoc (cons PTcoc LisPTcoc)
LisPGmb nil PGmb (polar Ptss1 a 15) LisPGmb (cons PGmb LisPGmb)
LisPGmb nil PGmb (polar Ptsg1 a 17) LisPGmb (cons PGmb LisPGmb)
LisPGmb1 nil PGmb1 (polar Pta1 a 13) LisPGmb1 (cons PGmb1 LisPGmb1)
LisPKc nil PKc (polar Pta1 a 25) LisPKc (cons PKc LisPKc)
LisPdd nil Pdd (polar Pta1 a 30) LisPdd (cons Pdd LisPdd)
Pddi (polar pta1 a 30)
LisPho nil Pho (polar Pta1 a 45) LisPho (cons Pho LisPho)
LisPmd nil Pmd (polar Pta1 a 65) LisPmd (cons Pmd LisPmd)
LisPdo nil Pdo (polar Pta1 a 55) LisPdo (cons Pdo LisPdo)
LisPss nil Pss (polar Pta1 a 70) LisPss (cons Pss LisPss)
LisPsg nil Psg (polar Pta1 a 15) LisPsg (cons Psg LisPsg)
LisPssd nil LisPssd1 nil LisPssdo nil LisPssdo1 nil
V 0
)
(mapcar
'(lambda (Kc)
(setq
PTcoc (polar PTcoc 0 (nth V LisLkc)) LisPTcoc (cons PTcoc LisPTcoc)
PGmb (polar PGmb 0 (nth V LisLkc)) LisPGmb (cons PGmb LisPGmb)
PGmb1 (polar PGmb1 0 (nth V LisLkc)) LisPGmb1 (cons PGmb1 LisPGmb1)
PKc (polar PKc 0 (nth V LisLkc)) LisPKc (cons PKc LisPKc)
Pdd (polar Pdd 0 (nth V LisLkc)) LisPdd (cons Pdd LisPdd)
Pho (polar Pho 0 (nth V LisLkc)) LisPho (cons Pho LisPho)
Pmd (polar Pmd 0 (nth V LisLkc)) LisPmd (cons Pmd LisPmd)
Pdo (polar Pdo 0 (nth V LisLkc)) LisPdo (cons Pdo LisPdo)
Pss (polar Pss 0 (nth V LisLkc)) LisPss (cons Pss LisPss)
V (1+ V)
)
)
LisLkc
)
(setq LisPTcoc (reverse LisPTcoc)
LisPGmb (reverse LisPGmb) LisPGmb1 (reverse LisPGmb1)
LisPKc (reverse LisPKc)
LisPdd (reverse LisPdd)
LisPHo (reverse LisPHo) LisPmd (reverse LisPmd) LisPdo (reverse LisPdo)
LisPss (reverse LisPss)
V1 0)
;-----------
(mapcar
'(lambda (PTcoc PGmb PGmb1 PKc Pho Pmd Pdo Pss
Tcoc Gmb Kcdo Ho Cmd Cdo deltaMD deltaDO)
(setq
;parameter draw rotational corner
PGmb11 (polar PGmb1 0 -3.5) PGmb14 (polar PGmb1 0 3.5)
PGmb12 (polar PGmb1 a 2) PGmb122 (polar PGmb12 0 -3.5) PGmb13 (polar PGmb12 0 3.5);90
PGmb133 (polar PGmb13 a 2.5) PGmb144 (polar PGmb13 a 4.5)
PGmb2 (polar PGmb1 a 2) PGmb21 (polar PGmb2 0 -3.5);<180
PGmb22 (polar PGmb2 a45 4.5) PGmb23 (polar PGmb2 a45 6.5);<180
PGmb24 (polar PGmb2 0 3.5) PGmb25 (polar PGmb2 0 6);=180
PGmb26 (polar PGmb2 b45 4) PGmb27 (polar PGmb2 b45 6.5);>180
PGmb3 (polar PGmb1 a 2) PGmb31 (polar PGmb3 0 -3.5) PGmb32 (polar PGmb3 0 3.5);270
PGmb33 (polar PGmb32 c 2.5) PGmb34 (polar PGmb32 c 4.5)
;end draw rotational corner
;parameter comparation
Pssd (polar Pss a (nth V1 LisDeltaMD)) LisPssd (cons Pssd LisPssd)
Pssdo (polar Pss a (nth V1 LisDeltaDO)) LisPssdo (cons Pssdo LisPssdo))
(command
"layer" "s" "chuv" ""
"style" "chuv" "VNI-Helve-condense" "" "1" "" "" ""
"text" "j" "mc" PTcoc 4.5 0.0 (strcat CTc (itoa (nth V1 LisTcoc)))
"text" "j" "mc" PKc 2.2 90.0 (rtos (nth V1 LisLkcdo) 2 2)
"text" "j" "mc" Pho 2.2 90.0 (rtos (nth V1 LisHo) 2 2)
"text" "j" "mc" Pmd 2.2 90.0 (rtos (nth V1 Lismd) 2 2)
"text" "j" "mc" Pdo 2.2 90.0 (rtos (nth V1 Lisdo) 2 2)
"layer" "s" "chua" ""
"style" "chua" "romans.shx" "" "0.7" "" "" "" ""
"text" "j" "mc" PGmb 2.0 0.0 (strcat (rtos (nth V1 LisGoc) 2 0) "%%d")
"layer" "s" "bao" ""
"circle" PTcoc "5"
"layer" "s" "giong" ""
"line" Pss Pssd ""
"layer" "s" "manh" "")
(cond
((= Gmb 90) (command "pline" PGmb122 PGmb13 PGmb133 "w" "1.0" "0" PGmb144 ""))
((< Gmb 180) (command "pline" PGmb21 PGmb2 PGmb22 "w" "1.0" "0" PGmb23 ""))
((= Gmb 180) (command "pline" PGmb21 PGmb24 "w" "1.0" "0" PGmb25 ""))
((or (and (> Gmb 180) (< Gmb 270)) (and (> Gmb 270) (< Gmb 360)))
(command "pline" PGmb21 PGmb2 PGmb26 "w" "1.0" "0" PGmb27 ""))
((= Gmb 270) (command "pline" PGmb31 PGmb32 PGmb33 "w" "1.0" "0" PGmb34 ""))
)
(setq V1 (1+ V1))
);endlambda
LisPTcoc LisPGmb LisPGmb1 LisPKc LisPho LisPmd LisPdo LisPss
LisTcoc LisGoc LisLkcdo LisHo Lismd Lisdo LisdeltaMD LisdeltaDO
);endmapcar (princ lis)
;-----
;draw two
(setq lisdd (cdr LisLkcd)
Pdd1 (polar Pddi a 3.5) Pdd2 (polar Pddi a 6.5) Pdd3 (polar Pddi a 10)
Pdd4 (polar Pddi a 5)
PKcd (polar Pta1 a 25)
)
(command "layer" "s" "manh" "" "line" pddi pdd3 "")
(setq V4 0)
(repeat (length Lisdd)
(setq
;parameter gradient
Pddi1 (polar Pddi 0 (- (nth V4 Lisdd) (nth V4 LisLkc)))
Pddi2 (polar Pdd3 0 (- (nth V4 Lisdd) (nth V4 LisLkc)))
Pddi3 (polar Pdd4 0 (- (nth V4 Lisdd) (nth V4 LisLkc)))
Pdd11 (polar Pdd1 0 (- (nth V4 Lisdd) (- (nth V4 LisLkc) 10)))
Pdd12 (polar Pdd1 0 (- (nth V4 Lisdd) 10))
Pdd21 (polar Pdd2 0 (- (nth V4 Lisdd) (- (nth V4 LisLkc) 10)))
Pdd22 (polar Pdd2 0 (- (nth V4 Lisdd) 10))
Pdd31 (polar Pdd3 0 (nth V4 Lisdd))
Pdd32 (polar Pddi 0 (nth V4 Lisdd))
Pdd41 (polar Pdd4 0 (nth V4 Lisdd))
PKcd1 (polar PKcd 0 (- (nth V4 Lisdd) (/ (nth V4 LisLkc) 2)))
)
(cond
((> (nth V4 Lisi) 0)
(command
"layer" "s" "manh" ""
"pline" Pddi2 Pdd32 Pdd31 ""
"layer" "s" "chuv" ""
"style" "chuv" "VNI-Helve-condense" "" "1" "" "" ""
"text" "j" "mc" PKcd1 2.5 0.0 (strcat (rtos (nth V4 LisLkco) 2 2) "m" )
"text" "j" "mc" Pdd11 2.5 0.0 (strcat (nth VL LisVL) " - " "D" (rtos D 2 0))
"text" "j" "mc" Pdd22 2.5 0.0 (strcat "i=" (rtos (nth V4 Lisi) 2 4))))
((= (nth V4 Lisi) 0)
(command
"layer" "s" "manh" ""
"pline" Pddi3 Pdd41 Pdd31 Pdd32 ""
"layer" "s" "chuv" ""
"style" "chuv" "VNI-Helve-condense" "" "1" "" "" ""
"text" "j" "mc" PKcd1 2.5 0.0 (strcat (rtos (nth V4 LisLkco) 2 2) "m" )
"text" "j" "mc" Pdd11 2.5 0.0 (strcat (nth VL LisVL) " - " "D" (rtos D 2 0))
"text" "j" "mc" Pdd22 2.5 0.0 (strcat "i=" (rtos (nth V4 Lisi) 2 4))))
((< (nth V4 Lisi) 0)
(command
"layer" "s" "manh" ""
"pline" Pddi1 Pdd31 Pdd32 ""
"layer" "s" "chuv" ""
"style" "chuv" "VNI-Helve-condense" "" "1" "" "" ""
"text" "j" "mc" PKcd1 2.5 0.0 (strcat (rtos (nth V4 LisLkco) 2 2) "m" )
"text" "j" "mc" Pdd12 2.5 0.0 (strcat (nth VL LisVL) " - " "D" (rtos D 2 0))
"text" "j" "mc" Pdd21 2.5 0.0 (strcat "i=" (rtos (nth V4 Lisi) 2 4))))
)
(setq V4 (1+ V4))
)
;--draws ground and pipe bottom level line
(setq
LisPssd (reverse LisPssd)
LisPssd1 (append (cdr LisPssd) (car LisPssd))
LisPssdo (reverse LisPssdo)
LisPssdo1 (append (cdr LisPssdo) (car LisPssdo))
V2 0 V3 0
)
;;;;;;doan nay di chuyen len cho chay truoc;;;;;;;;;;;;;;;;;
(repeat 8
(setq Ptdao (polar Pta1 a 70)
Ptda1 (polar Ptdao c (* V3 10))
Ptda2 (polar Pss c (* V3 10)))
(command "layer" "s" "manh" "" "line" Ptda1 Ptda2 "")
(setq V3 (1+ V3))
);repeat;;;;;;;;;;;;;ket thuc doan di chuyen len cho chay truoc;;;;;;;;;;;;;;;;;;;;;
(repeat (- (length LisPssd) 1)
    (setq gocxeoa(angle (nth V2 LisPssdo)  (nth V2 LisPssdo1)));;;;;;;;;duy viet them ;;;;;;;;;;;;;;;
    (setq a (polar (nth V2 LisPssdo) (+ (/ pi 2) gocxeoa) kcong));;;;;;;;;duy viet them ;;;;;;;;;;;;;;;
    (setq b (polar (nth V2 LisPssdo1) (+ (/ pi 2) gocxeoa) kcong));;;;;;;;;duy viet them ;;;;;;;;;;;;;;;
(command
"layer" "s" "manh" ""
"line" (nth V2 LisPssd) (nth V2 LisPssd1) ""
"layer" "s" "ong" ""
"line" (nth V2 LisPssdo) (nth V2 LisPssdo1) ""
"line" a b "";;;;;;;;;duy viet them ;;;;;;;;;;;;;;;
)
(chenkyhieudat)   ;;;;;;;;;duy viet them ;;;;;;;;;;;;;;;
(setq V2 (1+ V2))
)

;--end draws ground and pipe bottom level line
(onap2)
);progn
);end function STD
;--------------------
;;;;;;;;;;;;;;duy viet them phan chen ky hieu dat;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(defun chenkyhieudat ()
    (setq  daiab(distance (nth V2 LisPssd)  (nth V2 LisPssd1)))  
    (setq gocxeo(angle (nth V2 LisPssd)  (nth V2 LisPssd1)))
    (setq solan (- (fix (/ daiab 30)) 1))
    (setq c (polar (nth V2 LisPssd) gocxeo 30))
(command "layer" "s" "dat" "")
(command ".INSERT" "ky hieu dat 5" (nth V2 LisPssd) 1 1 (nth V2 LisPssd1))
(repeat solan
(command "copy" "last" "" (nth V2 LisPssd) c "")
)
);;;;;;;;;;;;;;ket thuc phan duy viet them;;;;;;;;;;;;;;;;;;;;;;

Không biết mình hỏi có vô duyên không? (nếu có gì mong các bạn thông cảm cho mình), thật tình mình không hiểu mấy về lisp nên muốn được học hỏi thêm. Nhờ các bạn hướng dẫn giúp. Cảm ơn tất cả

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 trích một đoạn code (của đoạn code dưới) như thế này:

.........

(setq

Tln (getint "\nTy le ngang 1/x (100, 200, 500, 1000); x="))

Tld (getint "\nTy le dung 1/y (100, 200); y="))

Tn (/ 1000.0 Tln)

Td (/ 1000.0 Tld)

)

........

Mình muốn gán tỷ lệ đứng và ngang bằng cách dùng hàm strcat

"text" "j" "ml" Pta5 2.5 0.0 ((strcat "TYÛ LEÄ NGANG: 1/" (rtos Tln))

"text" "j" "ml" Pta6 2.5 0.0 (strcat "TYÛ LEÄ ÑÖÙNG: 1/" (rtos Tld))

nhưng khi nhập tỷ lệ đứng và ngang xong thì thoát luôn.

Nhờ các bạn giải thích và hướng dẫn giúp mình. Cảm ơn tất cả

........................

Bạn viết khó hiểu quá !

Cần trình bày sao cho nguời đọc hiểu thì mới giúp bạn đuợc.

về hàm STRCAT

đọan ((strcat "TYÛ LEÄ NGANG: 1/" (rtos Tln)) dư 1 dấu mở ngoặc

-> (strcat "TYÛ LEÄ NGANG: 1/" (rtos Tln))

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 viết khó hiểu quá !

Cần trình bày sao cho nguời đọc hiểu thì mới giúp bạn đuợc.

về hàm STRCAT

đọan ((strcat "TYÛ LEÄ NGANG: 1/" (rtos Tln)) dư 1 dấu mở ngoặc

-> (strcat "TYÛ LEÄ NGANG: 1/" (rtos Tln))

Cảm ơn bạn đã quan tâm. Ý mình là thế này (đoạn lisp trên bị lỗi khi mình dùng hàm strcat)

Mình có đoạn lisp như trên mình đã gửi và kèm theo trích đoạn để các bạn dễ hình dung

Mình muốn khi nhập giá trị tỷ lệ ngang và tỷ lệ đứng (khi thực hiện lệnh tại dòng command) thì lisp lấy giá trị nhập tự kết nối chuỗi (hàm strcat) và ghi ra màn hình (cụ thể ở đây là: tỷ lệ ngang: 1/500 hoặc 1/1000; tỷ lệ đứng : 1/100 hoặc 1/200)

Bạn có thể xem thêm lisp mình gửi kèm và hướng dẫn thêm giúp mình. Cảm ơn bạn nhiề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
Mình muốn khi nhập giá trị tỷ lệ ngang và tỷ lệ đứng (khi thực hiện lệnh tại dòng command) thì lisp lấy giá trị nhập tự kết nối chuỗi (hàm strcat) và ghi ra màn hình (cụ thể ở đây là: tỷ lệ ngang: 1/500 hoặc 1/1000; tỷ lệ đứng : 1/100 hoặc 1/200)

Bạn có thể xem thêm lisp mình gửi kèm và hướng dẫn thêm giúp mình. Cảm ơn bạn nhiều

Nếu chỉ muốn ghi ra màn hình thì bạn làm thế này

(princ (strcat "\nTY LE NGANG: 1/" (rtos Tln)))

(princ (strcat "\nTY LE DUNG: 1/" (rtos Tld)))

Hy vọng đúng ý bạn

-------------------------------------------------------------------------------------

P/S: Các tiền bối xem dùm em chữ ký

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ếu chỉ muốn ghi ra màn hình thì bạn làm thế này

(princ (strcat "\nTY LE NGANG: 1/" (rtos Tln)))

(princ (strcat "\nTY LE DUNG: 1/" (rtos Tld)))

Hy vọng đúng ý bạn

-------------------------------------------------------------------------------------

P/S: Các tiền bối xem dùm em chữ ký

Cảm ơn bạn đã quan tâm. Nhưng khi sửa như bạn thì lisp càng tồi tệ hơn (đâu giúp ích được gì cho mình). Nếu bạn muốn giúp thì bạn phải đọc kỹ nội dung mình gửi chứ. Dù sao cũng cảm ơn bạ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
Cảm ơn bạn đã quan tâm. Nhưng khi sửa như bạn thì lisp càng tồi tệ hơn (đâu giúp ích được gì cho mình). Nếu bạn muốn giúp thì bạn phải đọc kỹ nội dung mình gửi chứ. Dù sao cũng cảm ơn bạn.

Vậy chắc thế này:

(setq Tln (getint "\nTy le ngang 1/x (100, 200, 500, 1000); x=")

Tld (getint "\nTy le dung 1/y (100, 200); y=")

Tn(/ 1000.0 TLN)

Td(/ 1000.0 TLD)

)

(command "text" "j" "ml" Pta5 2.5 0.0 (strcat "TYÛ LEÄ NGANG: 1/" (rtos TLN)))

(command "text" "j" "ml" Pta6 2.5 0.0 (strcat "TYÛ LEÄ ÑÖÙNG: 1/" (rtos TLD)))

 

(Pta5 và Pta6 bạn đã có)

--------------------------------------------------------------------------------------------

P/S:

Bạn viết khó hiểu quá !

Cần trình bày sao cho nguời đọc hiểu thì mới giúp bạn đuợc.

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
Vậy chắc thế này:

(setq Tln (getint "\nTy le ngang 1/x (100, 200, 500, 1000); x=")

Tld (getint "\nTy le dung 1/y (100, 200); y=")

Tn(/ 1000.0 TLN)

Td(/ 1000.0 TLD)

)

(command "text" "j" "ml" Pta5 2.5 0.0 (strcat "TYÛ LEÄ NGANG: 1/" (rtos TLN)))

(command "text" "j" "ml" Pta6 2.5 0.0 (strcat "TYÛ LEÄ ÑÖÙNG: 1/" (rtos TLD)))

 

(Pta5 và Pta6 bạn đã có)

--------------------------------------------------------------------------------------------

P/S:

Dòng màu đỏ là trong lisp trên mình gửi đã có rồi (bạn đọc toàn bộ nội dung bài mình gửi phía trên là bạn hiểu). Nếu được nhờ bạn giúp mình. Cảm ơn bạ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
Mình có lisp được một anh bạn cho (vẽ trắc dọc ống cấp nước). Lisp sử dụng rất tốt nhưng có những cái chưa hoàn thiện lắm và rất còn bất tiện cho người sử dụng

Đối với lisp mình chỉ mới bắt đầu tìm hiểu nên còn lơ mơ lắm. Có vấn đề muốn nhờ các bạn trên diễn đàn chỉ bảo thêm (mình chưa hiểu lắm đừng cười mình nha)

Mình trích một đoạn code (của đoạn code dưới) như thế này:

.........

(setq

Tln (getint "\nTy le ngang 1/x (100, 200, 500, 1000); x="))

Tld (getint "\nTy le dung 1/y (100, 200); y="))

Tn (/ 1000.0 Tln)

Td (/ 1000.0 Tld)

)

........

Mình muốn gán tỷ lệ đứng và ngang bằng cách dùng hàm strcat

"text" "j" "ml" Pta5 2.5 0.0 ((strcat "TYÛ LEÄ NGANG: 1/" (rtos Tln))

"text" "j" "ml" Pta6 2.5 0.0 (strcat "TYÛ LEÄ ÑÖÙNG: 1/" (rtos Tld))

nhưng khi nhập tỷ lệ đứng và ngang xong thì thoát luôn.

Nhờ các bạn giải thích và hướng dẫn giúp mình. Cảm ơn tất cả

;--------------------------------
;;function set parameter
(defun Init ()
(setvar "BLIPMODE" 0)
(setvar "CMDECHO" 0)
(setvar "ANGBASE" 0)
);;
;--------------------------------
;;function return parameter
(defun Reinit ()
(setvar "BLIPMODE" 0)
(setvar "CMDECHO" 1)
(setvar "ANGBASE" 0)
)
;--------------------------------
;;function change degree to radian
(defun doi (a)
(* PI (/ a 180))
)
;--------------------------------
;function set corner by radian
(defun doi1 ()
(setq a 1.5707965 a45 0.78539825
b 3.141593 b45 -0.78539825
c 4.7123895
)
)
;--------------------------------
;;function change radian to degree
(defun doi2 (d)
(* 180 (/ d pi))
)
;;
;--------------------------------
; make layer
(defun taolop ()
(command
"-OSNAP" "OFF"
"layer" "m" "manh" "c" "252" "" "l" "continuous" "manh" "lw" "0.2" "" ""
"layer" "m" "giong" "c" "252" "" "l" "continuous" "giong" "lw" "0.2" "" ""
"layer" "m" "bao" "c" "1" "" "l" "continuous" "bao" "lw" "0.25" "" ""
"layer" "m" "ong" "c" "5" "ong" "l" "continuous" "ong" "lw" "0.3" "" "" 
"layer" "m" "chua" "c" "3" "" "l" "continuous" "" ""
"layer" "m" "dat" "c" "16" "" "l" "continuous" "dat" "lw" "0.1" "" ""
"layer" "m" "chuv" "c" "3" "" "l" "continuous" "" ""
"style" "chuv" "VNI-Helve-condense" "" "1" "" "" ""
"style" "chua" "romans.shx" "" "0.7" "" "" "" ""
)
)
;
;--------------------------------
;---------------------------------
;1 ENDP 2 MID 4 CEN 8 NODE 16 QUA 32 INT 64 INS 128 PER 256 TAN 512 NEA 1024 QUI
;;ONAP ENDP INT(MID) NEAR
(defun onap ()
(setvar "OSMODE" (+ 1 32 512))
)
;;;;ONAP ENDP INT(MID) CEN
(defun onap1 ()
(setvar "OSMODE" (+ 1 4 32))
)
;;;
;;;;ONAP ENDP INT(MID) CEN
(defun onap2 ()
(setvar "OSMODE" (+ 1 2 4 16 32 128 512))
)
;;;;;;
(defun ofnap ()
(command "-OSNAP" "OFF" )
)
;----------------------------(ofnap) (onap2)
(defun COCSS()
(doi1)
(setq
i 1
j 0
Ess1 (+ Ess 1)
Ptssx (polar Ptss 0 -1) Ptssx1 (polar Ptssx a (* Esn Td))
Ptssy (polar Ptss 0 1) Ptssy1 (polar Ptssy a (* Esn Td))
)
(Repeat Esn
(setq Ess2 (rtos Ess1 2 2)
Ptss2 (polar Ptss 0 (* i 0.5))
Ptss21 (polar Ptss2 a (* j Td)) Ptss22 (polar Ptss21 a Td)
Ptss3 (polar Ptss 0 -1)
Ptss31 (polar Ptss3 a (+ (* j Td) Td)) Ptss32 (polar Ptss31 0 -5)
Ptss33 (polar Ptss32 0 -1)
)
(command
"layer" "s" "manh" ""
"pline" Ptss21 "w" 1.0 1.0 Ptss22 ""
"line" Ptss31 Ptss32 ""
"layer" "s" "chuv" ""
"style" "chuv" "VNI-Helve-condense" "" "1" "" "" ""
"text" "j" "mr" Ptss33 2.5 0.0 (strcat Ess2)
)
(setq
i (* i -1)
j (+ j 1)
Ess1 (+ Ess1 1)
)
);endrepeat
(command "layer" "s" "manh" "" "pline" Ptssx "w" 0.0 0.0 Ptssx1 Ptssy1 Ptssy ""
)
);end function comparation (princ lis)
;==========================
;function main
(defun C:STD ()
(setvar "dimzin" 0)
(Init)
(taolop)
(doi1)
;-----------------------------------------
;-----------------------------------------
(Princ "\n**Day la chuong trinh ve TRAC DOC duoc viet boi Anh NGUYEN NGOC QUANG**")
(setq
Tln (getint "\nTy le ngang 1/x (100, 200, 500, 1000); x="))
Tld (getint "\nTy le dung 1/y (100, 200); y="))
Tn (/ 1000.0 Tln)
Td (/ 1000.0 Tld)
)
;-----------------------------------------
(setq LisLkcd1 nil LisLkcd nil
LisLkcdo nil)
(initget "Moi Tieptuc")
(Princ "\n")
(setq Ansertt (getint "\nVe moi hay tiep tuc  :")
)
(cond
((= Ansertt 1)
(setq
Kcdo 0 LisLkcdo (cons Kcdo LisLkcdo)
Kcd 0 LisLkcd1 (cons Kcd LisLkcd1)
LisLkcd LisLkcdo)
)
((= Ansertt 2)
(setq
Kcdo (getreal "\nChieu dai tai coc tiep theo (m):");distance 2 station
Kcd (* Kcdo Tn) ; distance
LisLkcd (cons (- Kcdo Kcdo) LisLkcd)
LisLkcdo (cons Kcdo LisLkcdo)
LisLkcd1 (cons Kcd LisLkcd1))
)
)
(progn
;------------------------------------(princ lis)
(onap)
(setq Pta (getpoint "\nChon diem bat dau ve :")
Pta1 (polar pta 0 60) 
Pta2 (polar pta 0 5) 
Pta3 (polar pta 0 60)
Pta4 (polar pta 0 14.75)
Pta5 (polar pta2 a 95)
Pta6 (polar pta4 a 90)
Ptss1 (polar pta 0 57) 
Ptss (polar Ptss1 a 70) 
Ptsg1 (polar pta 0 60)
Ptsg (polar Ptsg1 a 15)
Ess (getreal "\nCao do so sanh :")
Esn (getint "\nSo moc so sanh :")
Es (rtos Ess 2 2)
VL (getint "\nVat lieu ong :")
D (getreal "\nDuong kinh ong :")
Ho (getreal "\nDo sau chon ong ban dau (m):")
kcong (getreal "\nThe hien MAT CAT DOC ONG :")    ;;;;;;duyvietthem;;;;;;;;;;
i 0
LisCSS '("[sTAKE NO.]" "TEÂN COÏC"
"[ANGLE OF DIRECTION]" "GOÙC QUAY MAËT BAÈNG (0%%176)"
"[ACCU. DISTANCE]" "KHOAÛNG CAÙCH COÄNG DOÀN (m)"
"[DIA - GRADIENT.]" "ÑÖÔØNG KÍNH - ÑOÄ DOÁC (%)"
"[DEPTH .]" "ÑOÄ SAÂU CHOÂN OÁNG (m)"
"[PIPE BOTTOM ELEV.]" "CAO ÑOÄ ÑAÙY OÁNG (m)"
"[GROUND ELEV.]" "CAO ÑOÄ MAËT ÑAÁT (m)"
"[DATUM.]" "COÁT SO SAÙNH")
LisTs '("Cot mat dat coc so" "Do doc doan ong giua hai coc"
"Khoang cach giua hai coc"
"Goc quay mat bang coc so")
LisVL '("STK" "uPVC" "THEÙP" "GANG" "BEÂ TOÂNG" "BTCT" "SAØNH" "HDPE")
Lismd nil Lisdo nil LisHo nil Lisi nil Lisio nil LisLkc nil LisLkco nil
LisTcoc nil LisGoc nil LisDeltaMD nil LisdeltaDO nil
)
(ofnap)
;--------
;-------------------------------------------
;data stake no.
(Princ "\n**Neu khong muon ky tu dau cua Coc la mot Chu Cai (VD:A, B...) ma la mot so thuc 
(VD:1, 2...) thì nhan phim Space bar de tiep tuc**")
(setq k (getint "\nSo coc:")
CTc (getstring "\nKy tu dau cua coc:")
Tcoc (getint "\nTen coc dau tien hoac tiep theo:")
Ki Tcoc
i1 Tcoc
i2 Tcoc
i3 Tcoc
i4 Tcoc
i5 Tcoc
)
(repeat k
(progn
(setq
LisTcoc (cons Tcoc LisTcoc)
Tcoc (1+ Tcoc)
)
);endprogn
);endrepeat;(princ Lis)
(setq LisTcoc (reverse LisTcoc))
;-------------------------------------------
;data ground level.
(repeat k
(progn
(print (nth 0 LisTs)) (prin1 CTc) (prin1 Ki)
(setq
Cmdo (getreal "\nCao do mat dat (m) :")
Cmd Cmdo
Lismd (cons Cmd Lismd)
Ki (1+ Ki)
)
);endprogn
);endrepeat;(princ Lis)
(setq Lismd (reverse Lismd))
;-------------------------------------------
;data gradient.
(repeat (- k 1)
(progn
(print (nth 1 LisTs)) (prin1 CTc) (prin1 i1) (prin1 CTc) (prin1 (+ i1 1))
(setq
io (getreal "\nDo doc dat ong  (%) :")
io1 (/ io 1) Lisi (cons io1 Lisi)
io2 (* io 1000) Lisio (cons io2 Lisio)
i1 (1+ i1)
)
);endprogn
);endrepeat;(princ Lis)
(setq Lisi (reverse Lisi) Lisio (reverse Lisio))
;-------------------------------------------
;data distance.
(repeat (- k 1)
(progn
(print (nth 2 LisTs)) (prin1 CTc) (prin1 i2) (prin1 CTc) (prin1 (+ i2 1))
(setq
Kco (getreal "\nKhoang cach giua hai coc (m):");distance 2 station
Kc (* Kco Tn) ; distance
LisLkco (cons Kco LisLkco)
LisLkc (cons Kc LisLkc)
i2 (1+ i2)
)
);endprogn
);endrepeat;(princ Lis)
(setq LisLkc (reverse LisLkc) LisLkco (reverse LisLkco))
;----------------------------------------
;mapcar Kcdo Kcd1
(setq n1 0 Kcd1 0)
;Kcdo 0 LisLkcdo (cons Kcdo LisLkcdo)
;Kcd 0 LisLkcd1 (cons Kcd LisLkcd1))
(mapcar
'(lambda (Kco Kc)
(setq
Kcdo (+ Kcdo (nth n1 LisLkco)) LisLkcdo (cons Kcdo LisLkcdo)
Kcd (+ Kcd (nth n1 LisLkc)) LisLkcd1 (cons Kcd LisLkcd1)
Kcd1 (+ Kcd1 (nth n1 LisLkc)) LisLkcd (cons Kcd1 LisLkcd)
n1 (1+ n1)
)
);endlambda
LisLkco LisLkc
);endmapcar
(setq LisLkcdo (reverse LisLkcdo) LisLkcd1 (reverse LisLkcd1) LisLkcd (reverse LisLkcd))
;----------------------------------------
;mapcar deltaMD deltaDO
(setq n2 1
n3 0
LisHo (cons Ho LisHo)
Cdo (- (nth 0 Lismd) Ho) Lisdo (cons Cdo Lisdo)
DeltaMD (* (- (nth 0 Lismd) Ess) Td) DeltaDO (* (- (nth 0 Lismd) Ess Ho) Td)
LisDeltaMD (cons DeltaMD LisDeltaMD) LisDeltaDo (cons DeltaDo LisDeltaDo))
(mapcar
'(lambda (Cmd io1 Kco)
(setq
Cdo (- Cdo (* Kco (nth n3 Lisi))) Lisdo (cons Cdo Lisdo)
Ho (- (nth n2 Lismd) Cdo) LisHo (cons Ho LisHo)
DeltaMD (* (- (nth n2 Lismd) Ess) Td) LisDeltaMD (cons DeltaMD LisDeltaMD)
DeltaDO (- deltaDO (* (nth n3 LisLkco) (nth n3 Lisi) Td))
LisDeltaDO (cons DeltaDO LisDeltaDO)
n2 (1+ n2)
n3 (1+ n3)
)
);endlambda
Lismd Lisi LisLkco
);endmapcar
(setq LisDeltaMD (reverse LisDeltaMD) LisDeltaDO (reverse LisDeltaDO)
LisHo (reverse LisHo) Lisdo (reverse Lisdo))
;-------------------------------------------
;data cornor.
(repeat k
(progn
(print (nth 3 LisTs)) (prin1 CTc) (prin1 i3)
(setq
Gmb (getreal "\nGoc quay mat bang :")
LisGoc (cons Gmb LisGoc)
i3 (1+ i3)
)
);endprogn
);endrepeat;(princ Lis)
(setq LisGoc (reverse LisGoc))
;-------------------------------------------
(Repeat 8
(setq Ptb (polar Pta a (* i 10))
Ptc (polar Pta1 a (* i 10))
ptd (polar pta2 a (+ (* i 10) 3.5))
)
(command
"layer" "s" "manh" ""
"line" Ptb Ptc ""
"layer" "s" "chuv" ""
"style" "chuv" "VNI-Helve-condense" "" "1" "" "" ""
"text" "j" "ml" ptd 2.5 0.0 (nth (+ (* i 2) 1) LisCSS)
)
(setq i (+ i 1))
);endrepeat
(command
"layer" "s" "manh" ""
"line" Pta Ptb ""
"layer" "s" "chuv" ""
"style" "chuv" "VNI-Helve-condense" "" "1" "" "" "" ""
"text" "j" "ml" Pta5 2.5 0.0 (strcat "TYÛ LEÄ NGANG: 1/" (rtos Tln))
"text" "j" "ml" Pta6 2.5 0.0 (strcat "TYÛ LEÄ ÑÖÙNG: 1/" (rtos Tld))
;------------------------
(COCSS)
;draw one
(setq LisPTcoc nil PTcoc (polar Pta1 a 5) LisPTcoc (cons PTcoc LisPTcoc)
LisPGmb nil PGmb (polar Ptss1 a 15) LisPGmb (cons PGmb LisPGmb)
LisPGmb nil PGmb (polar Ptsg1 a 17) LisPGmb (cons PGmb LisPGmb)
LisPGmb1 nil PGmb1 (polar Pta1 a 13) LisPGmb1 (cons PGmb1 LisPGmb1)
LisPKc nil PKc (polar Pta1 a 25) LisPKc (cons PKc LisPKc)
LisPdd nil Pdd (polar Pta1 a 30) LisPdd (cons Pdd LisPdd)
Pddi (polar pta1 a 30)
LisPho nil Pho (polar Pta1 a 45) LisPho (cons Pho LisPho)
LisPmd nil Pmd (polar Pta1 a 65) LisPmd (cons Pmd LisPmd)
LisPdo nil Pdo (polar Pta1 a 55) LisPdo (cons Pdo LisPdo)
LisPss nil Pss (polar Pta1 a 70) LisPss (cons Pss LisPss)
LisPsg nil Psg (polar Pta1 a 15) LisPsg (cons Psg LisPsg)
LisPssd nil LisPssd1 nil LisPssdo nil LisPssdo1 nil
V 0
)
(mapcar
'(lambda (Kc)
(setq
PTcoc (polar PTcoc 0 (nth V LisLkc)) LisPTcoc (cons PTcoc LisPTcoc)
PGmb (polar PGmb 0 (nth V LisLkc)) LisPGmb (cons PGmb LisPGmb)
PGmb1 (polar PGmb1 0 (nth V LisLkc)) LisPGmb1 (cons PGmb1 LisPGmb1)
PKc (polar PKc 0 (nth V LisLkc)) LisPKc (cons PKc LisPKc)
Pdd (polar Pdd 0 (nth V LisLkc)) LisPdd (cons Pdd LisPdd)
Pho (polar Pho 0 (nth V LisLkc)) LisPho (cons Pho LisPho)
Pmd (polar Pmd 0 (nth V LisLkc)) LisPmd (cons Pmd LisPmd)
Pdo (polar Pdo 0 (nth V LisLkc)) LisPdo (cons Pdo LisPdo)
Pss (polar Pss 0 (nth V LisLkc)) LisPss (cons Pss LisPss)
V (1+ V)
)
)
LisLkc
)
(setq LisPTcoc (reverse LisPTcoc)
LisPGmb (reverse LisPGmb) LisPGmb1 (reverse LisPGmb1)
LisPKc (reverse LisPKc)
LisPdd (reverse LisPdd)
LisPHo (reverse LisPHo) LisPmd (reverse LisPmd) LisPdo (reverse LisPdo)
LisPss (reverse LisPss)
V1 0)
;-----------
(mapcar
'(lambda (PTcoc PGmb PGmb1 PKc Pho Pmd Pdo Pss
Tcoc Gmb Kcdo Ho Cmd Cdo deltaMD deltaDO)
(setq
;parameter draw rotational corner
PGmb11 (polar PGmb1 0 -3.5) PGmb14 (polar PGmb1 0 3.5)
PGmb12 (polar PGmb1 a 2) PGmb122 (polar PGmb12 0 -3.5) PGmb13 (polar PGmb12 0 3.5);90
PGmb133 (polar PGmb13 a 2.5) PGmb144 (polar PGmb13 a 4.5)
PGmb2 (polar PGmb1 a 2) PGmb21 (polar PGmb2 0 -3.5);PGmb22 (polar PGmb2 a45 4.5) PGmb23 (polar PGmb2 a45 6.5);PGmb24 (polar PGmb2 0 3.5) PGmb25 (polar PGmb2 0 6);=180
PGmb26 (polar PGmb2 b45 4) PGmb27 (polar PGmb2 b45 6.5);>180
PGmb3 (polar PGmb1 a 2) PGmb31 (polar PGmb3 0 -3.5) PGmb32 (polar PGmb3 0 3.5);270
PGmb33 (polar PGmb32 c 2.5) PGmb34 (polar PGmb32 c 4.5)
;end draw rotational corner
;parameter comparation
Pssd (polar Pss a (nth V1 LisDeltaMD)) LisPssd (cons Pssd LisPssd)
Pssdo (polar Pss a (nth V1 LisDeltaDO)) LisPssdo (cons Pssdo LisPssdo))
(command
"layer" "s" "chuv" ""
"style" "chuv" "VNI-Helve-condense" "" "1" "" "" ""
"text" "j" "mc" PTcoc 4.5 0.0 (strcat CTc (itoa (nth V1 LisTcoc)))
"text" "j" "mc" PKc 2.2 90.0 (rtos (nth V1 LisLkcdo) 2 2)
"text" "j" "mc" Pho 2.2 90.0 (rtos (nth V1 LisHo) 2 2)
"text" "j" "mc" Pmd 2.2 90.0 (rtos (nth V1 Lismd) 2 2)
"text" "j" "mc" Pdo 2.2 90.0 (rtos (nth V1 Lisdo) 2 2)
"layer" "s" "chua" ""
"style" "chua" "romans.shx" "" "0.7" "" "" "" ""
"text" "j" "mc" PGmb 2.0 0.0 (strcat (rtos (nth V1 LisGoc) 2 0) "%%d")
"layer" "s" "bao" ""
"circle" PTcoc "5"
"layer" "s" "giong" ""
"line" Pss Pssd ""
"layer" "s" "manh" "")
(cond
((= Gmb 90) (command "pline" PGmb122 PGmb13 PGmb133 "w" "1.0" "0" PGmb144 ""))
((((= Gmb 180) (command "pline" PGmb21 PGmb24 "w" "1.0" "0" PGmb25 ""))
((or (and (> Gmb 180) ( Gmb 270) ((command "pline" PGmb21 PGmb2 PGmb26 "w" "1.0" "0" PGmb27 ""))
((= Gmb 270) (command "pline" PGmb31 PGmb32 PGmb33 "w" "1.0" "0" PGmb34 ""))
)
(setq V1 (1+ V1))
);endlambda
LisPTcoc LisPGmb LisPGmb1 LisPKc LisPho LisPmd LisPdo LisPss
LisTcoc LisGoc LisLkcdo LisHo Lismd Lisdo LisdeltaMD LisdeltaDO
);endmapcar (princ lis)
;-----
;draw two
(setq lisdd (cdr LisLkcd)
Pdd1 (polar Pddi a 3.5) Pdd2 (polar Pddi a 6.5) Pdd3 (polar Pddi a 10)
Pdd4 (polar Pddi a 5)
PKcd (polar Pta1 a 25)
)
(command "layer" "s" "manh" "" "line" pddi pdd3 "")
(setq V4 0)
(repeat (length Lisdd)
(setq
;parameter gradient
Pddi1 (polar Pddi 0 (- (nth V4 Lisdd) (nth V4 LisLkc)))
Pddi2 (polar Pdd3 0 (- (nth V4 Lisdd) (nth V4 LisLkc)))
Pddi3 (polar Pdd4 0 (- (nth V4 Lisdd) (nth V4 LisLkc)))
Pdd11 (polar Pdd1 0 (- (nth V4 Lisdd) (- (nth V4 LisLkc) 10)))
Pdd12 (polar Pdd1 0 (- (nth V4 Lisdd) 10))
Pdd21 (polar Pdd2 0 (- (nth V4 Lisdd) (- (nth V4 LisLkc) 10)))
Pdd22 (polar Pdd2 0 (- (nth V4 Lisdd) 10))
Pdd31 (polar Pdd3 0 (nth V4 Lisdd))
Pdd32 (polar Pddi 0 (nth V4 Lisdd))
Pdd41 (polar Pdd4 0 (nth V4 Lisdd))
PKcd1 (polar PKcd 0 (- (nth V4 Lisdd) (/ (nth V4 LisLkc) 2)))
)
(cond
((> (nth V4 Lisi) 0)
(command
"layer" "s" "manh" ""
"pline" Pddi2 Pdd32 Pdd31 ""
"layer" "s" "chuv" ""
"style" "chuv" "VNI-Helve-condense" "" "1" "" "" ""
"text" "j" "mc" PKcd1 2.5 0.0 (strcat (rtos (nth V4 LisLkco) 2 2) "m" )
"text" "j" "mc" Pdd11 2.5 0.0 (strcat (nth VL LisVL) " - " "D" (rtos D 2 0))
"text" "j" "mc" Pdd22 2.5 0.0 (strcat "i=" (rtos (nth V4 Lisi) 2 4))))
((= (nth V4 Lisi) 0)
(command
"layer" "s" "manh" ""
"pline" Pddi3 Pdd41 Pdd31 Pdd32 ""
"layer" "s" "chuv" ""
"style" "chuv" "VNI-Helve-condense" "" "1" "" "" ""
"text" "j" "mc" PKcd1 2.5 0.0 (strcat (rtos (nth V4 LisLkco) 2 2) "m" )
"text" "j" "mc" Pdd11 2.5 0.0 (strcat (nth VL LisVL) " - " "D" (rtos D 2 0))
"text" "j" "mc" Pdd22 2.5 0.0 (strcat "i=" (rtos (nth V4 Lisi) 2 4))))
(((command
"layer" "s" "manh" ""
"pline" Pddi1 Pdd31 Pdd32 ""
"layer" "s" "chuv" ""
"style" "chuv" "VNI-Helve-condense" "" "1" "" "" ""
"text" "j" "mc" PKcd1 2.5 0.0 (strcat (rtos (nth V4 LisLkco) 2 2) "m" )
"text" "j" "mc" Pdd12 2.5 0.0 (strcat (nth VL LisVL) " - " "D" (rtos D 2 0))
"text" "j" "mc" Pdd21 2.5 0.0 (strcat "i=" (rtos (nth V4 Lisi) 2 4))))
)
(setq V4 (1+ V4))
)
;--draws ground and pipe bottom level line
(setq
LisPssd (reverse LisPssd)
LisPssd1 (append (cdr LisPssd) (car LisPssd))
LisPssdo (reverse LisPssdo)
LisPssdo1 (append (cdr LisPssdo) (car LisPssdo))
V2 0 V3 0
)
;;;;;;doan nay di chuyen len cho chay truoc;;;;;;;;;;;;;;;;;
(repeat 8
(setq Ptdao (polar Pta1 a 70)
Ptda1 (polar Ptdao c (* V3 10))
Ptda2 (polar Pss c (* V3 10)))
(command "layer" "s" "manh" "" "line" Ptda1 Ptda2 "")
(setq V3 (1+ V3))
);repeat;;;;;;;;;;;;;ket thuc doan di chuyen len cho chay truoc;;;;;;;;;;;;;;;;;;;;;
(repeat (- (length LisPssd) 1)
    (setq gocxeoa(angle (nth V2 LisPssdo)  (nth V2 LisPssdo1)));;;;;;;;;duy viet them ;;;;;;;;;;;;;;;
    (setq a (polar (nth V2 LisPssdo) (+ (/ pi 2) gocxeoa) kcong));;;;;;;;;duy viet them ;;;;;;;;;;;;;;;
    (setq b (polar (nth V2 LisPssdo1) (+ (/ pi 2) gocxeoa) kcong));;;;;;;;;duy viet them ;;;;;;;;;;;;;;;
(command
"layer" "s" "manh" ""
"line" (nth V2 LisPssd) (nth V2 LisPssd1) ""
"layer" "s" "ong" ""
"line" (nth V2 LisPssdo) (nth V2 LisPssdo1) ""
"line" a b "";;;;;;;;;duy viet them ;;;;;;;;;;;;;;;
)
(chenkyhieudat)   ;;;;;;;;;duy viet them ;;;;;;;;;;;;;;;
(setq V2 (1+ V2))
)

;--end draws ground and pipe bottom level line
(onap2)
);progn
);end function STD
;--------------------
;;;;;;;;;;;;;;duy viet them phan chen ky hieu dat;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(defun chenkyhieudat ()
    (setq  daiab(distance (nth V2 LisPssd)  (nth V2 LisPssd1)))  
    (setq gocxeo(angle (nth V2 LisPssd)  (nth V2 LisPssd1)))
    (setq solan (- (fix (/ daiab 30)) 1))
    (setq c (polar (nth V2 LisPssd) gocxeo 30))
(command "layer" "s" "dat" "")
(command ".INSERT" "ky hieu dat 5" (nth V2 LisPssd) 1 1 (nth V2 LisPssd1))
(repeat solan
(command "copy" "last" "" (nth V2 LisPssd) c "")
)
);;;;;;;;;;;;;;ket thuc phan duy viet them;;;;;;;;;;;;;;;;;;;;;;

Chào bạn HoangSon 614,

Thực tình mình cũng chưa hiểu ý bạn muốn hỏi.

Nếu là bạn chỉ muốn thay đổi cách nhập các biến Tld và Tln trong lisp bạn post . còn các phần khác giữ nguyên thì bạn hãy chú ý các điều sau đây:

1/- Đoạn code:

(setq

Tln (getint "\nTy le ngang 1/x (100, 200, 500, 1000); x="))

Tld (getint "\nTy le dung 1/y (100, 200); y="))

Tn (/ 1000.0 Tln)

Td (/ 1000.0 Tld)

)

sử dụng hàm (getint ......) nó yêu cầu bạn nhập một dữ liệu dạng số nguyên và trả về giá trị của các biến tld và tln là các số nguyên. Sau đó lisp dùng giá trị này để tính toán các giá trị của các biến tn và td.

2/- Đoạn bạn đã viết:

"text" "j" "ml" Pta5 2.5 0.0 ((strcat "TYÛ LEÄ NGANG: 1/" (rtos Tln))

"text" "j" "ml" Pta6 2.5 0.0 (strcat "TYÛ LEÄ ÑÖÙNG: 1/" (rtos Tld))

thực ra chưa phải là code lisp vì tất cả các hàm lisp đều phải bắt đầu từ dấu mở ngoặc đơn "(" bạn ạ và thừa một dấu ngoặc mở ở hàm strcat như bác Giabach đã nói.

Nếu bạn sửa thành:

(command "text" "j" "ml" Pta5 2.5 0.0 (strcat "TYÛ LEÄ NGANG: 1/" (rtos Tln)))

Thì đây là một đoạn lisp dùng để viết một đoạn text lên bản vẽ của bạn với điều kiện biến tln là một số đã biết rồi trả về giá trị nil chứ chả có biến tn ở đâu cả.

Nếu bạn viết:

(setq tn (command "text" "j" "ml" Pta5 2.5 0.0 (strcat "TYÛ LEÄ NGANG: 1/" (rtos Tln))))

Thì đoạn lisp này sẽ viết một text lên bản vẽ của bạn với điều kiện biến tln là một giá trị số đã biết và trả về giá trị của biến tn là nil vì hàm command chỉ thực hiện một lệnh trong cad rồi trả về nil chứ không trả về một giá trị của biến.

Nếu bạn viết:

(setq tn (Strcat "TY LE NGANG: 1/" (rtos tln)))

thì đoạn lisp này sẽ trả về giá trị của biến tn là một chuỗi chứ không phải một số bạn ạ và như vậy vẫn phải xác định biến tln là một giá trị số trước đó cơ.

 

Tất cả những đoạn lisp trên đều không thể thay thế đoạn lisp cũ vì chương trình của bạn vẫn còn sử dụng các biến tn, td, tln, tld cho các mục đích tính toán ở các phần khác nữa bạn ạ.

 

3/- Nếu bạn không quan tâm tới các biền tn, td và bạn không sử dụng các biến tln, tld vào các phần sau của chương trình mà muốn gán biến tld và tln ở dạng chuỗi thì bạn có thể dùng như sau:

(setq tln (strcat "TY LE NGANG: 1/" (getstring "Nhap gia tri ty le")))

 

Bạn hãy đọc kỹ bài trả lời của mình và chọn lấy cái bạn cần nha.

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

  • Vote tăng 1

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
Thiep xin hỏi tiếp: 1 cung ellipse, là 1 đối tượng ELLIPSE hở. Làm sao tạo được 1 cung ellipse này khi biết các thông số: góc cung đầu; góc cung cuối, tâm ellipse, bán kính trục lớn ( R ), tỷ số r/R.

Xin các anh em 1 đoạn mã lisp để tạo cung ellipse này.

Chào thiep

Sorry, chuyển qua bên này nha.

Tạo cung ellipse bằng cách gián tiếp : truớc tiên tạo 1 ellipse kín, sau đó cắt với các thông số góc đã cho.

Bạn nào biết cách tạo cung ellipse trực tiếp vui lòng bổ sung.

(defun c:test(/ cen goc1 goc2 r ratio)
 (and
   (setq cen (getpoint "Tam :") )
;    (setq goc1 (getangle "Goc dau :") )
;    (setq goc2 (getangle "Goc cuoi :"))
;    (setq R (getdist "Ban kinh truc lon :"))
;    (setq ratio (getpoint "Ti so Truc nho / Truc lon :"))
   (setq goc1 (/ pi 6) goc2 (/ (* 7 pi) 4) R 1000 ratio 0.5)
   (entmakex ;tao ELLIPSE
     (list '(0 . "ELLIPSE") '(100 . "AcDbEntity") '(100 . "AcDbEllipse")
    (cons 10 cen)     (cons 11 (list R 0 0))  (cons 40 ratio))) 
   (ellipse2arc (entlast) goc1 goc2)
   )
 (princ)
 )
; ham cat ELLIPSE theo cac goc
(defun ellipse2arc (ell ang1 ang2 / elst par1 par2)
 (setq	elst (entget ell)
par1 (atan (sin ang1) (* (cos ang1) (cdr (assoc 40 elst))))
par2 (atan (sin ang2) (* (cos ang2) (cdr (assoc 40 elst))))  )
 (entmake (subst (cons 41 par1)
	  (assoc 41 elst)
	  (subst (cons 42 par2) (assoc 42 elst) elst) ) )  
 (entdel ell)
)

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

Em đang gặp một vấn đề sau.Em đã có 1 đưòng cong bây giờ muốn duỗi nó ra thành đường thẳng nhưng ko đo đưọc chiều dài.Các bác có cái lisp nào đo chiều dài đường cong không giúp em với.Cảm ơn nhiều :bigsmile:

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

Tạo một tài khoản hoặc đăng nhập để nhận xét

Bạn cần phải là một thành viên để lại một bình luận

Tạo tài khoản

Đăng ký một tài khoản mới trong cộng đồng của chúng tôi. Điều đó dễ mà.

Đăng ký tài khoản mới

Đăng nhập

Bạn có sẵn sàng để tạo một tài khoản ? Đăng nhập tại đây.

Đăng nhập ngay

×