Chuyển đến nội dung
Diễn đàn CADViet

Tue_NV

Moderator
  • 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


  1.  

    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!


  2. 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.....  


  3. 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" "") 
      )
    )
    
    • Vote tăng 1

  4. 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/

    • Vote tăng 1

  5. 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
    )
    
    • Vote tăng 1

  6. 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

    • Vote tăng 1

  7. 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  ^_^ 

    • Vote tăng 2

  8. 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).

     

    1969_spline_to_polyline_1.jpg

     

    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")
     
     
     
     )
    
    • Vote tăng 2

  9. Tiếc là mod ketxu khi hướng dẫn không mở ngoặc (F12 trước khi pick vào Block) => Bật rồi mới núm. :D 

    Tiếc là mod Tue_NV pick vào block và action Stretch rồi mới F12 => Núm rồi mới bật. :D

    Đá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


  10. 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ế

    Bạn xem topic này thử;

    http://www.cadviet.com/forum/topic/4290-ung-dung-vba-automation-trong-viec-trao-doi-du-lieu-giua-excel-voi-autocad/


  11. 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


  12. 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:


  13. 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é!

    http://www.cadviet.com/upfiles/7/4652_tt.lsp

    • Vote tăng 1

  14. 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


  15. 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))
    
    • Vote tăng 1

  16. 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!

    • Vote tăng 1
×