hugo007 1 Báo cáo bài đăng Đã đăng Tháng 11 27, 2010 Em đang tìm hiểu về lisp.Khi muốn viết lisp gọi lệnh trong cad bằng dòng COMMAND thì được nhưng viết để gọi lệnh DIMSTYLE không được.Mong các bác chỉ giùm.Thanks (defun c:dd() (command "dimstyle")) 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
phamngoctukts 714 Báo cáo bài đăng Đã đăng Tháng 11 27, 2010 Em đang tìm hiểu về lisp.Khi muốn viết lisp gọi lệnh trong cad bằng dòng COMMAND thì được nhưng viết để gọi lệnh DIMSTYLE không được.Mong các bác chỉ giùm.Thanks(defun c:dd() (command "dimstyle")) Thường thì khi muốn gọi dialog box thì thêm (initdia). ví dụ muốn gọi dialog layer thì dùng (initdia)(command "layer") nhưng không hiểu sao với dímtyle thì không gọi được. Nếu bạn muốn gọi dialog dímtyle thì dùng (command "ddim") thì nó lên luôn. 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
gia_bach 1.549 Báo cáo bài đăng Đã đăng Tháng 11 27, 2010 Cac bác ơi cho em hỏi một tý, sao em dung cái này trong cad 2007 không được vậy http://www.cadviet.com/upfiles/3/megashare...ritetoexcel.zip sau khi em NETLOAD xong em đánh lệnh toex thì cad báo (Exception has been throw by tayet an invocation) em ấn continue thì nó thoát lệnh luôn các bác biết chỉ dùm mình với sau mình sử dụng ỨNG DỤNG CỦA AUTOCAD.NET API cho phép trích xuất text trong bản vẽ ra file exel tren cad 2007 không được vậy http://www.cadviet.com/upfiles/3/megashare...tetoexcel_1.zipSao không ai chịu giúp mình hết vậy, thật là buồn quá đi hu hu hu Chào lacvanhoa. Cần phải có thời gian mới trả lời bạn được. (vì hôm qua trên cơ quan sài Cad 2010) Sáng nay mới chạy trên Cad 2007 kết quả OK. Có khả năng do Win của bạn sử dụng .Net Framework 2.0 ? thử nâng cấp .Net Framework lên version 3.5. Không thể trì hoãn cái sự sung sướng đượ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
hugo007 1 Báo cáo bài đăng Đã đăng Tháng 11 27, 2010 Thường thì khi muốn gọi dialog box thì thêm (initdia). ví dụ muốn gọi dialog layer thì dùng (initdia)(command "layer") nhưng không hiểu sao với dímtyle thì không gọi được. Nếu bạn muốn gọi dialog dímtyle thì dùng (command "ddim") thì nó lên luôn. Cảm ơn bạn rất nhiều,vì vấn đề này mình thắc mắc rất nhiều mà không ai giải đáp được.Bạn làm cách nào mà tìm ra được vậy?Tiện thể cho mình hỏi muốn gọi lệnh DDPTYPE thì bằng cách nào?Vì dùnng (command "DDPTYPE") không gọi được.Thanks. Chia sẻ bài đăng này Liên kết tới bài đăng Chia sẻ trên các trang web khác
Tue_NV 3.912 Báo cáo bài đăng Đã đăng Tháng 11 27, 2010 Cảm ơn bạn rất nhiều,vì vấn đề này mình thắc mắc rất nhiều mà không ai giải đáp được.Bạn làm cách nào mà tìm ra được vậy? Tiện thể cho mình hỏi muốn gọi lệnh DDPTYPE thì bằng cách nào?Vì dùnng (command "DDPTYPE") không gọi được.Thanks. Vấn đề này, Tue_NV đã giải đáp lâu rồi mà. Bai viet so 1649 :cheers: Bạn xem thêm ví dụ mẫu ở bài viết 1654 nhé Topic này trôi qua nhanh quá. :leluoi: Bạn muốn gọi hộp thoại DDPTYPE à? 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
hugo007 1 Báo cáo bài đăng Đã đăng Tháng 11 27, 2010 Vấn đề này, Tue_NV đã giải đáp lâu rồi mà.Bai viet so 1649 :cheers: Bạn xem thêm ví dụ mẫu ở bài viết 1654 nhé Topic này trôi qua nhanh quá. :leluoi: Bạn muốn gọi hộp thoại DDPTYPE à? Cảm ơn 2 bác rất nhiều,nhân tiện cho e hỏi sao dùng (command "cal") và (command "overkill") không được?Thanks. Chia sẻ bài đăng này Liên kết tới bài đăng Chia sẻ trên các trang web khác
phamngoctukts 714 Báo cáo bài đăng Đã đăng Tháng 11 27, 2010 Cảm ơn 2 bác rất nhiều,nhân tiện cho e hỏi sao dùng (command "cal") và (command "overkill") không được?Thanks. lệnh (command "cal") dùng bình thường mà bạn, còn lện overkill thì bạn dùng (c:overkill) 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
hugo007 1 Báo cáo bài đăng Đã đăng Tháng 11 27, 2010 lệnh (command "cal") dùng bình thường mà bạn, còn lện overkill thì bạn dùng (c:overkill) Nếu dùng bình thường thì được nhưng khi ta vẽ 1 đường thẳng rồi dùng lệnh stretch để kéo đoạn thẳng dài ra 1 đoạn thí dụ 'cal rồi nhấn 33x7.5 thì nó báo lỗi: Invalid point. ; error: Function cancelled Cảm ơn bạn rất 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
phamngoctukts 714 Báo cáo bài đăng Đã đăng Tháng 11 27, 2010 Nếu dùng bình thường thì được nhưng khi ta vẽ 1 đường thẳng rồi dùng lệnh stretch để kéo đoạn thẳng dài ra 1 đoạn thí dụ 'cal rồi nhấn 33x7.5 thì nó báo lỗi:Invalid point. ; error: Function cancelled Cảm ơn bạn rất nhiều. Bạn dùng cad version bao nhiêu. Mình dùng cad 2007 vẫn bình thường trả gặp lỗi gì. 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
hugo007 1 Báo cáo bài đăng Đã đăng Tháng 11 27, 2010 Bạn dùng cad version bao nhiêu. Mình dùng cad 2007 vẫn bình thường trả gặp lỗi gì. Version 11.Bạn có dùng kết hợp với stretch và scale.... không?Nhưng nếu sử dụng trong Express thì được.Thanks. Chia sẻ bài đăng này Liên kết tới bài đăng Chia sẻ trên các trang web khác
lacvanhoa 0 Báo cáo bài đăng Đã đăng Tháng 11 27, 2010 Em cám ơn bác gia bạch nhiều nhe!!! 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
lacvanhoa 0 Báo cáo bài đăng Đã đăng Tháng 11 27, 2010 Em mới tham gia diễn đàn gần đây thôi em thấy rất hay rất có ích cho bản thân em giúp em rất nhiều trong công việc kiến thức cad của em được cải thiện rất rõ. em nói vòng vòng để mong được sự giúp đỡ của các bác trên đàn đó hê hê! em muốn thỉnh giáo các bác vấn đề này đây http://www.cadviet.com/upfiles/3/to44.dwg 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
vietha209 1 Báo cáo bài đăng Đã đăng Tháng 11 27, 2010 Các bạn xem hộ mình đoạn lisp này mình viết sai ở đâu mà đường tròn lúc thì tạo ra đúng lúc lại tạo ra sai (đặc biệt là có khi cùng một đoạn thẳng) bắt đi bắt lại một lúc lại sai??? Giúp mình nhé. (defun c:ccc () (setq oldos (getvar "OSMODE")) (setq oldot (getvar "ORTHOMODE")) (setvar "OSMODE" 3) (setvar "ORTHOMODE" 0) (setvar "cmdecho" 0) (setq P1 (getpoint "\n Pick diem dau: ")) (setq P2 (getpoint P1 "\n Pick diem cuoi: ")) (if (< (cadr P1) (cadr P2)) (progn (setq P0 P1) (setq goc (angle P1 P2))) (progn (setq P0 P2) (setq goc (angle P2 P1))) ) (setq X1 (car P1) Y1 (cadr P1) ) (setq X2 (car P2) Y2 (cadr P2) ) (setq P3 (list (/ (+ X1 X2) 2) (/ (+ Y1 Y2) 2) 0)) (setq L (abs (- X1 X2))) (setq H (abs (- Y1 Y2))) (setq i (rtos (* (/ H L) 100) 2 2)) (setq doc (/ (* goc 180) pi)) (if (< doc 90) (progn (setq P4 (polar P3 (+ goc (/ pi 2)) 0.5)) ;(prompt "\n nho hon 90d") ) (progn (setq P4 (polar P3 (- goc (/ pi 2)) 0.5)) (setq doc (- doc 180)) ;(prompt "\n lon hon 90d") ) ) (command ".circle" P4 0.5) (setvar "OSMODE" oldos) (setvar "ORTHOMODE" oldot) (princ) ) link bản vẽ http://www.cadviet.com/upfiles/3/drawing1_35.dwg 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
phamngoctukts 714 Báo cáo bài đăng Đã đăng Tháng 11 27, 2010 Các bạn xem hộ mình đoạn lisp này mình viết sai ở đâu mà đường tròn lúc thì tạo ra đúng lúc lại tạo ra sai (đặc biệt là có khi cùng một đoạn thẳng) bắt đi bắt lại một lúc lại sai??? Giúp mình nhé. (defun c:ccc () (setq oldos (getvar "OSMODE")) (setq oldot (getvar "ORTHOMODE")) (setvar "OSMODE" 3) (setvar "ORTHOMODE" 0) (setvar "cmdecho" 0) (setq P1 (getpoint "\n Pick diem dau: ")) (setq P2 (getpoint P1 "\n Pick diem cuoi: ")) (if (< (cadr P1) (cadr P2)) (progn (setq P0 P1) (setq goc (angle P1 P2))) (progn (setq P0 P2) (setq goc (angle P2 P1))) ) (setq X1 (car P1) Y1 (cadr P1) ) (setq X2 (car P2) Y2 (cadr P2) ) (setq P3 (list (/ (+ X1 X2) 2) (/ (+ Y1 Y2) 2) 0)) (setq L (abs (- X1 X2))) (setq H (abs (- Y1 Y2))) (setq i (rtos (* (/ H L) 100) 2 2)) (setq doc (/ (* goc 180) pi)) (if (< doc 90) (progn (setq P4 (polar P3 (+ goc (/ pi 2)) 0.5)) ;(prompt "\n nho hon 90d") ) (progn (setq P4 (polar P3 (- goc (/ pi 2)) 0.5)) (setq doc (- doc 180)) ;(prompt "\n lon hon 90d") ) ) (command ".circle" P4 0.5) (setvar "OSMODE" oldos) (setvar "ORTHOMODE" oldot) (princ) ) link bản vẽ http://www.cadviet.com/upfiles/3/drawing1_35.dwg Bạn sửa dòng này (setvar "OSMODE" 3) thành (setvar "OSMODE" 1). Vì (setvar "OSMODE" 3) bắt cả điểm midpoint nên đường tròn nó dính vào điểm giữa của đường thẳng. Nếu không muốn sửa dòng (setvar "OSMODE" 3) thì bạn thêm dòng (setvar "OSMODE" 0) sau dòng (setq P2 (getpoint P1 "\n Pick diem cuoi: ")) 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
phamngoctukts 714 Báo cáo bài đăng Đã đăng Tháng 11 27, 2010 Em mới tham gia diễn đàn gần đây thôi em thấy rất hay rất có ích cho bản thân em giúp em rất nhiều trong công việc kiến thức cad của em được cải thiện rất rõ.em nói vòng vòng để mong được sự giúp đỡ của các bác trên đàn đó hê hê! em muốn thỉnh giáo các bác vấn đề này đây http://www.cadviet.com/upfiles/3/to44.dwg Bạn yêu cầu gì mà khoai thế. Mình viết cho bạn được thế này bạn test thử và cho ý kiến để hoàn thiện (defun c:cthua () (vl-load-com) (setq oldos (getvar "osmode")) (setvar "osmode" 0) (while (setq p (getpoint "\nPick vao vi tri thua muon trich do: ")) (command "boundary" p "") (command "area" "o" (setq el1 (entlast))) (setq of (/ (sqrt (getvar "area")) 6)) (setq ranp (car (acet-geom-vertex-list el1))) (setq pout (polar p (angle p ranp) (+ (distance p ranp) of))) (command "offset" of el1 pout "") (setq el2 (entlast)) (acet-ss-zoom-extents (acet-list-to-ss (list el2))) (setq lsp (acet-geom-vertex-list el2)) (setq ss (ssget "cp" lsp)) (setq ss (ssdel el1 ss)) (setq ss (ssdel el2 ss)) (command "zoom" "p") (command "copy" ss "" p (setq pm (getpoint "\nPick vao vi tri can chen")) "") (command "move" el1 el2 "" p pm) (command "offset" 1 el2 p "") (setq el3 (entlast)) (setq lsf (acet-geom-vertex-list el3)) (setq i 0) (command "trim" el2 "" "f") (repeat (length lsf) (command (nth i lsf)) (setq i (1+ i)) ) (command "" "") (entdel el1) (entdel el2) (entdel el3) (setq dk (getstring "\nTrich thua da hoan thanh. ban co muon tiep tuc khong: [Co/Khong]: < Co >: ")) (if (or (= (strcase dk) "C") (= dk "")) (setq p T) (setq p nil)) ) (setvar "osmode" oldos) ) 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
vietha209 1 Báo cáo bài đăng Đã đăng Tháng 11 28, 2010 Bạn sửa dòng này (setvar "OSMODE" 3) thành (setvar "OSMODE" 1). Vì (setvar "OSMODE" 3) bắt cả điểm midpoint nên đường tròn nó dính vào điểm giữa của đường thẳng. Nếu không muốn sửa dòng (setvar "OSMODE" 3) thì bạn thêm dòng (setvar "OSMODE" 0) sau dòng (setq P2 (getpoint P1 "\n Pick diem cuoi: ")) Cám ơn bạn mình làm theo bạn và đã sửa được lỗi đó rồi, cho mình hỏi thêm là tại sao biến OSMODE chỉ là để mình phục vụ bắt điểm còn trong TH này thì mình đã khai báo rất rõ điểm P4 là tâm đường tròn mà sao nó lại bắt nhầm vào điểm MID kia đượ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
lacvanhoa 0 Báo cáo bài đăng Đã đăng Tháng 11 28, 2010 Cho em đóng góp ý kiến thêm nge anh phamngoctu http://www.cadviet.com/upfiles/3/to44m.dwg 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
phamngoctukts 714 Báo cáo bài đăng Đã đăng Tháng 11 28, 2010 Cám ơn bạn mình làm theo bạn và đã sửa được lỗi đó rồi, cho mình hỏi thêm là tại sao biến OSMODE chỉ là để mình phục vụ bắt điểm còn trong TH này thì mình đã khai báo rất rõ điểm P4 là tâm đường tròn mà sao nó lại bắt nhầm vào điểm MID kia được nhỉ? Do vùng truy bắt điểm của bạn nó lớn hơn cái bán kính đường tròn bạn a. Nếu bạn zoom to lên thì không bị như thế. 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
phamngoctukts 714 Báo cáo bài đăng Đã đăng Tháng 11 28, 2010 Cho em đóng góp ý kiến thêm nge anh phamngoctu http://www.cadviet.com/upfiles/3/to44m.dwg Cái yêu cầu này của bạn thật sự rất khó vì các text đó sắp xếp không theo quy luật nào cả mình cũng đang nghĩ thuật toán đó tù trước rồi nhưng hiện giờ chưa nghĩ ra cách. Bạn chịu khó đợi 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
nguoi_tho_mo 1 Báo cáo bài đăng Đã đăng Tháng 11 28, 2010 Bạn thử lại cái này xem sao: ;; free lisp from cadviet.com (defun c:bao () (vl-load-com) (setq ss (ssget)) (if (= (tblsearch "block" "b_temp") nil) (command "block" "b_temp" "0,0" ss "") (command "block" "b_temp" "y" "0,0" ss "") ) (command "-insert" "b_temp" "0,0" "" "" "") (setq rec (acet-ent-geomextents (setq el (entlast)))) (setq p1 (car rec)) (setq p2 (cadr rec)) (setq p1 (polar p1 (+ (/ pi 4) pi) 50)) (setq p2 (polar p2 (/ pi 4) 50)) (setq p (polar p1 (/ pi 4) 25)) (command "rectang" p1 p2) (setq el1 (entlast)) (command "boundary" p "" (if (/= (getvar "cmdactive") 0) (alert "khong tao duoc duong bao ban hay kiem tra lai hinh ve") ) ) (command "erase" el1 "") (setq ss (ssget "w" p1 p2 (list (cons 0 "LWPOLYLINE")))) (command "change" ss "" "p" "c" "2" "") (setq ss (acet-ss-to-list ss)) (setq lar (list)) (foreach n ss (setq dt (dientich n)) (setq lar (append (list (list dt n)) lar)) ) (setq lar (vl-sort lar '(lambda (x y) (> (car x) (car y)) ) ) ) (setq rm (cadr (cadr lar))) (Setq ss (vl-remove rm ss)) (setq ss (acet-list-to-ss ss)) (command "erase" ss "") (acet-explode el) ) (defun dientich (name / are ob ll) (command "region" name "") (setq ob (vlax-ename->vla-object (setq ll (entlast)))) (setq are (vla-get-area ob)) (command "undo" 1) are ) Em chưa tạo được anh Tú ạ http://www.cadviet.com/upfiles/3/filemau_1.dwg 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
vietha209 1 Báo cáo bài đăng Đã đăng Tháng 11 28, 2010 Mình còn vấn đề này nữa muốn hỏi mọi người là tại sao nếu mình khai báo biến đầy đủ, ví dụ (defun C:ccc (/ P0 P1 P2) ...) thì khi theo dõi giá trị biến bằng aspect trong Visual Lisp lại không được, còn khi mình không khai báo rõ ràng (thành biến toàn cục) ví dụ (defun C:ccc () ...) thì lại sử dụng aspect đượ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
phamngoctukts 714 Báo cáo bài đăng Đã đăng Tháng 11 28, 2010 Em chưa tạo được anh Tú ạhttp://www.cadviet.com/upfiles/3/filemau_1.dwg Tạo bình thường mà bạn. Trước khi tạo bạn phải xoá bỏ cái rectang bao ngoài và cái hình sản phẩm đi không thì lisp chay sai. 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
nguoi_tho_mo 1 Báo cáo bài đăng Đã đăng Tháng 11 28, 2010 Tạo bình thường mà bạn. Trước khi tạo bạn phải xoá bỏ cái rectang bao ngoài và cái hình sản phẩm đi không thì lisp chay sai. Được rồi anh Tú ạ Bạn nào dùng thì down file của anh Tú về thử nhé Cảm ơn anh 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
phamngoctukts 714 Báo cáo bài đăng Đã đăng Tháng 11 28, 2010 Cho em đóng góp ý kiến thêm nge anh phamngoctu http://www.cadviet.com/upfiles/3/to44m.dwg Bạn dùng thử cái này. Do không tìm ra thuật toán để lọc các text không liên quan nên bạn chịu khó xoá bớt bằng tay. Anh em trên diễn đàn có ý nào hay thì sửa giúp bạn lacvanhoa nhé. (defun c:cthua () (vl-load-com) (setq oldos (getvar "osmode")) (setvar "osmode" 0) (setq p T) (while p (setq p (getpoint "\nPick vao vi tri thua muon trich do: ")) (command "boundary" p "") (command "area" "o" (setq el1 (entlast))) (setq of (/ (sqrt (getvar "area")) 6)) (setq ranp (car (acet-geom-vertex-list el1))) (setq pout (polar p (angle p ranp) (+ (distance p ranp) of))) (command "offset" of el1 pout "") (setq el2 (entlast)) (command "zoom" "e") (setq lsp (acet-geom-vertex-list el2)) (setq ss (ssget "cp" lsp '((0 . "LINE,LWPOLYLINE")))) (setq ss (ssdel el1 ss)) (setq ss (ssdel el2 ss)) (command "copy" ss "" p (setq pm (getpoint "\nPick vao vi tri can chen")) "") (setq sstext (laytext el1 (* of 6) pm)) (command "copy" sstext "" p pm "") (command "move" el1 el2 "" p pm) (command "offset" 1 el2 p "") (setq el3 (entlast)) (setq lsf (acet-geom-vertex-list el3)) (setq i 0) (repeat 2 (command "trim" el2 "" "f") (repeat (length lsf) (command (nth i lsf)) (setq i (1+ i)) ) (command "" "") ) (entdel el1) (entdel el2) (entdel el3) (command "zoom" "p") (setq dk (getstring "\nTrich thua da hoan thanh. ban co muon tiep tuc khong: : [Co]: ")) (if (or (= (strcase dk) "C") (= dk "")) (setq p T)) (if (= (strcase dk) "K") (setq p nil)) ) (setvar "osmode" oldos) ) (defun laytext ( plk kc po / elt lstt) (command "offset" kc plk po "") (setq elt (entlast)) (setq lstt (acet-geom-vertex-list elt)) (setq sst (ssget "wp" lstt '((0 . "TEXT")))) (command "undo" 1) sst ) 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
gia_bach 1.549 Báo cáo bài đăng Đã đăng Tháng 11 28, 2010 Bạn dùng thử cái này. Do không tìm ra thuật toán để lọc các text không liên quan nên bạn chịu khó xoá bớt bằng tay. Anh em trên diễn đàn có ý nào hay thì sửa giúp bạn lacvanhoa nhé.;..................... phamngoctukts thử lấy tọa độ của đường bao rồi gọi hàm ssget với tùy chọn "cp" (setq lstt (acet-geom-vertex-list plk)) (setq sst (ssget "cp" lstt '((0 . "TEXT")))) 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