


Bee
-
Số lượng nội dung
553 -
Đã tham gia
-
Lần ghé thăm cuối
-
Ngày trúng
37
Bài đăng được đăng bởi Bee
-
-
46 phút trước, quocmanh04tt đã nói:Lần này Mr. Bee cưỡi trâu đuổi thằng hái trộm hoa. KKK.
@huunhantvxdts với Line đâu có "Command" "area" ... được??? (à được nhưng không có kết quả). hehehe...
Hê hê, tại hạ làm luôn mấy thằng khác, không lại thêm từng thằng thì lại sửa tiếp. ^_^
-
Nhờ chỉnh sửa lisp
trong AutoLisp
Vào lúc 20/10/2018 tại 17:01, khanhkasu đã nói:Chào các anh chị diễn đàn Cadviet.
Em có đoạn lisp lọc tên bản vẽ theo file *txt có sẵn. Em xin giải thích sơ về đoạn lisp này:
Giả sử em có các tên bản vẽ lần lượt là: NS1CL001, NS1CL002. NS1CL003, NS1CL004, NS1CL005. Bây giờ em cần lấy 3 bản vẽ có tên NS1CL002,NS1CL003, NS1CL005.
Cách làm của em: Tạo 1 file *TXT có tên bất kỳ, trong file này em viết tên 3 bản vẽ cần lấy ra là: NS1CL002,NS1CL003, NS1CL005.
Sau đó em chạy lisp với tên CFFBYLIST, nó hiện cái bang yêu cầu chon file *TXT, em chon và nó sẽ lọc cho em.
.............................................................................................
Vấn đề của e là nó chạy nhưng báo lỗi " bad argument".
Error: bad argument type: stringp nil
Hay là lỗi nào vậy ?
-
Vào lúc 20/10/2018 tại 09:40, Nguyễn Minh Chương đã nói:Chào mọi người, mình không hiểu lắm về lisp cad nên nhờ mọi người giúp đỡ.
Mình có lisp tính tổng độ dài, hiện tại nó chỉ tính được đường Polyline và xuất kết quả ra 1 text đã có sẵn trên mặt bằng. Giờ mình muốn sửa lại lisp một tí là muốn nó tính được cả đường line và tự xuất ra text.
Mong mọi người giúp đỡ ạ. (file mình có đính kèm)
Chỉnh lại lisp khác cho bạn dùng ^_^
(defun c:cc (/ ss tl n ent itm obj l txt) (setq ss (ssget) tl 0 n (1- (sslength ss))) (while (>= n 0) (setq ent (entget (setq itm (ssname ss n))) obj (cdr (assoc 0 ent)) l (cond ((= obj "LINE") (distance (cdr (assoc 10 ent)) (cdr (assoc 11 ent)))) ((= obj "ARC") (* (cdr (assoc 40 ent)) (if (minusp (setq l (- (cdr (assoc 51 ent)) (cdr (assoc 50 ent))))) (+ pi pi l) l))) ((or (= obj "CIRCLE") (= obj "SPLINE") (= obj "POLYLINE") (= obj "LWPOLYLINE") (= obj "ELLIPSE")) (command "_.area" "_o" itm) (getvar "perimeter")) (t 0)) tl (+ tl l) n (1- n))) (setq txt (car (entsel "Ch\U+1EC9 vào text c\U+1EA7n ghi: "))) (if (= (cdr (assoc 0 (entget txt))) "TEXT") (progn (setq txt (entmod (subst (cons 1 (strcat "L= " (rtos tl 2 0) " mm")) (assoc 1 (entget txt)) (entget txt)))) (if (assoc 62 txt) (entmod (subst (cons 62 4) (assoc 62 txt) txt)) (entmod (append txt (list (cons 62 4)))) ) ) ) (princ) )
-
1
-
-
34 phút trước, quocmanh04tt đã nói:Ủa, các huynh đài có nhìn nhầm (lộn) không??? Trong lisp, tại hạ thấy có cái này mà: (getvar "Perimeter").
KKK công nhận là tại hạ cưỡi ngựa xem hoa. Thấy area lại thêm biến tdt nhằm đánh lạc hướng người xem ^_^. Vui thật !
-
Nhờ chỉnh sửa lisp
trong AutoLisp
15 phút trước, khanhkasu đã nói:Hàm con đây mấy anh (chị) ơi.
------------------------------------------------------
(defun TS:readcsv (csv / des lst sep str)
(if (setq des (open csv "r"))
(progn
(setq sep
(cond ((vl-registry-read "HKEY_CURRENT_USER\\Control Panel\\International" "sList"))
(",")
)
)
(while (setq str (read-line des))
(setq lst (cons (vl-string-trim " " (car (TS:csv->lst str sep 0))) lst))
)
(close des)
)
)
(reverse lst)
)-----------------------------------------------------------
(defun TS:ParseNumbers (s)
(
(lambda (l)
(read
(strcat "("
(vl-list->string
(mapcar
(function
(lambda (a b c)
(if
(or
(< 47 b 58)
(and (= 45 b) (< 47 c 58) (not (< 47 a 58)))
(and (= 46 b) (< 47 a 58) (< 47 c 58))
)
b
32
)
)
)
(cons nil l)
l
(append (cdr l) (list nil))
)
)
")"
)
)
)
(vl-string->list s)
)
)-----------------------------------------------------------------------------------------
(defun TS:delFolder (folder)
(vl-load-com)
(setq fso (vlax-create-object "Scripting.FileSystemObject"))
(vlax-invoke-method fso 'DeleteFolder folder :vlax-false)
(vlax-release-object fso)
)----------------------------------------------------------------------------------------
Mong anh (chị) giúp đỡ.
Thân mến!
Có bao nhiêu hàm con thì pót hết lên đi ^_^
Vẫn thiếu TS:directoryfiles, TS:csv->lst.
Quăng luôn cái file ví dụ lên thì mn mới test đc.
-
Nhờ chỉnh sửa lisp
trong AutoLisp
2 giờ trước, khanhkasu đã nói:Chào các anh chị diễn đàn Cadviet.
Em có đoạn lisp lọc tên bản vẽ theo file *txt có sẵn. Em xin giải thích sơ về đoạn lisp này:
Giả sử em có các tên bản vẽ lần lượt là: NS1CL001, NS1CL002. NS1CL003, NS1CL004, NS1CL005. Bây giờ em cần lấy 3 bản vẽ có tên NS1CL002,NS1CL003, NS1CL005.
Cách làm của em: Tạo 1 file *TXT có tên bất kỳ, trong file này em viết tên 3 bản vẽ cần lấy ra là: NS1CL002,NS1CL003, NS1CL005.
Sau đó em chạy lisp với tên CFFBYLIST, nó hiện cái bang yêu cầu chon file *TXT, em chon và nó sẽ lọc cho em.
.............................................................................................
Vấn đề của e là nó chạy nhưng báo lỗi " bad argument".
Mong anh chị giúp em tìm lỗi với.
...............................Code của em đây..........................
(defun c:CFFbyList (/ data dwgfinal file lstdwg lst_err path path_dwgfinal path_final)
(vl-load-com)
(setvar "Modemacro" "@ Tr\U+1EA7n C\U+00F4ng S\U+01A1n _ Detail SS")
(if
(and
(setq file (getfiled "Ch\U+1ECDn File TXT,CSV c\U+1EA7n loc Final." "" "txt" 16))
(setq path (vl-filename-directory file))
(setq data (TS:readcsv file))
)
(progn
;;-------------------------------------------------------------------------------;;
(setq lstdir (vl-remove-if
'(lambda (x) (wcmatch x ".,.."))
(vl-directory-files path "*" -1)
)
)
(if
(not (vl-file-directory-p (setq Path_final (strcat path "\\" (vl-filename-base file)))))
(vl-mkdir Path_final)
)
(foreach name data
(if (> (length (setq lstdwg (TS:directoryfiles path (strcat name "-R*.dwg") T))) 1)
(progn
(setq lstdwg
(vl-sort
lstdwg
'(lambda (x1 x2)
(> (last (TS:ParseNumbers (vl-filename-base x1)))
(last (TS:ParseNumbers (vl-filename-base x2)))
)
)
)
)
)
)
(setq path_dwgfinal (car lstdwg)
dwgfinal (strcat
(vl-filename-base path_dwgfinal)
(vl-filename-extension path_dwgfinal)
)
)
(if (vl-file-copy
path_dwgfinal
(strcat Path_final
"\\"
dwgfinal
)
)
(vl-file-delete path_dwgfinal)
(setq lst_err (cons file lst_err))
)
)
(if lstdir
(mapcar (function (lambda (x)
(TS:delFolder (strcat path "\\" x))
)
)
lstdir
)
)
(if
lst_err
(acet-ui-message
(strcat
"\nM\U+1ED9t v\U+00E0i b\U+1EA3n v\U+1EBD kh\U+00F4ng Copy \U+0111\U+01B0\U+1EE3c: \n+ "
(TS:lst->str lst_err "\n+ ")
)
"@ Tr\U+1EA7n C\U+00F4ng S\U+01A1n _ Detail SS"
48
)
(acet-ui-message
(strcat "Kh\U+00E1nh \U+01A1i! \n"
"S\U+1ED1 b\U+1EA3n v\U+1EBD \U+0111\U+00E3 l\U+1ECDc \U+0111\U+01B0\U+1EE3c l\U+00E0: "
(itoa (length (vl-directory-files Path_final "*.dwg")))
" (DWG)"
)
"Cao Thanh Kh\U+00E1nh - Steel Structure - Design Division."
48
)
)
)
)
(princ)
).......................................................................
Mong anh (chị) giúp đỡ.
Thân mến!
Funtion TS:readcsv, TS:ParseNumbers, TS:delFolder ở đâu vậy ?
-
Lisp này là tổng diện tích chứ tổng độ dài đâu ?
Hỏi 1 đằng quăng lisp 1 nẻo nhỉ ^_^ chắc để cho vui diễn đàn.
-
1 phút trước, Học Sinh Lớp 1 đã nói:e hơi dốt :(( tiện thể đây nhờ bác giải thích cho e cái này với ạ :(
(vlax-ename->vla-object (car (entsel "\nChon text de ghi ket qua:")))
và hàm này nữa
vla-put-TextString
Help thôi
(setq e (car (entsel))) <Entity name: 27e0540>
(vlax-ename->vla-object e) #<VLA-OBJECT IAcadLWPolyline 03f713a0>
--> (car (entsel)) return ename
-->(vlax-ename->vla-object ename) return 1 activex object
--> (vla-get....) lấy 1 property nào đấy của vlaobj
-->(vla-put...) đặt 1 property nào đấy của vlaobj theo giá trị mình muốn.
--> muốn xem object có những property gì thì dùng (vlax-dump-object vlaobj)
Tìm hiểu sâu hơn thì ngcuu về ActiveX của Window. Vlisp có thể control ActiveX object trong win của tất cả các phần mềm: word, excell, .......
Tạm thế còn lại hóng các repply khác. ^_^
-
1 phút trước, Học Sinh Lớp 1 đã nói:hehe e có sđt rồi mờ bữa say quá mất luôn đt thế là mất liên lạc với bác luôn ^^ a có tài liệu về làm vl-.... và hàm acet-... gửi cho e xin với ^^ :P
cần hàm gì thì google hàm đấy. Hoặc đọc help là được mà. Diễn đàn cũng nhiều bài nói rồi, em chịu khó tìm nhé. Hàm nào khó thì pót lên ai rảnh sẽ trả lời ngay mà. ^_^
-
10 phút trước, Học Sinh Lớp 1 đã nói:a bee có nhớ e ko à ^^ xưa có nhờ a viết cái code này: Dim tu dong va danh so dim_MCN_MCD_add_load_com
lâu lắm rồi ko nc vs a
Oài , cái này chắc lâu lắm rồi. Mình không nhớ. ^_^
-
Hê hê,
Với trường hợp đang mở bản vẽ mà lấy lại giá trị cũ trước đó thì đơn giản.
Trường hợp tắt bản vẽ đi mở lại muốn lấy giá trị cũ thì hơi phức tạp hơn tí.
^_^
-
KHÓA BẢN VẼ
trong Sử dụng AutoCAD
Vào lúc 25/9/2018 tại 11:22, Ba Thang đã nói:Chào anh chị em, mọi người cho em hỏi là làm sao khóa bản vẽ khi gửi file cad để khi họ xem họ không sửa kích thước hay coopy đc a ?
Print khung tên thành JPG. Insert JPG vào CAD save thành file CAD. Thích CAD thì gửi file CAD này . ^_^
-
B không cần khai nếu A tìm ra được dấu vết của B bằng cách nào đó. Mà ở đây B đang để lại dấu vết khi chọn vào nó show path ảo nghĩa là nó bij đặt GPS cơ sở dữ liệu roài. Vấn đề là A chưa có kiến thức về data đó thoai. ^_^
-
Nếu như bác Hạ nói vậy là không cách nào tạo được 1 đường path à ? Chắc phải có chứ vì nó là 1 đối tượng arraypath mà. :(
-
-
4 giờ trước, Danh Cong đã nói:Mình có đoạn code như sau:
(defun c:ABC () (or name (setq name "Con meo"))
(initget 128 "Con meo/Con chuot")
(setq name (cond ((getkword (strcat "\nBan thich con nao : [Con meo/Con chuot] <" name ">")))(name)))
(princ))Mình nhận thấy thấy hàm "Initget" không chấp nhận với "Con meo" , do nó có chứa dấu cách.
Tức là phải thay "Con meo" = "CON-MEO" , "Con chuot" = "CON_CHUOT" thì lisp mới chạy được.
Vậy các bác cho hỏi có cách nào sử dụng dấu cách, sử dụng chữ thường với trường hợp ở trên không ạ. Em xin cảm ơn :)))
He he
Trường hợp này cho chọn chữ cái đầu thôi: M hoặc C
không phải gõ dài dòng con mèo với con chuột.
^_^
-
1
-
-
-
-
-
-
Vào lúc 11/7/2018 tại 14:01, nghilam007 đã nói:Bản vẽ đã được lược bớt để được 1,9Mb. Sau khi vẽ khoét tại các góc chi tiết mới region lại.
Hàng test.
Have fun
-
Add title ?
trong AutoLisp
-
21 giờ trước, simmung đã nói:em mở file cad lên nó báo lỗi contains authoring elements. open in block editor? em nhấn yes,no,cancel đều bị hủy.Dưới đây là file của em.Mong mọi người giúp đỡ
Mình mở bình thường không thấy báo lỗi gì. CAD 2018. Chắc do CAD của bạn lỗi rồi.
-
Copy Xref chung vào folder chứa file vẽ. Mặc định khi không tìm đúng đường dẫn thì autocad sẽ load xref cùng folder thôi. Dùng xref thì phải biết được đường dẫn TUYỆT ĐỐI, TƯƠNG ĐỐI, VÀ KHÔNG CẦN ĐƯỜNG DẪN (NO PATH).
Nhờ chỉnh sửa lisp
trong AutoLisp
Đã đăng · Trả lời báo cáo
Lỗi funtion này:
(setq lstdwg (ts:directoryfiles path (strcat name "-R*.dwg") t))
nếu lstdwg mà nil thì sẽ báo lỗi đó.
Check lại funtion này thôi hoặc là khi setq 1 biến thì phải check biến đó. Bạn đã viết được cả 1 loạt lisp thế thì có thể tự điều chỉnh lại được.
Good luck.
^_^