Jump to content
InfoFile
Tác giả: Doan Van Ha
Bài viết gốc: 188217
Tên lệnh: nscdpl
nội suy cao độ đường cong


Đây bạn Quoc93!

Filename: 188217_nscdpl.lsp
Tác giả: gia_bach
Bài viết gốc: 98319
Tên lệnh: vevg
Viết lisp theo yêu cầu [phần 2]

LISP Vẽ đường Line vuông góc với đường thẳng đã chọn (Pline, Arc)và giới hạn trong 2 đường thẳng (nếu có).
Hy vọng đúng ý bạn.

Filename: 98319_vevg.lsp
Tác giả: Doan Van Ha
Bài viết gốc: 188253
Tên lệnh: ha
Hỏi về cách vẽ nhanh bằng lisp hoặc bằng cách nào đó?

Lấy dóng lên với các khoảng cách d1,d2... nhưng dóng theo hướng như thế nào? Lisp dưới đây tạm lấy hướng lên trên theo truc Y, nếu không vừa ý thì sửa lại.

Filename: 188253_ha.lsp
Tác giả: amateurday
Bài viết gốc: 187617
Tên lệnh: dtc
Lỗi lisp
Thật độc đáo. Thanks bác
Code đã sửa:

(defun C:dtc()
(setq blockmau (entsel "\nChon Block mau:"))
(setq nhomtenblockmau (assoc 2 (entget (car blockmau))))
(setq Blkname (cdr nhomtenblockmau))
(setq doituong (cdr (last (tblsearch "Block" Blkname))))
(setq doituongcon (entnext doituong))
(setq DXFdoituongcon (entget doituongcon))
(princ "\n")
(setq DXFdoituong (entget doituong))
>>
Thật độc đáo. Thanks bác
Code đã sửa:

(defun C:dtc()
(setq blockmau (entsel "\nChon Block mau:"))
(setq nhomtenblockmau (assoc 2 (entget (car blockmau))))
(setq Blkname (cdr nhomtenblockmau))
(setq doituong (cdr (last (tblsearch "Block" Blkname))))
(setq doituongcon (entnext doituong))
(setq DXFdoituongcon (entget doituongcon))
(princ "\n")
(setq DXFdoituong (entget doituong))
(princ "\n†††††††††††††††††††††††Bang ma DXF cua doi tuong nhu sau:")
(foreach tungphantu DXFdoituong
(princ "\n")
(princ tungphantu)
)
(while (/= doituongcon nil)
(setq DXFdoituongcon (entget doituongcon))
(setq doituongcon (entnext doituongcon))
(princ "\n")
(princ "\n†††††††††††††††††††††††Bang ma DXF cua doi tuong nhu sau:")
(foreach tungphantu DXFdoituongcon
(princ "\n")
(princ tungphantu)
)
)
(princ)
)

<<

Filename: 187617_dtc.lsp
Tác giả: Doan Van Ha
Bài viết gốc: 188300
Tên lệnh: ha
Hỏi về cách vẽ nhanh bằng lisp hoặc bằng cách nào đó?

Đây bạn!

Chú ý: để việc lấy số liệu không bị lỗi bạn cần đưa về file CSV như file mẫu tôi đính kèm dưới đây.
http://www.cadviet.com/upfiles/3/67029_bang_so_lieu1.zip

Filename: 188300_ha.lsp
Tác giả: phamthanhbinh
Bài viết gốc: 188394
Tên lệnh: taluy
rải mái taluy

Hề hề hề,
Không biết thời không có tội tình chi cả. Song nếu không muốn biết mà cái sự biết ấy lại rất cần cho công việc của mình thì nó là tội to đấy. Tội LƯỜI, tội Ỷ LẠI, tội THIẾU TRÁCH NHIỆM, ..... trăm thứ tội cơ đấy.
Mình muốn giúp mà bạn không muốn thì chỉ có trời giúp được bạn thôi.
Đây là cái mình chỉ cần mươi phút để làm nhưng rất không...
>>

Hề hề hề,
Không biết thời không có tội tình chi cả. Song nếu không muốn biết mà cái sự biết ấy lại rất cần cho công việc của mình thì nó là tội to đấy. Tội LƯỜI, tội Ỷ LẠI, tội THIẾU TRÁCH NHIỆM, ..... trăm thứ tội cơ đấy.
Mình muốn giúp mà bạn không muốn thì chỉ có trời giúp được bạn thôi.
Đây là cái mình chỉ cần mươi phút để làm nhưng rất không muốn làm vì nó không có ý nghĩa gì với mình cả. Vì bạn quá cần nên mình nhín chút giận mà làm nhưng hy vọng bạn sẽ có thay đổi trong cách làm việc của bạn để có thể tiến bộ hơn. Chúc bạn chóng thành tài.
Mình sẽ không giải thích gì thêm và cũng sẽ không sửa gì nữa đâu, nếu bạn thấy không dùng được thì cứ cho vào sọt rác cho rảnh nợ nhé.

<<

Filename: 188394_taluy.lsp
Tác giả: gia_bach
Bài viết gốc: 80749
Tên lệnh: ex6
tạo dialog

Bạn cần phải viết hàm đáp ứng với sự kiện "nguời dùng cập nhật giá trị" <==> action_tile vào hộp box Edit_X và Edit_Y:
(action_tile "edit_X" "(setq edx $value)"); lay gia tri X
(action_tile "edit_Y" "(setq edy $value)"); lay gia tri Y

Bạn tham khảo đoạn Lisp sau :

Filename: 80749_ex6.lsp
Tác giả: Doan Van Ha
Bài viết gốc: 188534
Tên lệnh: doctext
Chuyển text từ số thành chữ

Không phải đến nỗi bể não, nhưng bể… nồi cơm! Bởi vì nó còn kèm theo mấy thứ lằng nhằng nữa như: “Mươi”, “Lăm”, “Tư”, “Linh”…
Trên CV đã có lisp chuyển số nguyên dương, nhưng vẫn chưa ổn, mọi người tham khảo xem. Rất tiếc tôi quên tác giả, srr tác giả. Tôi cũng chỉ test vài trường hợp.

Filename: 188534_doctext.lsp
Tác giả: gia_bach
Bài viết gốc: 188551
Tên lệnh: test1 test
Chuyển từ text số thành text chữ tiếng Việt.

Ứng dụng của AutoCAD .NET API thực hiện việc Chuyển từ text số thành text chữ tiếng Việt.

Sử dụng thư viện Chuyển số thành chữ bên caulacbovb.net : LInk

Cách sử dụng :
1. giải nén và copy file "Number2String.dll" vào hệ thống(đĩa cứng, USB, ...).
2. Khởi động AutoCAD, open file Cad cần chuyển .
3. Tại dấu nhắc (Command ) của CAD gõ lệnh NETLOAD và chỉ đến...
>>
Ứng dụng của AutoCAD .NET API thực hiện việc Chuyển từ text số thành text chữ tiếng Việt.

Sử dụng thư viện Chuyển số thành chữ bên caulacbovb.net : LInk

Cách sử dụng :
1. giải nén và copy file "Number2String.dll" vào hệ thống(đĩa cứng, USB, ...).
2. Khởi động AutoCAD, open file Cad cần chuyển .
3. Tại dấu nhắc (Command ) của CAD gõ lệnh NETLOAD và chỉ đến vị trí file "Number2String.dll" vừa copy ở buớc 1, chọn OPEN để hoàn thành lệnh NETLOAD .
4. gõ lệnh n2s để bắt đầu ...
(Nếu bạn đã quen với AutoLisp, các buớc 1-2-4 tuơng tự như cách load 1 ứng dụng AutoLisp, chỉ thay lệnh APPLOAD bằng lệnh NETLOAD ở buớc 3.)

Ngoài ra "Number2String.dll" còn cùng cấp hàm LISP Number2String để ứng dụng trong Lập trình LISP.
Cách sử dụng :
1. Cú pháp : (Number2String str)
- trong đó str là kiểu chuỗi (string)
Chú ý : kí hiệu thập phân chỉ chấp nhận hoăc là dấu phấy "," hoặc dấu chấm "." (không chấp nhận vừa dấu phẩy vừa dấu chấm, VD: 123.456,8 )
- giá trị trả về là lisp chứa kết quả tiếng Việt (bảng mã Unicode) hoặc NIL

2.VD :
- (car(Number2String "13964.8")) -> Mười ba nghìn chín trăm sáu mươi bốn phảy tám
- (car(Number2String "237,5")) -> Hai trăm ba mươi bảy phảy năm
- (Number2String "4.237,5") -> nil

Hàm Lisp tham khảo :
Nhớ chép file "Number2String.dll" vào đuờng dẫn Autocad Support file search Path.

(defun C:test1(/ ds e fil i res ss str);
(if (and (setq fil (findfile "Number2String.dll"))
(vl-cmdf "_.netLoad" fil)
(setq ss (ssget "_:L" (list (cons 0 "Text")))) )
(progn
(setq i -1)
(while (setq e (ssname ss (setq i (1+ i))))
(setq ds (entget e)
str (cdr (assoc 1 ds)))
(if (setq res (Number2String str) )
(entmod (subst (cons 1 (strcat str " (" (car res ) ")") )(assoc 1 ds) ds)) ) ))
(princ "\nError found."))
(princ))
(defun C:test(/ ss res fil)
(if (and (setq fil (findfile "Number2String.dll"))
(vl-cmdf "_.netLoad" fil) )
(while (setq ss (ssget "_+.:S:E" (list (cons 0 "Text"))))
(if (setq res (Number2String (cdr (assoc 1 (entget (ssname ss 0))))) )
(princ (car res ))
(princ "\nKhong phai so!")))
(princ "\nFile not found.") )
(princ))



Link bao gồm SourceCode : click here
<<

Filename: 188551_test1_test.lsp
Tác giả: phanmanhphu
Bài viết gốc: 188659
Tên lệnh: vd
Hỏi về lisp tạo biến cho dim VD.lsp
http://nh3.upanh.com/b1.s13.d5/328143e7da98310731f1e10d3aabd9c9_39735373.measurement.jpg

Các bác có ai biết viết đoạn lisp để hỏi nhập giá trị này không ạ.( phần đánh dấu đỏ )
Em đang muốn nhập đoạn này vào thêm trong lisp VD.lsp


;;; DAT BIEN CHO DIM
(DEFUN C:VD ()
(setq OVSC (getreal "\nty le dim la bao nhieu %? ... "))
(setq namedim (getstring "\nDat ten dim nhe "))
>>
http://nh3.upanh.com/b1.s13.d5/328143e7da98310731f1e10d3aabd9c9_39735373.measurement.jpg

Các bác có ai biết viết đoạn lisp để hỏi nhập giá trị này không ạ.( phần đánh dấu đỏ )
Em đang muốn nhập đoạn này vào thêm trong lisp VD.lsp


;;; DAT BIEN CHO DIM
(DEFUN C:VD ()
(setq OVSC (getreal "\nty le dim la bao nhieu %? ... "))
(setq namedim (getstring "\nDat ten dim nhe "))
(COMMAND "INSERT" "DIM=dim" ^c)
(COMMAND "-LAYER" "SET" "K.DIM(5)" "")
(command "-style" "K.VNtime" "VNTime.shx,VNS.SHX" "0" "0.75" "0" "N" "N" "N")
(COMMAND "MIRRTEXT" "0") ;;;KHONG MIRROR TEXT
(COMMAND "DIMUNIT" "2") ;;;TEXT DANG DECIMAL
(COMMAND "DIMADEC" "0") ;;;DAT SO CHU THAP PHAN TEXTDIM
(COMMAND "DIMASZ" "1") ;;;KTHUOC ARROWHEADER
(COMMAND "DIMCLRT" "2") ;;;DAT MAU CHO TEXTDIM
(COMMAND "DIMDEC" "0") ;;;DAT KIEU THAP PHAN CHO DIMTEXT
(COMMAND "DIMALTU" "2") ;;;KIEUDONVI TEXTDIM
(COMMAND "DIMDLE" "1") ;;DATPHAN DIMLINE NHO KHOI DG EXTEND
(COMMAND "DIMDLI" "8") ;;;DAT KHOANG CACH GIUA CAC DUONG DIM
(COMMAND "DIMEXE" "2") ;;;DATPHAN DG EXTEND NHO KHOI DG DIMLINE
(COMMAND "DIMEXO" "0") ;;;DAT KHCACH CHAN DG GIONG VA VAT THE
(COMMAND "DIMFIT" "5") ;;;DATFIT
;;0 Text and Arrows
;;1 Text Only
;;2 Arrows Only
;;3 Best Fit
;;4 Leader
;;5 No Leader
(COMMAND "DIMTIH" "OFF") ;;;GIONG TEXT trong dg dim THEO DG DIMLINE
(COMMAND "DIMTOH" "OFF") ;;;GIONG TEXT trong dg dim THEO DG DIMLINE
(COMMAND "DIMTAD" "1") ;;;TEXTDIM PHIA TREN DIMLINE
(COMMAND "DIMTOFL" "ON") ;;;CO DIMLINE NGAY CA KHI TEXT OUTSIDE
(COMMAND "DIMTXSTY" "K.VNtime") ;;;style dimtext
(COMMAND "DIMTXT" "2.5") ;;;chieucao textdim
(COMMAND "DIMASZ" "1") ;;;scale for arrowhead
(COMMAND "DIMTVP" "1") ;;;khcach textdim phia tren hoac duoi dimline
(COMMAND "DIMGAP" "1") ;;;khcach dim phia tren hoac duoi dimline
(COMMAND "DIMSAH" "ON") ;;;dung blockarrow default hoac defined
(COMMAND "DIMBLK" "DIM") ;;;kieu arrow
(COMMAND "DIMBLK1" "DIM") ;;;kieu arrow dau
(COMMAND "DIMBLK2" "DIM") ;;;kieu arrow cuoi
(COMMAND "DIMSD1" "OFF") ;;;CO DIMLINEDAU
(COMMAND "DIMSE1" "OFF") ;;;CO EXTENDED LINE DAU
(COMMAND "DIMCLRD" "5") ;;;DATMAUDIMLINE
(COMMAND "DIMCLRE" "5") ;;;DATMAUEXTENDLINE
(COMMAND "DIMRND" "0") ;;;LAM TRON DIMTEXT
(COMMAND "DIMcen" "-3") ;;;ve center line for dimcen
(COMMAND "DIMSCALE" OVSC) ;;;OVERSCALE FOR DIM
(COMMAND "DIMSTYLE" "s" namedim) ;;SAVE TEN KIEU DIM
(PRINC)
)


<<

Filename: 188659_vd.lsp
Tác giả: nhimret
Bài viết gốc: 188763
Tên lệnh: hma hmna
lisp thay đổi thuộc tính associative của hatch
ở dưới là lisp của bác Tuệ... tôi muốn chỉnh lisp có thể chọn nhiều đối tượng Hatch cùng 1 lúc (lisp hiện giờ chỉ thực hiện đối với từng đối tượng, muốn tiếp tục phải làm lại lệnh)

nếu có thể thì các bác có thể thêm chức năng chọn tất cả các đối tượng, nhưng lisp chỉ tác động đến các đối tượng hatch (tương tự như lệnh DDA bỏ thuộc tính assoc của dim ý)
>>
ở dưới là lisp của bác Tuệ... tôi muốn chỉnh lisp có thể chọn nhiều đối tượng Hatch cùng 1 lúc (lisp hiện giờ chỉ thực hiện đối với từng đối tượng, muốn tiếp tục phải làm lại lệnh)

nếu có thể thì các bác có thể thêm chức năng chọn tất cả các đối tượng, nhưng lisp chỉ tác động đến các đối tượng hatch (tương tự như lệnh DDA bỏ thuộc tính assoc của dim ý)

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


;; free lisp from cadviet.com
(defun c:hma ()
(setvar "hpassoc" 1)
(setvar "osmode" 512)
(setq ddd (entsel "\nChuyen Hatch : Non-associative -> associative"))
(while
(null ddd)
(princ "\nDoi tuong khong phai la Hatch! Chon lai")
(setq ddd (entsel "\nChon Hatch mau :"))
)
(setq ename ddd
elist (entget (car ename))
etyp (cdr (assoc 0 elist))
old (getvar "clayer")
);setq
(if (/= etyp "HATCH")
(prompt "\nKHONG PHAI DOI TUONG HATCH! HAY THU LAI!")
(progn
(setq layn (cdr (assoc 8 elist)))
(setvar "HPNAME" (cdr (assoc 2 elist)))
))
(if (= (setvar "HPNAME" (cdr (assoc 2 elist))) "SOLID")
(Progn
(setq pt1 (cadr ddd))
(setvar "clayer" layn)
(entdel (car ename))
(command "bhatch" pt1 "")
(setvar "clayer" old)
))
(if (/= (setvar "HPNAME" (cdr (assoc 2 elist))) "SOLID")
(Progn
;(setq pt1 (getpoint "\nCHON MOT DIEM TRONG VUNG SE HATCH: "))
(setq pt1 (cadr ddd))
(setvar "clayer" layn)
(entdel (car ename))
(command "bhatch" pt1 "")
(setvar "clayer" old)
);progn
);if
(princ)
);defun
;;;;;;;;;;;;;
(defun c:hmna ()
(setvar "hpassoc" 0)
(setvar "osmode" 512)
(setq ddd (entsel "\nChuyen Hatch : associative -> Non-associative"))
(while
(null ddd)
(princ "\nDoi tuong khong phai la Hatch! Chon lai")
(setq ddd (entsel "\nChon Hatch mau :"))
)
(setq ename ddd
elist (entget (car ename))
etyp (cdr (assoc 0 elist))
old (getvar "clayer")
);setq
(if (/= etyp "HATCH")
(prompt "\nKHONG PHAI DOI TUONG HATCH! HAY THU LAI!")
(progn
(setq layn (cdr (assoc 8 elist)))
(setvar "HPNAME" (cdr (assoc 2 elist)))
))
(if (= (setvar "HPNAME" (cdr (assoc 2 elist))) "SOLID")
(Progn
(setq pt1 (cadr ddd))
(setvar "clayer" layn)
(entdel (car ename))
(command "bhatch" pt1 "")
(setvar "clayer" old)
))
(if (/= (setvar "HPNAME" (cdr (assoc 2 elist))) "SOLID")
(Progn
;(setq pt1 (getpoint "\nCHON MOT DIEM TRONG VUNG SE HATCH: "))
(setq pt1 (cadr ddd))
(setvar "clayer" layn)
(entdel (car ename))
(command "bhatch" pt1 "")
(setvar "clayer" old)
);progn
);if
(princ)
);defun

<<

Filename: 188763_hma_hmna.lsp
Tác giả: ssg
Bài viết gốc: 31753
Tên lệnh: dlf
Cách xác định kích thước thật của dimension ?


Bạn thử với đoạn này, chắc là không "chuối" nữa!


Filename: 31753_dlf.lsp
Tác giả: gia_bach
Bài viết gốc: 32224
Tên lệnh: ex vla%09
Cách xác định kích thước thật của dimension ?


Đối với AutoCAD phiên bản trước 2004, trước khi sử dụng các hàm vlax- cần phải khởi động ActiveX bằng dòng lệnh (vl-load-com) , tuy nhiên CAD 2004 do ActiveX được mặc định nạp khi khởi động AutoCad nên dòng lệnh (vl-load-com) là không cần thiết nhưng cứ thêm vào cho chắc (dư thì không sao, nếu thiếu thì Cad báo lỗi).


Hàm vlax-get-property hay đơn giản hơn là vlax-get để...
>>


Đối với AutoCAD phiên bản trước 2004, trước khi sử dụng các hàm vlax- cần phải khởi động ActiveX bằng dòng lệnh (vl-load-com) , tuy nhiên CAD 2004 do ActiveX được mặc định nạp khi khởi động AutoCad nên dòng lệnh (vl-load-com) là không cần thiết nhưng cứ thêm vào cho chắc (dư thì không sao, nếu thiếu thì Cad báo lỗi).


Hàm vlax-get-property hay đơn giản hơn là vlax-get để truy xuất CSDL của đối tượng(VLA-object), tương tự như cách chúng ta truy xuất qua các code DXF với Lisp.

Kết quả của lệnh HaveaDump với đốii tượng là TEXT :
Command: HaveaDump
Select object:
; IAcadText: AutoCAD Text Interface
; Property values:
; Alignment = 0
; Application (RO) = #<VLA-OBJECT IAcadApplication 00b5e51c>
; Backward = 0
; Document (RO) = #<VLA-OBJECT IAcadDocument 01268360>
; Handle (RO) = "9B"
; HasExtensionDictionary (RO) = 0
; Height = 175
; Hyperlinks (RO) = #<VLA-OBJECT IAcadHyperlinks 06461014>
; InsertionPoint = (5.96983 16.4748 0.0)
; Layer = "D-STR"
; Linetype = "ByLayer"
; LinetypeScale = 1.0
; Lineweight = -1
; Normal = (0.0 0.0 1.0)
; ObjectID (RO) = 2130005784
; ObjectName (RO) = "AcDbText"
; ObliqueAngle = 0.0
; OwnerID (RO) = 2130005240
; PlotStyleName = "ByLayer"
; Rotation = 0.0
; ScaleFactor = 1.0
; StyleName = "Standard"
; TextAlignmentPoint = (0.0 0.0 0.0)
; TextGenerationFlag = 0
; TextString = "CadViet.com"
; Thickness = 0.0
; TrueColor = #<VLA-OBJECT IAcadAcCmColor 06462a30>
; UpsideDown = 0
; Visible = -1

các dòng màu đỏ cho ta biết :
Height : chiều cao = 175
Layer : lớp = D-STR
TextString : nội dung = CadViet.com

để truy xuất các giá trị này, ta chỉ việc thêm chúng vào sau hàm vlax-get- :
(setq chcao (vla-get-Height eObj) ) ; chiều cao text
(setq lop (vla-get-Layer eObj) ) ; lớp
(setq str (vla-get-TextString eObj) ); noi dung

Ví dụ truy xuất đối tượng TETX


Hy vọng vài dòng trên giúp bạn cách truy xuất CSDL qua ActiveX.
<<

Filename: 32224_ex_vla%09.lsp
Tác giả: gia_bach
Bài viết gốc: 84856
Tên lệnh: ex1
HỎI VỀ DIALOG

- Thứ 1: pó tay
- Thứ 2: bạn tham khảo Lisp tính toán cộng trừ nhân chia

Filename: 84856_ex1.lsp
Tác giả: Doan Van Ha
Bài viết gốc: 187225
Tên lệnh: chon
Lisp chọn tất cả các đối tượng thuộc 1 layer !

Ketxu hướng dẫn cho bạn nhưng bạn vẫn chưa hiểu. Tôi diễn tả cụ thể như sau:
- Load lisp.
- Đánh lệnh CHON vào command.
- Sau đó chọn đối tượng. Bạn có thể lấy vùng chọn tuỳ ý, nhưng chỉ những layer "0" nằm trong vùng mới được chọn.
- Chọn xong, lisp trả về tên tập hợp chọn, đồng thời grip lên các đối tượng để bạn dễ thấy.

Filename: 187225_chon.lsp
Tác giả: Tue_NV
Bài viết gốc: 76526
Tên lệnh: m um msot
Lisp đưa đối tượng về vị trí cũ sau khi move?

Chào 'study_forever'
Đây là Lisp MSOT -> Move các đối tượng còn sót lại (chưa MOVE cùng với đối tượng trước đó)
Tue_NV bổ sung vào Lisp nhé :
1. Lệnh M : move các đối tượng của bản vẽ : giống lệnh M (Move) của CAD như 2 giọt nước
2. Lệnh UM (Unmove) : đưa các đối tượng Move nhầm về vị trí cũ
3 . Lệnh MSOT : Move các đối tượng còn sót lại (chưa MOVE cùng với...
>>

Chào 'study_forever'
Đây là Lisp MSOT -> Move các đối tượng còn sót lại (chưa MOVE cùng với đối tượng trước đó)
Tue_NV bổ sung vào Lisp nhé :
1. Lệnh M : move các đối tượng của bản vẽ : giống lệnh M (Move) của CAD như 2 giọt nước
2. Lệnh UM (Unmove) : đưa các đối tượng Move nhầm về vị trí cũ
3 . Lệnh MSOT : Move các đối tượng còn sót lại (chưa MOVE cùng với đối tượng trước đó)
Các bạn hãy sử dụng thử và cho mình biết ý kiến nhé :

@study : Với yêu cầu 2 thì Tue_NV yêu cầu bạn post bài đúng chổ. Đây là bài viết về Move chứ không phải bài viết về copy. Mong bạn hiểu. Bạn post đoạn code trên ở chổ nào thì trả về đúng chổ cũ của nó. Mình sẽ trả lời bạn nếu bạn post bài đúng chổ. Bạn đồng ý chứ?
Hãy edit lại bài viết trên của bạn và trả về vị trí của nó
<<

Filename: 76526_m_um_msot.lsp
Tác giả: ssg
Bài viết gốc: 76719
Tên lệnh: mm mn
Lisp đưa đối tượng về vị trí cũ sau khi move?

Ssg có chiêu này, bạn dùng thử xem có hợp ý không?

- Lệnh MM: hoạt động không khác gì lệnh move (M) của Acad
- Lệnh MN: chọn những chú nào bị nhầm, trả về nguyên quán! Lưu ý rằng, nó chỉ có tác dụng đúng với các đối tượng được move bởi MM, và phải thực hiện liền ngay sau đó. Để lâu ssg không dám chắc chúng nó có chịu quay về chỗ cũ không, hay là lang thang đâu đó...
>>

Ssg có chiêu này, bạn dùng thử xem có hợp ý không?

- Lệnh MM: hoạt động không khác gì lệnh move (M) của Acad
- Lệnh MN: chọn những chú nào bị nhầm, trả về nguyên quán! Lưu ý rằng, nó chỉ có tác dụng đúng với các đối tượng được move bởi MM, và phải thực hiện liền ngay sau đó. Để lâu ssg không dám chắc chúng nó có chịu quay về chỗ cũ không, hay là lang thang đâu đó không biết!
- Nếu bạn thường xuyên bị... nhầm thì đổi luôn Move của Acad thành MM
<<

Filename: 76719_mm_mn.lsp
Tác giả: lp_hai
Bài viết gốc: 188917
Tên lệnh: doc
Chuyển text từ số thành chữ
Mình thử viết cái lisp theo như đầu bài là file bạn gửi lên, xem thế nào nhé.
Tuy nhiên vì lười nên mình chỉ viết cho lisp đọc đế hàng triệu thôi, còn hàng tỉ thì có thể thêm sau nếu thật cần thiết :)

(defun c:doc(/ docsotrieu docsonghin docsodonvi nd stt nguyen thapphan)
(setq text...
>>
Mình thử viết cái lisp theo như đầu bài là file bạn gửi lên, xem thế nào nhé.
Tuy nhiên vì lười nên mình chỉ viết cho lisp đọc đế hàng triệu thôi, còn hàng tỉ thì có thể thêm sau nếu thật cần thiết :)

(defun c:doc(/ docsotrieu docsonghin docsodonvi nd stt nguyen thapphan)
(setq text (entget(car(entsel)))
nd (cdr(assoc 1 text))
stt (vl-string-search "," nd)
nguyen (vl-string-subst "" "."(substr nd 1 stt))
thapphan(dichso (substr nd (+ stt 2)))
)
(cond ((>(strlen nguyen)6)
(setq sotrieu (substr nguyen 1 (- (strlen nguyen) 6))
docsotrieu (strcat (doc3so sotrieu) " tri\U+1EC7u ")
songhin (substr nguyen (- (strlen nguyen) 5) 3)
docsonghin (strcat (doc3so songhin) " ngh\U+00ECn ")
sodonvi (substr nguyen (- (strlen nguyen) 2) 3)
docsodonvi (doc3so sodonvi)
)
(strcat docsotrieu docsonghin docsodonvi " ph\U+1EA9y " thapphan)
);tri\U+1EC7u
((and(<=(strlen nguyen)6) (>(strlen nguyen)3))
(setq songhin (substr nguyen 1 (- (strlen nguyen) 3))
docsonghin (strcat (doc3so songhin) " ngh\U+00ECn ")
sodonvi (substr nguyen (- (strlen nguyen) 2) 3)
docsodonvi (doc3so sodonvi)
)
(strcat docsonghin docsodonvi " ph\U+1EA9y " thapphan)
);ngh\U+00ECn
((<=(strlen nguyen)3)
(setq
sodonvi nguyen
docsodonvi (doc3so sodonvi)
)
(strcat docsodonvi " ph\U+1EA9y " thapphan)
);ngh\U+00ECn
)

)
;;;=======================================
(defun dichso(so / so docso)

(cond ((= so "0")
(setq docso "kh&#244;ng")
)
((= so "1")
(setq docso "m\U+1ED9t")
)
((= so "2")
(setq docso "hai")
)
((= so "3")
(setq docso "ba")
)
((= so "4")
(setq docso "b\U+1ED1n")
)
((= so "5")
(setq docso "n\U+0103m")
)
((= so "6")
(setq docso "s\U+00E1u")
)
((= so "7")
(setq docso "b\U+1EA3y")
)
((= so "8")
(setq docso "t\U+00E1m")
)
((= so "9")
(setq docso "ch\U+00EDn")
)
)
)
;;;;
(defun doc3so(sodonvi)
(cond
((=(strlen sodonvi)3);;co 3 so
(setq tram (strcat(dichso (substr sodonvi 1 1)) " tr\U+0103m "));hang tr\U+0103m
(cond ((and(/=(substr sodonvi 2 1) "0") (/=(substr sodonvi 2 1) "1"))
(setq chuc (strcat(dichso (substr sodonvi 2 1)) " m\U+01B0\U+01A1i "))
)
((=(substr sodonvi 2 1) "0")
(setq chuc "linh ")
)
((=(substr sodonvi 2 1) "1")
(setq chuc "m\U+01B0\U+1EDDi ")
)
);hang chuc
(cond ((and(/=(substr sodonvi 3 1) "0") (/=(substr sodonvi 3 1) "1") (/=(substr sodonvi 3 1) "5"))
(setq donvi (dichso (substr sodonvi 3 1)))
)
((=(substr sodonvi 3 1) "0")
(setq donvi "")
)
((and(/= chuc "m\U+01B0\U+1EDDi ") (/= chuc "linh ") (=(substr sodonvi 3 1) "1"))
(setq donvi "m\U+1ED1t")
)
((and(= chuc "m\U+01B0\U+1EDDi ") (=(substr sodonvi 3 1) "1"))
(setq donvi "m\U+1ED9t")
)
((and(= chuc "linh ") (=(substr sodonvi 3 1) "1"))
(setq donvi "m\U+1ED9t")
)
((=(substr sodonvi 3 1) "5")
(setq donvi "l\U+0103m")
)
);hang don vi
(strcat tram chuc donvi)
);; co 3 so

((=(strlen sodonvi)2);;co 2 so
(cond ((/=(substr sodonvi 1 1) "1")
(setq chuc (strcat(dichso (substr sodonvi 1 1)) " m\U+01B0\U+01A1i "))
);hang chu
((=(substr sodonvi 1 1) "1")
(setq chuc "m\U+01B0\U+1EDDi ")
)
);hang chuc
(cond ((and(/=(substr sodonvi 2 1) "0") (/=(substr sodonvi 2 1) "1") (/=(substr sodonvi 2 1) "5"))
(setq donvi (dichso (substr sodonvi 2 1)))
)
((=(substr sodonvi 2 1) "0")
(setq donvi "")
)
((and(/= chuc "m\U+01B0\U+1EDDi ") (=(substr sodonvi 2 1) "1"))
(setq donvi "m\U+1ED1t")
)
((and(= chuc "m\U+01B0\U+1EDDi ") (=(substr sodonvi 2 1) "1"))
(setq donvi "m\U+1ED9t")
)
((=(substr sodonvi 2 1) "5")
(setq donvi "l\U+0103m")
)
);hang don vi

(strcat chuc donvi)
);; co 2 so
((=(strlen sodonvi)1)
(setq donvi (dichso (substr sodonvi 1 1)))
);; co 1 so
)
)

<<

Filename: 188917_doc.lsp
Tác giả: hoa35ktxd
Bài viết gốc: 92056
Tên lệnh: chuthichthep
Nhờ các bác viết hộ lisp giúp thống kê thép nhanh hơn.

Không biết bạn vẽ các thanh thép bằng đối tượng gì, tôi hay vẽ bằng Donut nên đã làm theo cách này.
- Chọn điểm chèn
- Chọn các Donut có cùng ký hiệu
- Chèn Leader.

Lưu ý, setting của qleader có Number of points = 2, Annotation = none

Filename: 92056_chuthichthep.lsp
Tác giả: gia_bach
Bài viết gốc: 96946
Tên lệnh: a1
Edit_box trong dialog

Hàm get_tile phải đặt trong vòng lặp WHILE
chú ý giải phóng biến cục bộ.
code :

Filename: 96946_a1.lsp

Trang 74/303

74