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ị

Vẫn không được bác à, khắc phục được 90% rùi

Tức là nhiều chữ trùng nhau trong 1 dòng thì nó đếm là 1 đơn vị

(khá hơn 1 chút so với khi chưa thay IF)

nhưng 100% thì phải là

nhiều chữ trùng nhau trong 1 dòng thì đếm là 0

(Vì chỉ đếm những text giống y sỳ text được chọn thôi)

Em đang dùng cad 2005 - hay nó bị lỗi gì hả bác?

tức là phải y chang?

 

ví dụ chuỗi nhập vào là 'thịt chó Anh Tú' thì chỉ có chuỗi nào giống y chang mới được tính, còn các chuỗi 'thịt chó Anh Tú xịn', 'thịt chó Anh Tú thật', 'thịt chó Anh Tú gốc', 'quán thịt chó Anh Tú'... sẽ không được tính?

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
Đúng thế đó bác à!

 

 

bạn thay dòng lệnh

(if (wcmatch gt (strcat "*" sw "*"))

bằng

(if (= gt sw)

là được.

Và lisp mới sẽ là:

(defun c:wcnt (/ sw ss sotu pp)
(defun sudung (ham ss / sodt index entdt soapp)
(setq sodt (cond
(ss (sslength ss))
(t 0)
)
soapp 0
index 0
)
(repeat sodt
(setq entdt (ssname ss index)
index (1+ index)
)
(if (ham entdt)
(setq soapp (1+ soapp))
)
)
soapp
)
(defun dem (ent / tt gt)
(setq tt (entget ent)
gt (cdr (assoc 1 tt))
)
(if (= gt sw)
(setq
sotu (1+ sotu)
;;; gt (vl-string-subst "" sw gt)
)
)
)
(princ "\nWord Count © CADViet.com 2007")
(while (or (not sw)
(= sw "")
)
(setq sw (cdr (assoc 1 (entget (car (entsel "\nPick vao doi tuong text de lay gia tri: "))))))
)
(setq
ss (ssget '((0 . "TEXT")))
sotu 0
)

(sudung dem ss)
(setq pp (strcat "\nSo tu "
sw
" xuat hien trong cac doi tuong text vua chon la: "
(itoa sotu)
)
)
(princ pp)

(entmake
(list
(cons 0 "TEXT")
(cons 10
(setq tmp (getpoint "\nVao diem chen text ket qua: "))
)
(cons 40 (getdist tmp "\nVao chieu cao chu: "))
(cons 1 pp)
)
)
(princ)
)
(vl-load-com)
(princ "\nWord Count © 2007, CADViet.com")
(princ "\nSu dung lenh WCNT de bat dau!")
(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
[/b]11 AM']Anh Hoanh ơi. Em đang rất cần lisp có nội dung như sau

khi tải lisp yêu cầu nhập kí tự(string) cần tìm sau đó nhập

điểm chèn trên màn hình, hiện ra kết quả là số lượng ký tự như thế đã tìm thấy là bao nhiêu

Em có biết đến lệnh find nhưng lệnh này nó tìm (find) và thay thế (replace) chứ không

đếm được số lượng như trên.

Anh giúp em với nha. Em cám ơn nhiều

 

Có một mẹo nhỏ đơn giản để có thể đếm được các ký tự nhập vào đó là khi bạn search bằng find xong, ấn ctrl+c ---> sẽ xuất hiện ngay số lượng các đối tượng được chọn bằng find :s_dead:

 

@Nguyen Hoang bạn là giúp mình cái này với

Mình đã phải ngồi căn lại khoảng cách giữa các dòng dim cho nó bằng nhau và cảm thấy hơi vất.

 

Mình muốn các bạn giúp cho 1 lisp có thể tự động căn chỉnh khoảng cách các dòng dim bằng nhau.

ví dụ:- có 3 hàng dim (dim mặt bằng, có khoảng cách không bằng nhau ). Khi dùng lisp sẽ tự động căn chỉnh khoảng khoảng cách giũa các hàng dim bằng 1 giá trị nhập vào từ bàn phím.

 

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
Mình đã phải ngồi căn lại khoảng cách giữa các dòng dim cho nó bằng nhau và cảm thấy hơi vất.

 

Mình muốn các bạn giúp cho 1 lisp có thể tự động căn chỉnh khoảng cách các dòng dim bằng nhau.

ví dụ:- có 3 hàng dim (dim mặt bằng, có khoảng cách không bằng nhau ). Khi dùng lisp sẽ tự động căn chỉnh khoảng khoảng cách giũa các hàng dim bằng 1 giá trị nhập vào từ bàn phím.

Bạn hãy mô tả cách mà bạn muốn lisp làm. Tôi đã rõ về mục đích, nhưng chưa rõ lisp sẽ phải làm gì.

 

Chọn các đối tượng dim như thế nào? Bạn lưu ý: có một công việc rất dễ với con người là nhìn ra các dim thẳng hàng thành 1 nhóm, nhưng lại rất khó với máy tính.

rồi căn hai hàng này bằng một khoảng cách? Khoảng cách này bằng bao nhiều? vì sẽ gặp phải trường hợp các giá trị dim có độ lớn khác nhau (do vẽ không chuẩ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

untitled11_3.jpg

 

Giả sử mình dim một hình như H1, lúc này khoảng cách giữa 3 hàng dim là không bằng nhau (mình dim khoảng cách vào chỉ để nhìn cho rõ thôi, còn thực tế thì kích thước đó sẽ thay đôi :s_dead:) khi dùng lisp, nhập vào giá trị bằng 5 (chẳng hạn) thì 3 hàng dim đó sẽ được cách nhau bằng 5 (mặc định cái hàng nào làm chuẩn để các hàng dim khác cách đều nhau là tùy người viết lisp :D). H2 là kết quả khi thực hiện lisp.

 

Không biết mình mô tả như thế đã rõ chưa nhỉ? :ph34r:

 

Cảm ơn 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
Không biết mình mô tả như thế đã rõ chưa nhỉ? :s_dead:

 

Cảm ơn bạn đã quan tâm!

Vẫn như trước khi bạn post bài này!

 

Tôi đã rõ về mục đích, nhưng chưa rõ lisp sẽ phải làm gì.

 

Chọn các đối tượng dim như thế nào? Bạn lưu ý: có một công việc rất dễ với con người là nhìn ra các dim thẳng hàng thành 1 nhóm, nhưng lại rất khó với máy tính.

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 thử nghĩ 1 cách này xem có được không nhé!

 

*chạy lệnh lisp:

 

----> lisp bắt chọn hàng dim thứ 1 (mình chọn hàng dim 3,5,3,5,3,5...)

----> lisp bắt chọn hàng dim thứ 2 (mình chọn hàng dim 10)

----> lisp bắt chọn hàng dim thứ 3 (mình chọn hàng dim 30)

----> lisp bắt nhập khoảng cách các dim (mình nhập vào 5) ----> kết thúc lệnh

 

Lisp sẽ thực hiện công việc move hàng dim3,5,3,5,3,5... cách hàng dim10 1 khoảng la` 5

và .... move hàng dim30 cách hàng dim10 1 khoảng la` 5

 

Nhìn thì hơi dài dòng nhưng thực hiện lệnh chắc cũng không lau lắm :s_dead:

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 thử nghĩ 1 cách này xem có được không nhé!

 

*chạy lệnh lisp:

 

----> lisp bắt chọn hàng dim thứ 1 (mình chọn hàng dim 3,5,3,5,3,5...)

----> lisp bắt chọn hàng dim thứ 2 (mình chọn hàng dim 10)

----> lisp bắt chọn hàng dim thứ 3 (mình chọn hàng dim 30)

----> lisp bắt nhập khoảng cách các dim (mình nhập vào 5) ----> kết thúc lệnh

 

Lisp sẽ thực hiện công việc move hàng dim3,5,3,5,3,5... cách hàng dim10 1 khoảng la` 5

và .... move hàng dim30 cách hàng dim10 1 khoảng la` 5

 

Nhìn thì hơi dài dòng nhưng thực hiện lệnh chắc cũng không lau lắm :s_dead:

OK

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 em đang cần 1 lisp có nội dung như sau:

trên màn hình có các điểm point ví dụ 4 điểm do em vừa vẽ ra

khi chạy lisp sẽ yêu cầu chọn các điểm point trên màn hình

em chọn 4 điểm trên, sau khi chạy lisp đó nó sẽ

vẽ 1 đường pline từ điểm 1 đến 2 đến 3 đến 4

với cơ sở phân biệt các điểm là :

điểm 1 : điểm point đầu tiên em pick trên màn hình

điểm 2 : điểm point thứ 2 em pick trên màn hình

điểm 3 : điểm point thứ 3 em pick trên màn hình

điểm 4 : điểm point thứ 4 em pick trên màn hình

cám ơn các pác trướ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
các bác ơi em đang cần 1 lisp có nội dung như sau:

trên màn hình có các điểm point ví dụ 4 điểm do em vừa vẽ ra

khi chạy lisp sẽ yêu cầu chọn các điểm point trên màn hình

em chọn 4 điểm trên, sau khi chạy lisp đó nó sẽ

vẽ 1 đường pline từ điểm 1 đến 2 đến 3 đến 4

với cơ sở phân biệt các điểm là :

điểm 1 : điểm point đầu tiên em pick trên màn hình

điểm 2 : điểm point thứ 2 em pick trên màn hình

điểm 3 : điểm point thứ 3 em pick trên màn hình

điểm 4 : điểm point thứ 4 em pick trên màn hình

cám ơn các pác trước!

 

 

tên lệnh là NP.

(defun c:np ( / sel index ent tt tendt p tappoint )
 (princ "\nNoi Point © CADViet.com 2007")
 (setq	sel   (entsel "\nChon diem point dau tien: ")
index 0
 )
 (while sel
   (setq
     ent   (car sel)
     tt    (entget ent)
     tendt (cdr (assoc 0 tt))
   )

   (if	(= tendt "POINT")
     (setq
index	 (1+ index)
p	 (cdr (assoc 10 tt))
tappoint (append tappoint (list p))
     )
     (princ "\nHay pick vao mot doi tuong point")
   )
   (setq
     sel (entsel (strcat "\nChon diem point thu " (itoa index) ": "))
   )
 )
 (luuos)
 (setvar "osmode" 0)
 (command ".pline")
 (foreach p tappoint
   (command p)
 )
 (command "")
 (traos)
)

(defun luuos ()
 (setq
   HOANH_OSMODE   (getvar "OSMODE")
   HOANH_AUTOSNAP (getvar "AUTOSNAP")
 )
)
(defun traos ()
 (if HOANH_OSMODE
   (setvar "OSMODE" HOANH_OSMODE)
 )
 (if HOANH_AUTOSNAP
   (setvar "AUTOSNAP" HOANH_AUTOSNAP)
 )
)
(princ "\nNP - free lisp from www.cadviet.com")
(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

cám ơn bác Hoanh , nhưng bác ơi

ý em hơi khác 1 chút

chọn điểm ở đây không phải là chọn từng điểm

mà chọn tất cả các điểm cùng một lúc

(kiểu chọn cửa sổ cross đó)

bác có thể sửa cho em một chút nữa được không?

cám ơn bác 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
cám ơn bác Hoanh , nhưng bác ơi

ý em hơi khác 1 chút

chọn điểm ở đây không phải là chọn từng điểm

mà chọn tất cả các điểm cùng một lúc

(kiểu chọn cửa sổ cross đó)

bác có thể sửa cho em một chút nữa được không?

cám ơn bác nhiều!

Chọn tất cả cùng 1 lúc thì lấy đâu ra thứ tự các điể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

Em đang cần 1 lisp có nội dung như sau:

trên màn hình có text là ABCD

khi chạy lisp sẽ chọn text và điểm chèn kết quả

trên màn hình sẽ có các dòng kết quả sau:

có 4 kí tự lần lượt là: A, B, C, D trong text trên

với kí tự A ở vị trí 1

với kí tự B ở vị trí 2

với kí tự C ở vị trí 3

với kí tự D ở vị trí 4

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ìm lisp lấy ra được giá trị width(độ rộng) của polyline

như sau: chọn 1 pline có trên màn hình, sau đó nhập điểm chèn kết quả

cho ra giá trị là số của độ rộng đường polyline.

Anh em nào có cho mình nha, 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
Em đang cần 1 lisp có nội dung như sau:

trên màn hình có text là ABCD

khi chạy lisp sẽ chọn text và điểm chèn kết quả

trên màn hình sẽ có các dòng kết quả sau:

có 4 kí tự lần lượt là: A, B, C, D trong text trên

với kí tự A ở vị trí 1

với kí tự B ở vị trí 2

với kí tự C ở vị trí 3

với kí tự D ở vị trí 4

Bạn có thể upload lên 1 file mẫu không?

 

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

 

Tìm lisp lấy ra được giá trị width(độ rộng) của polyline

như sau: chọn 1 pline có trên màn hình, sau đó nhập điểm chèn kết quả

cho ra giá trị là số của độ rộng đường polyline.

Anh em nào có cho mình nha, xin cám ơn!

Lệnh là PW (print width)

(defun c:pw ( / tmp)
 (princ "\nPW (c) CADViet.com")
 (entmake
(list
  (cons 0 "TEXT")
  (cons 1 (rtos (cdr (assoc 40 (entget (car (entsel "\nPick vao Pline: ")))))2 2))
  (cons 10 (setq tmp (getpoint "\nVao diem chen cua chu: ")))
  (cons 40 (getdist tmp "\nVao chieu cao cua chu: "))
)
 )
 (princ)
)
(princ "\nPW - free lisp from www.CADViet.com")
(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

Cám ơn bác hoành, em đang cần 1 lisp khác có nội dung

giống như lisp caltext có trong diễn đàn nhưng ở đây nó

chọn nhiều text 1 lúc chứ không chọn đơn lẻ 1 text.

bác giúp em nha!

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ác hoành, em đang cần 1 lisp khác có nội dung

giống như lisp caltext có trong diễn đàn nhưng ở đây nó

chọn nhiều text 1 lúc chứ không chọn đơn lẻ 1 text.

bác giúp em nha!

Trên diễn đàn có đến mấy lệnh caltext, cái bạn nói là cái nào, bạn có thể paste ra đây đượ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

(defun c:caltext (/ ent tt old gt vt gtmoi)

(if (not c:cal)

(load "geomcal.arx") )

(setq ent (car (entsel "\nHay pick vao doi tuong text: "))

tt (entget ent)

old (assoc 1 tt)

gt (cdr old)

vt (vl-string-position (ascii "=") gt)

gtmoi (substr gt 1 vt)

kq (rtos (c:cal gtmoi))

kq (vl-string-right-trim "0" kq)

kq (vl-string-right-trim "." kq)

gtmoi (strcat gtmoi "=" kq)

tt (subst (cons 1 gtmoi) old tt) )

(entmod tt) (entupd ent)

(princ)

)

 

Là cái này bá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
Là cái này bác à!

 

Tên lênh là MCALTEXT.

(defun c:mcaltext (/ ent tt old gt vt gtmoi)
 (if (not c:cal)
   (load "geomcal.arx")
 )
 (defun calone	(ent)
   (setq
     tt    (entget ent)
     old   (assoc 1 tt)
     gt    (cdr old)
     vt    (vl-string-position (ascii "=") gt)
     gtmoi (substr gt 1 vt)
     kq    (rtos (c:cal gtmoi))
     kq    (vl-string-right-trim "0" kq)
     kq    (vl-string-right-trim "." kq)
     gtmoi (strcat gtmoi "=" kq)
     tt    (subst (cons 1 gtmoi) old tt)
   )
   (entmod tt)
   (entupd ent)
 )
 (setq ss (ssget '((0 . "TEXT"))))
 (sudung calone ss)
 (princ)
)
(defun sudung (ham ss / sodt index entdt soapp)
 (setq	sodt  (cond
	(ss (sslength ss))
	(t 0)
      )
soapp 0
index 0
 )
 (repeat sodt
   (setq entdt	(ssname ss index)
  index	(1+ index)
   )
   (if	(ham entdt)
     (setq soapp (1+ soapp))
   )
 )
 soapp
)

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.

Mình muốn nhờ Hoành viết 1 líp tạo các layer ,các layer này sẽ được khai báo đầy đủ các thuộc tính như đường nét, màu sắc, độ rộng.

Thank trước nhé

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 nhờ Hoành viết 1 líp tạo các layer ,các layer này sẽ được khai báo đầy đủ các thuộc tính như đường nét, màu sắc, độ rộng.

Thank trước nhé

Bạn nêu ví dụ đ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

Này tienlagiay_dxt cái mà ông cần đấy

 

a4 la tên lệnh

Các tên layer tự thay nhé

(Defun c:a4 (/)

(command "cmdecho" 0)

(command "units" "2" "0" "1" "0" "" "")

(Command "-linetype" "l" "center" "acad.lin" "" "")

(Command "-linetype" "l" "hidden" "acad.lin" "" "")

(Command "-layer" "n" "35 - Cat 1 (Tuong..)" "c" "53" "35 - Cat 1 (Tuong..)" "lw" "0.35" "35 - Cat 1 (Tuong..)" "")

(Command "-layer" "n" "25 - Cat 2 (Khuon..)" "c" "164" "25 - Cat 2 (Khuon..)" "lw" "0.25" "25 - Cat 2 (Khuon..)" "")

(Command "-layer" "n" "15 - Thay 1" "c" "93" "15 - Thay 1" "lw" "0.15" "15 - Thay 1" "")

(Command "-layer" "n" "09- Thay 3" "c" "254" "09- Thay 3" "lw" "0.10" "09- Thay 3" "")

(Command "-layer" "n" "05- Thay 2" "c" "25" "05- Thay 2" "lw" "0.05" "05- Thay 2" "")

(Command "-layer" "n" "09 - Tim " "c" "117" "09 - Tim " "l" "center" "09 - Tim " "lw" "0.09" "09 - Tim " "")

(Command "-layer" "n" "05 - Mo 1" "c" "67" "05 - Mo 1" "lw" "0.05" "05 - Mo 1" "")

(Command "-layer" "n" "05 - Mo 2" "c" "8" "05 - Mo 2" "lw" "0.05" "05 - Mo 2" "")

(Command "-layer" "n" "05 - Mo 3" "c" "103" "05 - Mo 3" "lw" "0.05" "05 - Mo 3" "")

(Command "-layer" "n" "05 - Noi that" "c" "16" "05 - Noi that" "lw" "0.05" "05 - Noi that" "")

(Command "-layer" "n" "09 - Kich thuoc" "c" "45" "09 - Kich thuoc" "lw" "0.09" "09 - Kich thuoc" "")

(Command "-layer" "n" "05 - Khuat 1" "c" "22" "05 - Khuat 1" "l" "Dashed2" "05 - Khuat 1" "lw" "0.05" "05 - Khuat 1" "")

(Command "-layer" "n" "09 - Khuat 2" "c" "30" "09 - Khuat 2" "l" "Dashed" "09 - Khuat 2" "lw" "0.09" "09 - Khuat 2" "")

)

  • 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
Khách
Chủ đề này bây giờ đã bị đóng lại để trả lời thêm.

×