Tue_NV
-
Số lượng nội dung
4.260 -
Đã tham gia
-
Lần ghé thăm cuối
-
Ngày trúng
286
Bài đăng được đăng bởi Tue_NV
-
-
Học AutoLisp
trong AutoLisp
Các bác cho hỏi xíu!
Em đang học về hàm lặp "repeat". Muốn chuyển tất cả các đối tượng em chọn về layer "2" (đã tạo sẵn)
Em xài code sau:
(defun c:q2()(setq tdt (ssget))(setq sdt (sslength tdt))(setq index 0)(repeat sdt(setq abc (ssname tdt index)index (+ 1 index))(command ".change" abc "" "p" "la" 2 ""))(princ))Nhưng khi chạy thì bị lỗi. Em biết là mình bị nhầm chỗ nào đó nhưng mò mãi không ra. Mong các bác chỉ giáo!Chạy không có lỗi bạn!
-
Cám ơn anh Mèo Mun đã quan tâm và trả lời.
Chính xác thì em vẫn đang làm như cách anh nói, nhưng do công việc phải làm cần copy text mẫu > đặt đúng vị trí > sửa text lặp đi lặp lại đến hàng chục nghìn lần trên 1 bản vẽ nên nếu có lisp như vậy bản thân em thấy rút ngắn được khá nhiều thời gian, đẩy nhanh tốc độ thực hiện công việc.
Em đã search trên diễn đàn mà không thấy có lisp tương tự hay cách làm ngắn hơn.
Mong được các anh chị giúp đỡ, nếu e có gì sai sót mong các anh chị chỉ bảo thêm.
Em xin cảm ơn.
Nếu tìm được quy luật để sửa thì sẽ rút ngắn thời gian, đẩy nhanh tốc độ làm việc.....
-
Cám ơn anh Mèo Mun đã quan tâm và trả lời.
Chính xác thì em vẫn đang làm như cách anh nói, nhưng do công việc phải làm cần copy text mẫu > đặt đúng vị trí > sửa text lặp đi lặp lại đến hàng chục nghìn lần trên 1 bản vẽ nên nếu có lisp như vậy bản thân em thấy rút ngắn được khá nhiều thời gian, đẩy nhanh tốc độ thực hiện công việc.
Em đã search trên diễn đàn mà không thấy có lisp tương tự hay cách làm ngắn hơn.
Mong được các anh chị giúp đỡ, nếu e có gì sai sót mong các anh chị chỉ bảo thêm.
Em xin cảm ơn.
Quick code
(defun c:cpt(/ ss pt1) (setq pt1 (getpoint "\nChon diem goc copy : ")) (setq ss (car (entsel "\n Chon Text:"))) (while (and ss pt1) (command "._copy" ss "" pt1 (setq pt1 (getpoint pt1 "\n diem dich copy :") )) (setq ss (entlast)) (command "_.ddedit" "L" "") ) )
- 1
-
tình hình là dễ quá nên chẳng cao thủ nào thèm giúp em ah :((
em đang có 1 bản vẽ cần pick điểm point và tâm đường tròn trong cad mà nhiểu đường tròn quá chẳng biết làm đến bao giờ :((
Tình hình là đã có bài viết rồi bạn à
Đây:
http://www.cadviet.com/forum/topic/12935-chen-diem-point-vao-tam-cua-duong-tron/
- 1
-
Nghĩ mãi chưa ra nên đưa lên đây nhờ mọi người.
Tôi có 1 list, ví dụ là:
(a b 0 0 c d e 0 0 0 f g 0 h 0 0 i j)
Làm sao để nhóm nó thành các list con, ví dụ trong trường hợp này là:
((b 0 0 c) (e 0 0 0 f) (g 0 h) (h 0 0 i))
....
Xin góp thêm đoạn code nữa :
(defun Kq (lst / lst-member Len L1 res) (while (setq lst-member (member 0 lst)) (setq Len (length lst-member)) (while (= 0 (car lst-member)) (setq L1 (append L1 (list (car lst-member)))) (setq lst-member (cdr lst-member)) ) (if lst-member (setq L1 (append L1 (list (car lst-member))))) (if (< Len (length lst)) (setq L1 (append (list (nth (- (length lst) len 1) lst)) L1 ))) (setq res (append res (list L1)) L1 nil) (setq lst lst-member) ) Res )
- 1
-
Chào các bác!
Hiện nay em đang gặp vấn đề về vẽ cái gân tròn (trong file CAD)
http://www.cadviet.com/upfiles/7/161898_giup_do_ve_gan_1.dwg
Cái gân tròn chia làm nhiều phần với đường kính trong khác nhau ( các bác xem file CAD giùm em)
em phải vẽ để cắt CNC nhưng mà nhiều đường kính trong qua em vẽ không nổi. Mong các bác giúp đỡ em.
em cảm ơn!
P/S: Lần đầu em đăng bài có sai sót các bác chỉnh giúp
Bạn cũng có thể dùng lệnh REgion và lệnh Subtract
Subtract : Region hình tròn lớn trừ Region hình tròn nhỏ và trừ các Region đường gân
- 1
-
Việc vẽ tấm đan BTCT tưởng chừng đơn giản nhưng cũng mất khá nhiều thời gian với nhiều loại có kích thước khác nhau và cả việc thống kê thép của nó.
Xin nhờ các bạn giúp mình tạo 1 lisp vẽ được tấm đan 1 cách nhanh nhất
Có thể có các dòng nhắc là
1. Chiều dài
2. Chiều rộng
3. Chiều dày
4. Thép chịu lực: số thanh, số lớp thép
5. Thép cấu tạo: số thanh, số lớp thép
6. Thép móc cẩu: số thanh
Việc viết Lisp tấm đan BTCT tưởng chừng đơn giản nhưng cũng mất khá nhiều thời gian ^_^
- 2
-
Bác nào đã từng tạo được Dynamic Block bằng dòng lệnh chưa?
Block này phải có ít nhất 1 tham số và cách hoạt động của nó (Paramater & Action).
Chỉ giúp mình với, code bằng vba/net đều được.
Bác tham khảo:
http://www.cadviet.com/forum/topic/63839-thao-luan-tao-dynamic-block-block-dong-bang-lisp/
- 1
-
Chào các bạn,
Nhờ các bạn giúp mình làm một lisp biến Spline thành Polyline với khoảng cách các đỉnh bằng nhau theo kích thước người dùng nhập vào, nội dung lisp như sau:
+Chạy lisp
- Lisp yêu cầu chọn spline cần chia
+Chọn spline (xem lưu ý bên dưới)
- Lisp yêu cầu nhập khoảng cách giữa các đỉnh
+Nhập số giá trị độ dài các đỉnh (ví dụ: 1750 như file đính kèm)
- Lisp sẽ tự động chuyển spline gốc thành polyline theo yêu cầu như hình minh họa bên dưới
Lưu ý:
Điểm bắt đầu chia spline có thể xác định bởi vị trí chuột chọn vào đường spline đó:
Ví dụ: nếu điểm chọn spline gần điểm A thì nó bắt đầu chia đường 1750 từ A cho đến B (phần thừa sẽ ở phía Điểm B và ngược lại).
File cad minh họa
http://www.cadviet.com/upfiles/7/1969_spline_to_polyline.dwg
Trân trọng cảm ơn!
Bạn chạy thử
(defun Tue-list-tach (lst count / i j Lst-tinh Reslis) ;;;;;Ex: (Tue-list-tach '(1 5 4 6 3 5) 2)--> ((1 5) (4 6) (3 5)) ;;;;;;;;;(Tue-list-tach '(1 5 4 6 3 5) 3)--> ((1 5 4) (6 3 5)) ;;;;;;;;;(Tue-list-tach '(1 5 4 6 3 5) 5)--> nil (setq i 0 j 0) (while (and (< i (/ (length lst) count)) (= (rem (length lst) count) 0)) (Repeat count (setq Lst-tinh (append Lst-tinh (list (nth j lst)) )) (setq j (1+ j)) ) (setq Reslis (append Reslis (list Lst-tinh)) Lst-tinh nil) (setq i (1+ i)) ) Reslis ) (defun Tue-make-Circle (lst / tam R _col _Lay _lstphu);;;Tue-make-Layer ;;;ex: (Tue-make-Circle (list (getpoint "\nNhap tam Circle:") (getdist "Nhap R :") ) ) ;;;;;;;(Tue-make-Circle (list (getpoint "\nNhap tam Circle:") (getdist "Nhap R :") 1 ) ) ;;;;;;;(Tue-make-Circle (list (getpoint "\nNhap tam Circle:") (getdist "Nhap R :") 1 "LAY") ) (mapcar 'set '(tam R _col _Lay _lstphu) lst) (entmakex(append (list '(0 . "Circle") (cons 10 tam) (cons 40 R) ) (if _col (list (cons 62 _col)) ) (if _Lay (if (tblsearch "Layer" _Lay) (list (cons 8 _Lay)) (list (cons 8 (Tue-make-Layer _Lay _col))) ) ) _lstphu ) ) ) (defun Tue-geom-inters(e1 e2 flag / Lst_tong Lst);;;Tue-list-tach ;;; flag= 0 : acExtendNone Does not extend either object. ;;; flag= 1 : acExtendThisEntity Extends the base object. ;;; flag= 2 : acExtendOtherEntity Extends the object passed as an argument. ;;; flag= 3 : acExtendBoth Extends both objects. ;;Ex: (Tue-geom-inters (ssname (TUE-SS-ENTSEL '((0 . "*LINE,ARC,CIRCLE,ELLIPSE")) "\npick chon doi tuong thu 1 :") 0) ;;;;;;(ssname (TUE-SS-ENTSEL '((0 . "*LINE,ARC,CIRCLE,ELLIPSE")) "\npick chon doi tuong thu 2 :") 0) 0) (if (= (type e1) 'ENAME) (setq e1 (vlax-ename->vla-object e1))) (if (= (type e2) 'ENAME) (setq e2 (vlax-ename->vla-object e2))) (Tue-list-tach (vlax-invoke e1 'IntersectWith e2 flag) 3) ) (defun Tue-make-LWPLINE(lst-pt layer) (entmakex (apply 'append (cons (list '(0 . "LWPOLYLINE") '(100 . "AcDbEntity") '(100 . "AcDbPolyline") (cons 90 (length lst-pt)) (cons 8 Layer) '(70 . 0) ) (mapcar 'list (mapcar (function (lambda (a) (cons 10 a))) lst-pt) ) ;_ mapcar ) ;_ cons ) ;_ apply ) ) (DEFUN C:CHIAspl() (SETQ spl (car(entsel "\nChon Spline can chia :"))) (setq diemchia (getpoint "\nDiem bat dau chia :")) (setq kchia (getdist "\nKhoang chia :")) (if (< (distance diemchia (vlax-curve-getStartPoint spl)) (distance diemchia (vlax-curve-getendPoint spl))) (setq diemchia (vlax-curve-getStartPoint spl) HUONG T dss (vlax-curve-getendPoint spl)) (setq diemchia (vlax-curve-getendPoint spl) HUONG NIL dss (vlax-curve-getStartPoint spl)) ) (setq lst-diem (list diemchia )) (while (<= kchia (distance diemchia dss)) (setq circle (Tue-make-Circle (list diemchia kchia ) )) (SETQ GIAODIEM (Tue-geom-inters circle spl 0)) (setq diemchia1 (car GIAODIEM)) (setq diemchia2 (caDr GIAODIEM)) (IF (= (LENGTH giaodiem) 1) (setq diemchia (car giaodiem)) (progn (IF HUONG (IF (> (VLAX-CURVE-GETPARAMATPOINT SPL diemchia1) (VLAX-CURVE-GETPARAMATPOINT SPL diemchia2)) (setq diemchia diemchia1) (setq diemchia diemchia2) ) (IF (> (VLAX-CURVE-GETPARAMATPOINT SPL diemchia1) (VLAX-CURVE-GETPARAMATPOINT SPL diemchia2)) (setq diemchia diemchia2) (setq diemchia diemchia1) ) ) ) ) (entdel circle) (setq lst-diem (append lst-diem (list diemchia ))) ) (Tue-make-LWPLINE (append lst-diem (list dss)) "0") )
- 2
-
Bác hiểu lầm rồi ^^: Chủ thớt ý muốn là "Quét chọn 1 lần được nhiều đối tượng" chứ không phải là "Pick chọn từng đối tượng" . :) :)
Sao Danh Công biết các bác hiểu lầm. Tiêu đề có đề cập đến "quét" hay "pick" đâu nhỉ?? ^_^
-
Nhấn nút như ảnh thì ok rồiKhông có video. Nói về biến hệ thống thì tạm đoán: DYNPROMPT = 1. DYNMODE = 3
Hoặc lệnh dsettings:
có điều chỉ nhấn F12 thôi hì ko hiểu vì sao ko được
- 1
-
Đáng tiếc thay! Giờ có chứng cứ hẳn hoi đây
Ketxu và quocmanh xem có phải là ko được hay không?
Có thể chịu ảnh hưởng bởi biến hệ thống nào không?
Nếu không chịu ảnh hưởng của biến hệ thống nào thì thật là..... đáng tiếc!
https://www.youtube.com/watch?v=mE9IQlUekC8&feature=youtu.be
-
Tiếc là câu này e đã trả lời rất nhiều người r bác ơi ^^
Tiếc là anh đã thử mà ko được em ơi ^^
-
Tiếc là không phải như vầy.......Bạn bật F12 lên :)
Khi bật tắt F12 thì nhập giá trị Distance cho action Stretch của Dynamic Block sẽ khác nhau, tự bạn cảm nhận nhé :)
- 1
-
Bạn xem topic này thử;Mình đã xem cái mục đó rồi bạn nhưng nó ko đúng mục đích của mình, mình muốn code trong excel chạy gọi chương trình trong AutoCAD rồi nhập các số liệu từ excel vào chương trình nền như trong hình. Vì mình ko muốn thêm code lisp vào cái chương trình trong cad muốn viết 1 cái code vba ở ngoài chạy trên excel inpull các cell dữ liệu vào chương trình thiết kế
-
Ngay dưới bài viết của bạn. Các chủ đề liên quan. Tìm đọc, nghiên cứu thêm bạn nhé!
01 - AutoCAD với Excel - AutoLisp
.....
-
Mình làm bên quy hoạch, vào dự án thường hay dim chiều dài các đoạn cống, trong đó gồm: chiều dài, kích thước và độ dốc.
mình muốn dim 1 loạt các cống, thường các cống có kích thước giống nhau, chỉ có độ dốc là khác. mính muốn tạo 1 dimension, có độ dốc giống, rồi dùng lisp để tách phần độ dốc ra 1 phần riêng để tiện chỉnh sửa. chứ để trong 1 dimension thì chỉnh sửa hơi khó.
viết hơi dài dòng, hi vọng mình viết mọi người dễ hiểu vvv
Upload bản vẽ mẫu lên đi bạn
-
Chưa hiểu bác dùng pm gì để chuyển.Bác dùng lisp sau đã chuyển bằng ProgeCad xem có đọc được không?
Lênh ANLAY
-
Các anh cho em hỏi: Quick Select có chế độ lưu lại lựa chọn thông số đối tượng như lệnh Filter không ạ. Chứ em chọn 1 lần , rồi em muốn chọn lần 2 thì lại phải điền các thông số như cũ, khá mất công ạ.
Nếu được thì mong anh Tue bớt chút thời gian viết 1 đoạn lisp được không ạ. :)
1./ QSelect không có chế độ lưu lại như lệnh Filter
2./ Quick Select rất đồ sộ. E là chỉ sử dụng thôi, Viết không nổi :lol:
-
Dòng command báo như sau:
Khi em bóc thép sàn, thì em cần lấy cả chiều dài (length *line); chiều dài khoảng rải (text dimension).
Còn đường kính và khoảng cách giữa các thanh tùy đơn vị thiết kế mà nằm trong Attribute (value attribute) hoặc bằng text.
File mình chạy không có lỗi. Có lẽ down về lỗi gì chăng?
Em down load file này về dùng thử nhé!
- 1
-
Cảm ơn A Tuệ đã phản hồi.
Em vừa kiểm tra nhưng lisp không chạy? Em cũng chưa hiểu tại sao.
Và em hơi tham vọng tí. Em muốn lấy thêm của giá trị của Attribute nữa ạ, Anh xem giùm Em.
Khi chạy thì command báo gì?
Copy dòng command báo khi chạy Lisp lên đây nhé
ATTribute có nhiều Tagstring trong đó, muốn xuất ATTring nào?
Việc xuất ATT có lẽ ko cần thiết bởi có lệnh ATTout làm việc này rồi
-
Của em đây:
(defun C:tt(/ lst fn fw i j d) (princ "\nChon cac Text/Mtext/Dimension can xuat ra file...") (setq lst (mapcar 'entget (acet-ss-to-list (ssget '((0 . "*TEXT,DIMENSION,*LINE"))))) fn (getfiled "Chon file de save" "" "csv" 1) fw (open fn "w") i 0 j 0 d 0) (foreach n lst (princ (cond ((wcmatch (cdadr n) "*TEXT")(strcat (acet-dxf 1 n) ";Text" (itoa (setq i (1+ i))) "\n")) ((= (cdadr n) "DIMENSION")(strcat (if (= (acet-dxf 1 n) "")(rtos (acet-dxf 42 n))(acet-dxf 1 n)) ";Dim" (itoa (setq j (1+ j))) "\n")) ((wcmatch (cdadr n) "*LINE") (strcat (rtos (vlax-curve-getdistatparam (cdar n) (vlax-curve-getendparam (cdar n))) ) ";*Line" (itoa (setq d (1+ d))) "\n")) ) fw ) ) (close fw) (command "._ai_editcustfile" fn))
- 1
-
Vâng .. tại vì trong đám lẫn lộn mà mình chọn đó nó vừa có above và below nên nếu mình manual mà chọn above hết hoặc below hết thì lại không đạt được mục đích ạ. Vả lại các dim này nó nghiêng đủ các góc chứ không đơn thuần theo x, y . nên mình cũng không biết cái nào below hay above ngay từ đầu.
Có thể dùng Quick select chọn Dim nào là "above", dim nào "below" mà bạn!
- 1
-
nếu dùng lệnh cad thì phải break xong chọn đường line đó rồi chọn nét đứt, do số lượng nhiều nên nếu dùng lệnh như vây rất lâu, nên mình viết cái ý tưởng nhờ ae nào rành list viết hộ
Đây bạn!
Góp ý cho lần nâng cấp CADViet tháng 9/2017
trong Góp ý xây dựng
Đã đăng · Trả lời báo cáo
Quả thực em thấy giao diện nhợt nhạt như thế nào ấy, không đậm và rõ như hồi xưa