saycaphe
-
Số lượng nội dung
46 -
Đã tham gia
-
Lần ghé thăm cuối
Bài đăng được đăng bởi saycaphe
-
-
em có câu hỏi về LISP này.
Có cách nào khi nhập lệnh, lisp hỏi tên Layer cần chọn.
Sau đó kiểm tra layer đó có tồn tại ko, nếu có thì chọn tất cả các đối tượng thuộc layer vừa nhập ạ.
Em cảm ơn ạ!
-
Hì.
Các bác có ý tưởng gì giúp em với ạ :)
-
Các bác giúp em bài này với ạ :)
Các đường kích thước xuất ra nằm đè lên nhau, không thể nhìn đc.
Làm như nào để giãn cách các đường kích thước đã có,
Hoặc đo và hiển thị các đường có kích thước lớn hơn 1 đơn vị nào đó đc nhập vào, ví dụ lớn hơn 5 thì hiển thị, và ko bị chồng chéo lên nhau ạ.
Cảm ơn các bác!
-
-
Quả Lisp thô sơ này chắc chạy ngon. Nhớ move chuẩn trục Y ở 0.0 nhé. ^_^
(defun c:test (/ ss n ss1) (setq ss (ssget)) (setq n 0) (setq ss1 (ssadd)) (repeat (sslength ss) (setq ss1 (ssadd (ssname ss n) ss1)) (command "mirror" ss1 "" "0,0" "0,1" "N" "") (setq ss1 (ssadd (entlast) ss1)) (command ".PEDIT" "m" ss1 "" "j" "0.025" "" ) (setq ss1 (ssadd)) (setq n (1+ n)) ) (princ) )Bác ơi.
Lisp này, chẳng hạn mình muốn chạy lệnh qua 1 đường tự chọn(điểm đầu, điểm cuối) chứ không mặc định qua trục,thì làm sao bác.
Em thêm cái đoạn đánh dấu đỏ, mà nó chỉ mirror 1 đường, không join, rồi dừng lại.
(defun c:minj (/ ss n ss1)
(setq ss (ssget))
(setq n 0)
(setq ss1 (ssadd))
(setq stap (getpoint "\nStart point of Mirror line (line may intersect every polyline only once!): "))
(setq endp (getpoint stap "\nEnd point of Mirror line: "))
(repeat (sslength ss)
(setq ss1 (ssadd (ssname ss n) ss1))
(command "mirror" ss1 "" "stap" "endp" "N" "")
(setq ss1 (ssadd (entlast) ss1))
(command ".PEDIT" "m" ss1 "" "j" "0.025" "" )
(setq ss1 (ssadd))
(setq n (1+ n))
)
(princ)
)
Bác xem giúp em với.
Thanks :blush:
-
Để nguyên Pline sau khi join trên mặt phẳng XoY. Chạy lisp mới chọn những pline trước sau đó chọn Line // trục X với điểm bắt đầu từ trục Y trở đi để tính 1 điểm cắt với pline thôi nhé. Sau khi move hết theo trục Z xuống cách 1 khoảng 500 thì xoay toàn bộ đối tượng sau nhé. Chúc ngon miệng ^_^

(defun LM:intersections (ob1 ob2 mod / lst rtn) (if (and (vlax-method-applicable-p ob1 'intersectwith) (vlax-method-applicable-p ob2 'intersectwith) (setq lst (vlax-invoke ob1 'intersectwith ob2 mod)) ) (repeat (/ (length lst) 3) (setq rtn (cons (list (car lst) (cadr lst) (caddr lst)) rtn) lst (cdddr lst) ) ) ) (reverse rtn) ) (vl-load-com) (defun c:test2 () (setq osm (getvar "osmode")) (setvar "osmode" 0) (command "undo" "be") (princ "\nChon doi tuong: ") (if (setq ss (ssget '((0 . "LWPOLYLINE")))) (progn (if (setq line_X (car (entsel "\nChon doan thang // X: "))) (progn (setq lst_e (vl-remove-if 'listp (mapcar 'cadr (ssnamex ss)) ) ) (setq lst_pt nil) (foreach e lst_e (setq pt (LM:intersections (vlax-ename->vla-object e) (vlax-ename->vla-object line_X) acextendnone ) ) (setq lst_pt (cons (cons e (car pt)) lst_pt)) ) (vl-sort lst_pt '(lambda (e1 e2) (< (cadr e1) (cadr e2)))) ; (setq n 500) (foreach pl (cdr lst_pt) (command "move" (car pl) "" "0,0,0" (strcat "0,0,-" (rtos n 2 0)) ) (setq n (+ n 500)) ) ) ;progn line_X (princ "\nBan da khong chon doan thang // X.") ) ;if ) ;progn ss (princ "\nBan da khong chon doi tuong.") ) ;if (command "undo" "end") (setvar "osmode" osm) (princ) ) ;defunĐại ca ơi.
ý em là move từng đường 1,không kể màu, vì thực thế cứ 4 đường màu đỏ, đến 1 đường màu xanh, đấy chỉ là hình thức đánh dấu thôi, chứ ý em không phải là move màu đỏ xong, rồi move màu xanh.
Thay đổi thế nào để move theo độ tăng lên củatọa độ giao điểm của đường được chọn với các polylines.
Làm sao để chọn khoảng cách move đường trong mặt x0y theo 0z (hiện tại đang là 500) ạ
-
Lisp mirror và join thì ko cần thứ tự gì mà nó auto theo select object.
Nếu dùng 1 đường // trục X cắt các đường để sắp theo thứ tự tọa độ X từ nhỏ đến lớn cũng được ^_^
Bác ơi cái file của em đây, làm như nào hả bác?
Các frames nẳm trên mặt x0z, giờ move từng Frame (từ trong ra ngoài ) theo trục y, , mỗi đường cách nhau 500, thì làm như nào hả bác?
-
1
-
-
Cái này khoai. Đặt cho nó một quy luật nào đấy chẳng hạn. ^_^
Nhưng mà theo cái lisp của bác, nó căn cứ vào cái gì, để nó mirror and join các đường màu đỏ trước, rồi lại màu xanh hả bác?
Em đã thay hết thành màu đỏ thì nó cũng theo thứ tự tương tự :mellow: .
Chẳng hạn mình dùng 1 đường vuông góc trục Y, cắt các đường polyline.
Rồi sau đó mình dùng khoản cách từ các giao điểm, đến trục Y để xác định thứ tự thực hiện lệnh, như vậy có được không hả bác?
-
Cái này cũng đơn giản. Select những thằng pline cần move đi rôi dùng lệnh move đi 1 khoảng d nào đó. ^_^
Bác ơi.
Sao khi chạy lisp, nó Mirror, rồi join các đường màu đỏ trước, rồi đến màu xanh nhỉ.
Cũng không sao, nhưng khi em chạy list move các đường đã join, theo trục vuông góc, để mỗi đường cách nhau 1 khoảng 500, thì nó cũng move màu đỏ trước, rồi mới move màu xanh.
Như vậy thứ tự và khoảng cách bị sai.
Làm sao để move theo đúng thứ tự, từ gần tới xa trục hả bác?
-
move từng polyline hay move được tất cả các polyline, từng cái 1 , cái gần gốc trước, cái xa gốc thì move sau hả bác?
có cách nào move từng cái, theo thứ tự cách xa dần gốc tọa độ không bác? :D
-
Tuyệt vời ông mặt zời bác ơi :wub: .
Cảm ơn bác nhiều lắm hehe.
Còn 1 cái nữa, em cũng đang tìm hiểu, mà chưa biết làm sao.
Sau khi mirror và nối xong rồi. Khi đưa và 3D, đưa nó vào mặt Front, làm sao để chọn 1 đường làm gốc, rồi sau đó move các đường ngay phía sau, mỗi đường cách nhau 1 khoảng 1m chẳng hạn hả bác?
-
Em mò trên mạng, ra cái Polylines Program của Lee-Mac, nhưng cái này khi mình mirror tất cả, rồi join, thì với các đường giao nhau, nó sẽ join loạn lên, không join chuẩn các đường đối xứng qua trục Y như em cần.
http://www.lee-mac.com/polylineprograms.html#polyjoin
em mò theo kiểu thủ công như cái này, thì lượng polyline bị xót rất nhiều, vì nhiều poliline quá gần nhau, nên chọn không chuẩn :wacko: .
http://www.cadviet.com/upfiles/7/12799_123.lsp
Làm sao để mình chọn tất cả objects, rồi nó tự chạy lisp theo kiểu one by one đc các bác ơi :blush:
-
Các bác ơi.
Em có vấn đề thế này.
em có các polyline, nó cắt nhau, và khoảng cách giữa các polyline tương đối nhỏ.
Em đang tìm cách, đối với mỗi polyline, sẽ mirror qua trục Y, sau đó join 2 polyline đó thành 1( đối tượng đc chọn và đối tượng sau khi mirror).
http://www.cadviet.com/upfiles/7/12799_mirror_y_axis_and_join.dwg
Bản vẽ em gửi kèm.
Các bác xem giúp em nhé.
Cảm ơn các bác!
-
Hề hề hề.
Có thể, song tùy vào thiết kế cụ thể của bạn. Với các máy móc phức tạp thì việc làm mô phỏng hopa5t động sẽ không dễ, và dung lượng file sẽ khá lớn, yêu cầu máy tính có bộ nhớ khá lớn.
Em định mô phỏng đơn giản thôi, có khi làm 2D cũng đc, mô phỏng quá trình lăn của máy lăn ống, 3 cái trục di chuyển , rồi xuất tọa độ ra, thì làm bằng phần mêm nào đơn giản nhất vậy bác?
-
Mọi người cho mình hỏi: Dùng solidwork có thể vẽ các máy gia công cơ khí, rồi mô phỏng hoạt động, sau đó xuất tọa độ hoạt động của các trục ra được không?
Mình mới tìm hiểu về solid chưa biết mấy, hỏi kinh nghiệm các pro :)
-
chọn đc rồi thì xóa đi chứ có gì đâu
ko chọn được bác ơi, nó chỉ hiện ra <selection set: xxx> chứ nó ko có chọn.
Có nhiều cách dùng hàm để delete 1 tập hợp chọn có tên là ss:
(command "erase" ss "")
(acet-ss-entdel ss)
v.v...
Bác viết giúp em câu lệnh xoá các đường tròn đường kính <200 được ko?
-
Các bác giúp em với, em muốn viết câu lệnh xoá toàn bộ các đường tròn có D<200, em viết lệnh chọn các đường tròn có R<100, câu lệnh như sau:
(ssget "X" ' ((0 . "CIRCLE") (-4 . "<") (40 . 100.0)))
thì trả về kq như thế này
<selection set : xxx> với xxx là 1 ký tự gì đó.
Các bác chỉnh giúp em với.
Thanks
(ssget "X" ' ((0 . "CIRCLE") (-4 . "<") (40 . 100.0)))<Selection set: 1f2>(ssget "X" ' ((0 . "CIRCLE") (-4 . "<") (40 . 100.0)))<Selection set: 1f2>(ssget "X" ' ((0 . "CIRCLE") (-4 . "<") (40 . 100.0)))<Selection set: 1f2> -
File bạn gửi chẳng có ý nghĩa gì cho việc viết lisp cả :wacko:
Trong bản vẽ mình up lên đó, có cái phần ghi tên và mã vật tư đó, hình như đc tạo bằng dynamic block, mình có cách nào xuất nội dung của nó ra text đc các bác ơi :(.
Bác bác giúp mình nhé.
Thanks:x
-
File bạn gửi chẳng có ý nghĩa gì cho việc viết lisp cả :wacko:
Đối với bản vẽ mình up lên thì phài explode all, rồi sau đó select all, rồi mới thực hiện lisp của bác Doan Van Ha được.
Cho mình hỏi thêm : khi thực hiện lệnh explode all, đối với những bản vẽ nhiều chi tiết, sẽ hiện ra cảnh báo :autocad alert "this operation may take a long time..." rồi lựa chọn yes or no, vậy có cách nào mặc định lựa chọn yes or no khi gặp những trường hợp như vậy ko?
-
Lisp xuất toàn bộ Text/Mtext trên bản vẽ ra file txt cùng tên với bản vẽ.
;Doan Van Ha - CADViet.com - Ngay 13/6/2012 ;Muc dich: Xuat tat ca *Text tren ban ve ra file txt cung ten voi ban ve. (defun C:HA( / lst fn pw) (princ "\Chon cac Text/Mtext can xuat ra file...") (setq lst (vl-remove-if 'listp (mapcar 'cadr (ssnamex (ssget '((0 . "*TEXT"))))))) (setq fn (strcat (getvar "dwgprefix") (vl-string-subst "txt" "dwg" (getvar "dwgname")))) (setq pw (open fn "w")) (foreach ent lst (write-line (cdr (assoc 1 (entget ent))) pw)) (close pw) (princ))
Cảm ơn bác nhiều lắm :D
-
-
Chào các bác.
Em nhờ các bác giúp em lisp xuất toàn bộ text của bản vẽ(em đính kèm theo) ra 1 file text có tên giống tên bản vẽ và nằm cùng thư mục với bản vẽ
Cảm ơn các bác :)
-
Chào các bác.
Nhờ các bác giúp em viết lisp làm việc như sau:
tìm trong bản vẽ 1text có nội dung "alibaba" hoặc "aladin" chẳng hạn, nếu có tồn tại từ khóa như trên thì thêm tên của bản vẽ vào 1 cái list là abc.txt hoặc thêm abc vào trước tên của bản vẽ, rồi save lại và thoát ra.
Em trình bày hơi rối rắm 1 tí. Các bác giúp em nhé.
Cảm ơn các bác nhiều ^^
-
Chào các bác.
Em muốn viết 1 chương trình điều khiển Autocad như sau:
-Load 1 list bản vẽ, giống playlist của wmp
- Mở từng bản vẽ và gửi 1 lệnh đến autocad
- Đóng bản vẽ lại.
Em mới mày mò đc cái code vb6 mở các file trong thư mục, mà ko biết cách save thành list, và mở& gửi lệnh đến từng bản vẽ như thế nào.
Mong các bác chỉ giáo.
Cảm ơn các bác nhiều


Lisp chọn tất cả các đối tượng thuộc 1 layer !
trong AutoLisp
Đã đăng · Trả lời báo cáo
trả lời chất quá bác :).
Bác cho em xin mấy cái lisp như vậy với ạ ;)
Em cảm ơn!