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

thiep

Thành viên
  • Số lượng nội dung

    514
  • Đã tham gia

  • Lần ghé thăm cuối

  • Ngày trúng

    48

Bài đăng được đăng bởi thiep


  1. 48 phút trước, LONG RUỒI đã nói:

     

    Cảm ơn bác đã trả lời. Em cũng đang làm như bác nói đấy. Khá lâu nên muốn hỏi cách tự động thay đổi bác ạ. Em cũng nghĩ rằng là không có cách nào nhưng vẫn muốn hỏi vì kiến thức mình còn hạn hẹp biết đâu thực sự lại có cách thì sao ?

    Muốn tự động thì phải viết Lisp, còn muốn làm thủ công chỉ có dùng lệnh BEDIT. Trong trường hợp này làm thủ công cũng nhanh mà bạn.


  2. Vào lúc 24/2/2020 tại 16:40, davie2557 đã nói:

    Nếu là đối tượng là line thì nó không có hiệu lực hả bạn? bạn có thể chỉnh nó lại cho nó chạy trên cả đối tượng line được không? vì mình hay dùng vẽ thép góc nên rất cần, thanks bạn nhiều.

    Lisp doubleoffset.lsp đã chỉnh sửa theo yêu cầu của @davie2557 đáp ứng các đối tượng LINE, ARC, SPLINE, ELIPPSE, CIRCLE, *POLYLINE

    5 giờ trước, tanbqtb03 đã nói:

    Dạ do e sai sót trong cách dùng ạ

    Còn phần chọn layer nhờ bác giúp thêm, thanks bác nhiều

    Chỉnh sửa theo yêu cầu @tanbqtb03: thêm hộp thoại chọn layer, đưa đối tượng doubleoffset qua layer vừa chọn trong hộp thoại

    DoubleOffset.rar


  3. 1 phút trước, tanbqtb03 đã nói:

    Dạ do e sai sót trong cách dùng ạ

    Còn phần chọn layer nhờ bác giúp thêm, thanks bác nhiều

    Ok. Thường khi dùng riêng, Thiệp đã có sẵn file Doslib (thư viện hàm) trong thư mục SUPPORT của Cad, nên khi viết lisp Thiệp viết vài code tải hộp thoại nhỏ có sẵn của Doslib để chọn 1 name trong listbox (ở đây là name_layer) .

    Nếu chưa có file Doslib, thì phải viết 1 hộp thoại để chọn layer vậy. Có ai có ý gì không?

    • Like 1

  4. 5 phút trước, tanbqtb03 đã nói:

    Hi bác nhờ bác upgarde list thêm như sau:

    1-Mình có thể tùy chọn layer khi offset được ko ạ? Chọn theo name list layer  (layer khác với layer của centerline)

    2-Và có thể tùy chọn khoảng cách offset tính từ centerline ra 02 bên ko ạ, nhập số vào trước khi offset

    Cám ơn bác nhiều ạ!

    Đối tượng được tạo ra sẽ được đặt vào layer khác do người dùng chọn trong listname_layer có sẵn phải không ? còn khoảng cách offset thì đã yêu cầu người dùng nhập rồi mà.

     

    • Like 1

  5. Một hướng khác tạo Lwpolyline có 2 mũi tên ở 2 đầu, không dùng "command":

    Quote

    ;====LISP TAO LWPOLYLINE CO 2 MUI TEN O 2 DÂU===================================|;
    (defun arrpoint    (po / PntArr x y)
      (setq    PntArr (vlax-make-safearray
             vlax-vbDouble
             (cons 0 1)
               )
      )
      (vlax-safearray-fill PntArr po)
    )
    (defun GETR (val msg / tm)
        (setq tm (getreal (strcat msg " <" (rtos val 2 4) ">: ")))
        (cond ((= (type tm) 'REAL) (eval tm))
              ((= tm nil) (eval val))
              (t
               (princ "\007 *error* Nh\U+1EADp sai lo\U+1EA1i d\U+1EEF li\U+1EC7u")
               (eval val)
              )
        )
    )
    (defun C:cwp (/ Lpo p1 p2 color obj  entCUR Lencur n pn doan)
        (setq Lpo nil
              n   0
        )
        (setq color (getvar 'CECOLOR))
        (if (eq color "BYCOLOR")
            (setq color 256)
            (setq color (atoi color))
        )
        (setq p1 (getpoint "\nStart Point : "))
        (setq Lpo (append Lpo (LIST p1)))
        (while (setq p2 (getpoint p1 "\nNext Point : "))
            (setq Lpo (append Lpo (LIST p2)))
            (GRDRAW p1 p2 color 2)
            (setq p1 p2
                  n  (1+ n)
            )
        )
        (ACET-LWPLINE-MAKE (list Lpo))
        (setq entCUR (entlast))
        (setq obj (vlax-ename->vla-object entCUR))
        
        
        (if (null warrow)
            (setq warrow 20)
        )
        (setq warrow  
              (getr warrow "\nArrowheads Size :")
        )
        (setq dis (* 2 warrow))
        (setq po1 (nth 0 Lpo)
              po2 (nth 1 Lpo)
              po3 (nth (- n 1) Lpo)
              po4 p1
        )
        (setq dis1 (distance po1 po2)
              dis2 (distance po3 po4))
        (setq Lencur (vlax-curve-getDistAtPoint entCUR po4))
        (If (<= dis dis1)
            (progn (setq po (vlax-curve-getPointAtDist obj dis))
                   (setq po (list (car po) (cadr po)))
                   (vla-AddVertex obj 1 (arrpoint po))
                   (vla-setWidth obj 0 0 warrow)      ;SetWidth SegmentIndex, StartWidth, EndWidth
            )
            (alert "\n\U+0110o\U+1EA1n th\U+1EE9 1 c\U+1EE7a Lwpolyline quá ng\U+1EAFn so v\U+1EDBi kích th\U+01B0\U+1EDBc arrow")
        )
        (setq doan (1+ n))
        (If (<= dis dis2)
            (progn (setq dis (- Lencur dis))
                   (setq po (vlax-curve-getPointAtDist obj dis))
                   (setq po (list (car po) (cadr po)))
                   (vla-AddVertex obj doan (arrpoint po))
                   (vla-setWidth obj doan warrow 0)
            )
            (alert
                (strcat
                    "\n\U+0110o\U+1EA1n th\U+1EE9 "
                    (itoa doan)
                    " c\U+1EE7a Lwpolyline quá ng\U+1EAFn so v\U+1EDBi kích th\U+01B0\U+1EDBc arrow"
                )
            )
        )
        (redraw)
        (princ)
    )

     

    arrow_LWP(CWP).LSP


  6. 6 phút trước, ndtnv đã nói:

     

    Test thử thì thấy có tình trạng như trên

    Có lẽ lỗi do bắt điểm nhưng xem code thì không hiểu tại sao. Sửa thế này và test nhiều lần nhưng chưa  thấy lỗi xảy ra

    Tìm đến đoạn này và thêm như sau:

    ( t (command "u" (polar p1 (angle p1 p0) asize)
                          "w" (/ asize 3) 0.0 "none" p1 ""))

    Hi bác ndtnv, Thiep đọc lisp này thấy nó dư ra nhiều đoạn mã so với yêu cầu. Theo tôi, nếu thấy lỗi đoạn này thì có thể bỏ bớt đi đoạn yêu cầu người dùng về chiều dày lwpolyline cũng được.

    • Vote tăng 1

  7. Hung_EL: "Lỗi: sau khi dùng lisp chuỗi mất kỹ tự cuối cùng"

    Đụng đến Mtext thật không dễ chút nào. Lisp của Tue_NV còn thiếu nhiều trường hợp xảy ra trong Mtext, Thiệp gửi lisp này các bạn xem:

    http://www.cadviet.com/upfiles/7/11110_tra_font_mtext.lsp

    (defun acet-mtext-format-bite (str / a f1 n)

    (setq a (substr str 1 2)
    n 0
    )
    (cond
    ((or (= "{" (substr str 1 1))
    (= "}" (substr str 1 1))
    ) ;or
    (setq f1 (substr str 1 1)
    str (substr str 2)
    ) ;setq
    ) ;cond #1
    ((or (= "\\P" a)
    (= "\\~" a)
    )
    (setq f1 (substr str 1 2)
    str (strcat " " (substr str 3))
    n -1
    )
    ) ;cond #2
    ((or (= "\\{" a)
    (= "\\}" a)
    (= "\\O" a)
    (= "\\L" a)
    (= "\\S" a)
    ;(= "\\\\" a)
    )
    (setq f1 (substr str 1 2)
    str (substr str 3)
    )
    ) ;cond #3
    ((or (= "\\A1" (substr str 1 3))
    (= "\\A2" (substr str 1 3))
    (= "\\A3" (substr str 1 3))
    ) ;or
    (setq f1 (substr str 1 3)
    str (substr str 4)
    ) ;setq
    ) ;cond #4
    ((or (= "\\f" a)
    (= "\\C" a)
    (= "\\H" a)
    (= "\\T" a)
    (= "\\Q" a)
    (= "\\W" a)
    (= "\\p" a)
    )
    (setq n (acet-str-find ";" str)
    f1 (substr str 1 n)
    str (substr str (+ n 1))
    n 0
    ) ;setq
    ) ;cond #6
    ) ;cond close
    (list f1 str n)
    ) ;defun acet-mtext-format-bite
    (defun acet-mtext-format-extract (str / lst raw len pos frmt flst a n j lst2)
    (setq lst (list "{" "}" "\\P" "\\~" "\\{"
    "\\}" "\\O" "\\L" "\\S" "\\A1"
    "\\A2" "\\A3" "\\f" "\\C" "\\H"
    "\\T" "\\Q" "\\W" "\\p"
    ) ;list
    raw ""
    len (strlen str)
    pos 0
    ) ;setq
    (while (> (strlen str) 0)

    (setq lst2 (mapcar '(lambda (x) (acet-str-find x str)) lst)
    lst2 (mapcar '(lambda (x)
    (if x
    (list x)
    x
    )
    )
    lst2
    )
    lst2 (apply 'append lst2)
    j (apply 'min lst2)
    ) ;setq
    (if (/= j 0)
    (progn
    (setq raw (strcat raw
    (substr str 1 (- j 1))
    )
    str (substr str j)
    a (acet-mtext-format-bite str)
    ;; (list format str offset)
    frmt (car a)
    str (cadr a)
    n (+ pos j)
    pos (+ pos
    j
    (caddr a)
    (- (strlen frmt) 1)
    )
    frmt (list frmt n)
    flst (cons frmt flst)
    ) ;setq
    (setq n (+ (length lst) 10)) ;get out of inner loop
    ) ;progn
    (setq raw (strcat raw str)
    str ""
    ) ;setq then get out
    ) ;if

    ) ;while
    (list raw (reverse flst))
    ) ;defun acet-mtext-format-extract
    (vl-load-com)
    (defun c:ctg (/ doc sset chuoi ch lst Lst_str str_new)
    (setq ss (ssget '((0 . "MTEXT"))))
    (setq doc (vla-get-activedocument (vlax-get-acad-object)))
    (vlax-for x (setq sset (vla-get-activeselectionset doc))
    (setq chuoi (car(acet-mtext-format-extract (vla-get-textstring x))))
    (vla-put-textstring x chuoi)
    )
    (vla-delete sset)
    (princ)
    )

     

    Sorry, lâu ngày vô cadviet nên khi đưa lisp vào nó như vậy


  8. Hóng từ lâu lâu mà em cứ nghĩ lỗ khoan như kiểu lỗ khoan địa chất công trình cầu < Em bên cầu cống ý mà ? > Maf bác #Thiếp , ko lẽ  bác sinh năm 66 ^^. 

    ĐCCT thì gọi là hình trụ hố khoan, còn bên ĐC khoáng sản gọi là thiết đồ LK

    @ Danh Cong, Thiep đã ở trên Earth được 1/2 thế kỷ rồi đó

    • Vote tăng 1

  9. Dùng lisp này, bạn chỉ cần select một vài đối tượng (contour) muốn "ẩn" dưới Wipeout, thì tất cả các đối tượng cùng lớp với contour này sẽ "ẩn" dưới Wipeout.

    Lệnh là MDO

     

    ;;; Lisp draworder các dôi tuong cùng layer back Wipeout
    ;;; Update from lisp by RenderMan 2011 (Thank RenderMan AUGI)

    (defun DXF (code en) (cdr (assoc code (entget en))))
    ;;;------------------------------------------------
    (defun c:MDO (/ ss entlist layerList)
    (vl-load-com)
    (setq ss (ssget))
    (setq entlist (acet-ss-to-list ss))
    (setq layerList (mapcar '(lambda (x) (dxf 8 x)) entlist))
    (setq layerList (ACET-LIST-REMOVE-DUPLICATES layerList nil))
    (if ai_draworder
    (foreach lay layerList
    (if (null (ACET-LAYER-LOCKED lay))
    (progn (sssetfirst nil (ssget "_x" (list (cons 8 lay))))
    (ai_draworder "_Back") ;"_front"
    )
    (prompt
    (strcat "\n** Layer not found, or locked: \"" lay "\" ** ")
    )
    )
    )
    (prompt "\n** \"ai_draworder\" is not defined, reload express tools ** "
    )
    )
    (princ)
    )

  10. Tặng bạn một dấu -. Như tôi thì tôi còn chưa biết thiết đồ lk nó là cái j để mà hóng hớt. Tương tự rất nhiều người khác trên CV

    Chỉ người trong ngành địa chất mới hiểu thôi Ketxu ạ.

    Theo đơn đặt hàng, Thiệp đã tạo rất nhiều lisp vẽ thiết đồ LK. Tốn nhiều thời gian thôi, chứ không khó.

    • Vote tăng 1

  11. các anh diễn đàn giúp em mở file này với, không hiểu sao mở ra mà không thấy gì, dung lượng vẫn còn, cảm ơn cả nhà nhiều. file em đính kèm đây

    :http://www.cadviet.com/upfiles/6/106712_3_mbkc.dwg

    Bạn HoangHiep,

    Bạn dùng dùng lệnh hơi dài dòng này: (ACET-SS-VISIBLE (ssget "X") 0) 

    và ra được như thế này:

    http://www.cadviet.com/upfiles/6/11110_106712_3_mbkc.dwg


  12. Lưu ý là không dùng để làm việc nhé vì các lý do sau:

    • cái này chỉ code ra để test thôi
    • dùng nhiều event và các hàm phức tạp nhưng ko bẫy lỗi -> có thể crash AutoCAD bất cứ lúc nào
    • Cái này viết bằng .NET, lisp chắc ko viết được do 1 số API ko support cho lisp. Bạn nào có hứng thú thì cùng thảo luận

    83237_cv_1.gif

     

    Here we go: http://www.mediafire.com/download/r9ufg9x1a85gmad/CADViet.zip 

    Viết code và test trên CAD 2015 (Cad14 và 16 có thể chạy được) - load vào CAD bằng lệnh NETLOAD - Lệnh là : DOIT

    Qúa dữ luôn. Từ khi detailing gợi ý addvertex, Thiệp đã theo hướng này, cộng thêm lisp remove vertex sưu tầm của Thaistreet, Thiệp đã ra được lisp giống của Quocmanh chỉ khác về cung tròn ARC và hướng khi setbulge - hoặc +. Rồi đọc commend của Doan Van Ha, Thiep xử lý tiếp trường hợp các bó *LINE có trước nằm sát nhau thì BÍ, chưa biết thuật toán nào để làm được. Nếu xử lý được thì có thể giống như clip trên.

    @quocmanh

    lisp của bạn khai báo biến chưa đầy đủ, hoặc bạn để toàn cục với tên biến đơn giản nên khi dùng lisp của Quocmạnh xong rồi dùng lisp cuả Thiep thì các đối tượng đã sử lý qua lisp của quocmanh lại tiếp tục "nhảy múa" tiếp, mặc dù Thiep không đụng đến. Chưa biết lỗi gì.

    • Vote tăng 1
×