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

Duong Nhat Duy

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

    718
  • Đã tham gia

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

  • Ngày trúng

    174

Bài đăng được đăng bởi Duong Nhat Duy


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

    Em đang muốn đổi chữ D13 thành D13(test) hàng loạt nhưng dùng lệnh find thì bị lỗi vậy, thì có cách nào đổi nhanh (không vào block editor để sửa trực tiếp) không bác?
     vì có nhiều block khác nhau muốn replace chữ đó, nếu vào từng block để sửa thì lâu và dễ bị sót

    Vấn đề mình đã nói rồi đó, nó do cụm text D13 trong block của bạn bị "lỗi", và sửa bằng cách click đúp vào rồi thoát ra. Mình đã thử trên máy mình, sau khi làm vậy thì có thể Find, Replace từ bên ngoài Model bình thường. Còn lý do vì sao nó lại lỗi như vậy thì chỉ có người tạo ra nó mới biết được thôi :v


  2. 23 giờ trước, Tuan1012 đã nói:

    Nhờ các bác giúp em có cách nào thay thế được text trong block động không, em dùng Find của cad nhưng chỉ thay thế được hiển thị bên ngoài, khi vào chỉnh sửa block thì vẫn là nội dung text cũ, file đính kèm khi dùng Find em để ở bên dưới để các bác hiểu rõ vấn đề gặp phải (em đã sử dụng find từ D13 thành D13(test))

    Bạn vào trong Block Editor, Click đúp vào text D13, không cần sửa gì cả, rồi thoát Block Editor ra (có save) là mọi thứ bình thường. Còn vì sao nó lại lỗi thế thì mình chịu :v


  3. 2 giờ trước, Hungtakigami đã nói:

    e ko gửi dc ảnh lên ko hiểu sao bị lỗi.

    Ví dụ e có 1 đoạn line  nghiêng 45 độ(có line 50 độ). muốn chèn lỗ phi 10 vào 2 đầu đoạn  line đó cách 1 khoảng là 5mm, và hướng theo line đó.

    e sử dụng IDT thì chỉ cho ra 1 đầu của đoạn thẳng, còn đầu còn lại thì ko dc. tại có nhiều line  như vậy nên ko biết lisp của mình có cách nào ko nhỉ.

    hiện tại e dùng IPL để vẽ tâm đường tròn tại 2 đầu của line, rồi tiếp tục dùng IPL chèn phi10 vào tại giao điểm của đường tròn vs đường line, sau đó xóa phi 10 ở 2 đầu line. thấy hơi cực ạ.

    Bạn xem gửi file được không ?


  4. 1 giờ} trướ}c, Hungtakigami đã nói:

    Trong lenh IDT có chọn được nhiều đường dẫn cùng 1 lúc ko bác. lúc dùng lênh ITL thiết lập insert 2 bên rồi mà vô lệnh IDT ko sử dụng đc, chỉ insert 1 bên. bác xem có đúng ko ạ. 

    - IDT trên nhiều đường dẫn: cái này mình thấy hơi ít ứng dụng, bạn chịu khó đợi đến khi có nhiều nhiều người cùng góp ý phần này nhé :D

    - IDT insert 2 bên chỉ nhận khi đã nhập khoảng cách offset trong ITL nhé bạn, nếu đã nhập thì có thể do lỗi, bạn vui lòng gửi kèm hình ảnh.


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

    ý là tại sao nó lại báo lỗi đó trong khi mình có khai báo (vl-load-com) rồi ấy ạ, chứ thật sự thì lisp loại này mình cũng tìm khắp rồi mà không có nên tự mày mò viết thử.

    Bạn làm ơn đọc lại cmt đầu tiên giúp mình, mình không viết thừa thiếu cái gì đâu "AI nó sẽ viết linh tinh theo kiểu tự nghĩ ra những hàm không tồn tại và chưa bao giờ tồn tại trong thư viện lisp". Bạn có thể hình dung trong excel, giả sử muốn tính tổng 1 cột, nhưng chỉ tính tổng các số dương, thì AI nó nghĩ ra 1 cái hàm =SUMTONGCACSODUONG(), trong khi excel không hề có hàm này, vậy thì làm sao chương trình nó chạy được. Cụ thể trong code của bạn có rất nhiều hàm không tồn tại: vla-get-ActiveAnnotationScale, vla-AddScale, vla-DeleteScale

    • Like 1

  6. Nhìn qua mình đoán là code bằng AI, nói chung code lisp AI (bản free nhé chứ tính phí thì mình chưa dám chắc 100%) tính đến thời điểm hiện tại là 1 điều gì đó khá bất cập.

    Tại sao nói bất cập, đấy là khi gặp 1 đề bài tương đối khó hoặc không đại trà trên mạng, AI nó sẽ viết linh tinh theo kiểu tự nghĩ ra những hàm không tồn tại và chưa bao giờ tồn tại trong thư viện lisp. Nó kiểu như bạn giải 1 phương trình khó, dù không hiểu gì nhưng bạn vẫn viết linh tinh cho đỡ trắng giấy, hay kể cả là chèn thêm lời bát hát vào vậy. Thật sự dùng từ bất cập thì hơi nhẹ, đáng ra phải là nực cười, nhảm nhí :)

    Đối với mình, khi gặp phải những trường hợp như này, mình sẽ lặng lẽ thoát chatgpt ra chứ không nên mất công cãi nhau với nó làm gì, và chịu khó tìm nguồn trên web thôi !


  7. 56 phút trước, flashygrandpa đã nói:

    cái này gần giống cái mình cần rồi. Bạn có thể fix 1 chút là thêm dấu + - trước số cao độ với bỏ tự động thêm số thập phân đằng sau chữ ko ạ? trong block gốc của mình đã có dấu chấm ngắt thập phân rồi

    Trong lệnh TCS có hết rồi bạn nhé: Tick ô thêm dấu +, phần thập phân nhập 0.

    • Like 1

  8. Bản cập nhật v1.04 (09/09/2025):

       + Tích hợp thêm MLINE vào các lệnh tính chiều dài

       + Tích hợp thêm SOLID vào các lệnh tính diện tích

       + Thêm lệnh: TRF - Tra Field đang liên kết với những đối tượng nào. Có thể ứng dụng để tra Field trong các bản vẽ bất kỳ, không nhất thiết phải là Field tạo từ lisp này

    Chi tiết xem trên bài viết đầu topic.

     


  9. 1 giờ} trướ}c, amateurday đã nói:

    Khi load và chạy nó bị lỗi này. Nhìn hộp thoại thì có vẻ giống mong muốn của tớ rồi, vì chưa chạy được nên không rõ text đánh stt bên layout là text, mtext hay block att nữa.

    Khi load lên bạn có thấy thông báo mã máy không, có thì gửi cho mình, còn không thì khả năng là mình chịu thua vì lỗi này đến h vẫn chưa khắc phục được.


  10. 3 giờ trước, amateurday đã nói:

    Hình như còn tình huống stt nữa là ký hiệu bản vẽ ở layout, 1 layout 1 bản vẽ. Xét trường hợp không dùng sheet set, liệu có cập nhật được không bạn nhỉ? Stt dạng xxx-01 tăng dần theo layout trái sang phải, và được chọn những layout nào cần đánh số ấy.

    Cái này nó nằm trong 1 lisp khác của mình, tạm thời cũng chưa có time làm hướng dẫn, có gì bạn tham khảo trong này nhé: https://drive.google.com/drive/u/1/folders/1hOJA0p93CXBpMehak0SDRQuf_oJJVIG4

    • Vote tăng 1

  11. Vào lúc 22/8/2025 tại 19:59, mr.thanh2610 đã nói:

    Cảm ơn bạn đã chia sẻ,  bạn có thể thêm tính năng chọn Block Att mẫu , Text hoặc Mtext theo cùng layer để dễ quét vùng chọn không (vì đôi lúc rất nhiều đối tượng chọn sẽ mất thời gian), cảm ơn

    Nhiều đối tượng thì bạn chủ động quản lý chúng bằng layer nhé, trước khi STT thì bạn layiso là xong.


  12. Vào lúc 22/8/2025 tại 17:11, GIRLXAYDUNG đã nói:

    cảm ơn bạn đã chia sẻ, nhưng mình làm kiểu mũi tên nhưng đã thay đổi font chữ mảnh hoặc đậm luôn rồi nhưng đầu nhọn nó không ở giữa đường line nhỉ, nó lệch một bên, bạn có thể cho mình biết lý do tại sao không ạ, cảm ơn

    Lisp của mình chỉ cho phép tạo các Linetype đơn giản, trường hợp phức tạp bạn phải tự chỉnh sửa file .lin (bạn có thể chỉnh từ file .lin mà lisp tạo ra).

    Giả sử trong trường hợp này thì bạn phải chỉnh điểm đặt text theo phương Y: 

    *Ong D110,
    A,15,-1,["D110",Standard,s=1,x=0,y=-0.5,u=0],-3.8333

    Bạn cần vừa sửa vừa thử load lại bằng lệnh cad cho đến khi đúng ý là được

    • Vote tăng 1

  13. Vào lúc 29/7/2025 tại 13:51, mourison1993 đã nói:

    Mình có lisp sưu tầm trên mạng và nhờ ChatGPT chỉnh sửa dần cũng được 90% theo ý muốn rồi, còn 1 vấn đề nhỏ là khi rải lý trình trên tuyến thì cọc đầu và cọc cuối không có, mình muốn thêm vào cọc đầu là Km0+000 và cọc cuối sẽ theo chiều dài của đường Polyline, rất mong các bác giúp e chỉnh sửa thêm cho hoàn thiện ạ, e cám ơn!

    Bạn tham khảo lisp này của mình nhé, lệnh ME2 để rải cọc tự động, IDT để rải thủ công (trước đó cần ITL, tick ô chèn lý trình, có thể bỏ tick luôn ô block đi cũng được)

     

    • Vote tăng 1

  14. 15 giờ trước, WOOFER đã nói:

    Mình muốn hỏi, trong ảnh có phải anh dùng lệnh LEADER + chèn block để đối tượng không. Trường hợp của em dùng lệnh MultiLeader có content là block att thì lệnh không hỗ trợ đối tượng trên. Anh có thể cho mình thêm giải phải được không. Lý do mình dùng lệnh MultiLeader là nó có cài được Style, cài sẵn nhiều loại dùng thuận tiện hơn lệnh Leader. Bác có thể chia sẻ cách dùng lệnh Leader để vẽ với nhiều tỉ lệ scale đc không

    MULILEADER BLOCK.dwg

    Trong ví dụ là mình dùng Block Att bạn nhé, Mleader chỉ tiện khi bạn cần thể hiện 1 nội dung thôi, trường hợp nhiều hơn như ví dụ trên thì Block Att là bắt buộc, bạn có thể tham khảo ở file cad trong link này: https://drive.google.com/drive/u/1/folders/1SLT-Ol0M2y0zEY0szCkGJfA8rL9O-hsv


  15. 1 giờ} trướ}c, 0908494509 đã nói:

    Với LISP này mình chủ yếu dùng là lệnh TH1 thì thấy đang hiện "Handle" trên các đối tượng mình chọn ( bạn có thể ko cần ghi lên đối tượng như trên)

    Còn bảng table thì kích thước nhỏ (cái này mình có thể tăng kích thước với tỷ lệ bản vẽ)

    Thanks bạn đã phản hồi

    Về phần Handle bạn đè đoạn code này vào đoạn code cũ

    (defun C:th1 ( / AREA EGLST ELST ENT1 HANDLE HANDLE-F LAYER LEN LST LST_TABLE LST_TK ORDER PT PT_BANG SS STR_AREA STR_LEN STT)
      (setvar "CMDECHO" 0)
      (setvar "DIMZIN" 0)
      (setq elst (vl-remove-if 'listp (mapcar 'cadr (if (ssget) (ssnamex (ssget "_P"))))))
      (setq elst (vl-remove-if-not '(lambda (e)
    				  (or (not (vl-catch-all-error-p (vl-catch-all-apply '(lambda () (vlax-curve-getDistAtParam e (vlax-curve-getEndParam e))))))
    				      (not (vl-catch-all-error-p (vl-catch-all-apply '(lambda () (vla-get-Area (vlax-ename->vla-object e))))))
    				      (wcmatch (cdr (assoc 0 (entget e))) "HATCH,REGION")
    				      )) elst))
      (if elst
        (progn
          (setq lst
    	     (list
    	       "U:tren->duoi"
    	       "D:duoi->tren"
    	       "L:trai->phai"
    	       "R:phai->trai"
    	       "H:ma-handle"
    	       "C:thu-tu-chon"
    	       ))
          (setq order (setq 3DUY-TDT-CD-ORDER (ND:get_key lst (if 3DUY-TDT-CD-ORDER 3DUY-TDT-CD-ORDER "H:ma-handle") "Th\\U+1EE9 t\\U+1EF1 s\\U+1EAFp x\\U+1EBFp")))
          (if (not (setq pt_bang (getpoint "\nCh\\U+1ECDn \\U+0111i\\U+1EC3m xu\\U+1EA5t b\\U+1EA3ng: "))) (setq pt_bang (car (cdr (grread t)))) t)
          )
        )
      (vla-startundomark (vla-get-activedocument (vlax-get-acad-object)))
      (setq ss (ssadd))
      (setq lst_tk nil)
      (foreach ent elst
        (setq eglst (entget ent))
        (setq handle (cdr (assoc 5 eglst)))
        (setq pt (ND:bb_centroid ent))
        (if (= 3DUY-TDT-LAYER-CUR 1)
          (setq layer (getvar "CLAYER"))
          (setq layer (cdr (assoc 8 eglst)))
          )
        (if (= 3DUY-TDT-FIELD 1)
          (progn
    	(setq handle-f (strcat "%<\\AcObjProp Object(%<\\_ObjId " (itoa (vla-get-ObjectID (vlax-ename->vla-object ent))) ">%).Handle>%"))
    	(if (= (setq len (ND:TDT_convert-field ent "Length" (ND:TDT_fieldfmt "Length"))) "")
    	  (setq len (ND:TDT_convert 0 "Length"))
    	  )
    	(if (= (setq area (ND:TDT_convert-field ent "Area" (ND:TDT_fieldfmt "Area"))) "")
    	  (setq area (ND:TDT_convert 0 "Area"))
    	  )
    	)
          (progn
    	(setq handle-f handle)
    	(setq len 0)
    	(setq area 0)
    	(vl-catch-all-error-p (vl-catch-all-apply '(lambda () (setq len (vlax-curve-getDistAtParam ent (vlax-curve-getEndParam ent))))))
    	(vl-catch-all-error-p (vl-catch-all-apply '(lambda () (setq area (vla-get-Area (vlax-ename->vla-object ent))))))
    	(setq len (ND:TDT_convert len "Length"))
    	(setq area (ND:TDT_convert area "Area"))
    	)
          )
    ;;;    (if (= 3DUY-TDT-BLOCK 1)
    ;;;      (setq ent1
    ;;;	     (ND:vla_insert
    ;;;	       3DUY-TDT-BLOCK-NAME
    ;;;	       pt
    ;;;	       layer
    ;;;	       3DUY-TDT-SCALE
    ;;;	       0
    ;;;	       (list (cons 3DUY-TDT-TAG-NAME handle-f))
    ;;;	       nil
    ;;;	       )
    ;;;	    )
    ;;;      (setq ent1
    ;;;	     (ND:mk_text
    ;;;	       handle-f
    ;;;	       pt
    ;;;	       layer
    ;;;	       (if (and (= 3DUY-TDT-AUTO 0) 3DUY-TDT-STYLE-NAME) 3DUY-TDT-STYLE-NAME (getvar "TEXTSTYLE"))
    ;;;	       (if (= 3DUY-TDT-AUTO 1) (/ (getvar "VIEWSIZE") 50) 3DUY-TDT-HEIGHT)
    ;;;	       3DUY-TDT-WIDTH
    ;;;	       0
    ;;;	       acAlignmentMiddleCenter
    ;;;	       nil
    ;;;	       )
    ;;;	    )
    ;;;      )
    ;;;    (if (= 3DUY-TDT-FIELD 1) (setq ss (ssadd ent1 ss)))
        (setq lst_tk (append lst_tk (list (list pt handle handle-f len area))))
        )
    ;;;  (if (and (= 3DUY-TDT-FIELD 1) (> (sslength ss) 0)) (vl-cmdf "_.UPDATEFIELD" ss ""))
      (if lst_tk
        (progn
          (setq lst_tk
    	     (cond
    	       ((wcmatch order "U*") (vl-sort lst_tk '(lambda (a b) (> (cadr (car a)) (cadr (car b))))))
    	       ((wcmatch order "D*") (vl-sort lst_tk '(lambda (a b) (< (cadr (car a)) (cadr (car b))))))
    	       ((wcmatch order "L*") (vl-sort lst_tk '(lambda (a b) (< (car (car a)) (car (car b))))))
    	       ((wcmatch order "R*") (vl-sort lst_tk '(lambda (a b) (> (car (car a)) (car (car b))))))
    	       ((wcmatch order "H*") (vl-sort lst_tk '(lambda (a b) (< (cadr a) (cadr b)))))
    	       (t lst_tk)
    	       ))
          (if (= 3DUY-TDT-FIELD 1)
    	(progn
    	  (setq str_len (ND:TDT_sumfield elst "Length"))
    	  (setq str_area (ND:TDT_sumfield elst "Area"))
    	  )
    	(progn
    	  (setq str_len (ND:TDT_convert (ND:TDT_sumvalue elst "Length") "Length"))
    	  (setq str_area (ND:TDT_convert (ND:TDT_sumvalue elst "Area") "Area"))
    	  )
    	)
          (setq lst_table (list (list "B\\U+1EA2NG TH\\U+1ED0NG KÊ CHI\\U+1EC0U DÀI, DI\\U+1EC6N TÍCH") (list "STT" "Chi\\U+1EC1u dài" "Di\\U+1EC7n tích")))
          (setq stt 1)
          (foreach lst lst_tk
    	(setq lst_table (append lst_table (list (list (itoa stt) (nth 3 lst) (nth 4 lst)))))
    	(setq stt (1+ stt))
    	)
          (setq lst_table (append lst_table (list (list "T\\U+1ED4NG" str_len str_area))))
          (ND:list->table-AC1
    	lst_table
    	3DUY-TDT-HEIGHT
    	(* 3DUY-TDT-HEIGHT 3.)
    	nil
    	pt_bang
    	(getvar "CTABLESTYLE")
    	(if (and (= 3DUY-TDT-AUTO 0) 3DUY-TDT-STYLE-NAME) 3DUY-TDT-STYLE-NAME (getvar "TEXTSTYLE"))
    	(getvar "CLAYER")
    	)
          (princ (strcat "\n\\U+0110ã th\\U+1ED1ng kê chi\\U+1EC1u dài, di\\U+1EC7n tích " (itoa (length lst_tk)) " \\U+0111\\U+1ED1i t\\U+01B0\\U+1EE3ng"))
          )
        (princ "\nKhông có \\U+0111\\U+1ED1i t\\U+01B0\\U+1EE3ng nào có thu\\U+1ED9c tính chi\\U+1EC1u dài và di\\U+1EC7n tích")
        )
      (vla-endundomark (vla-get-activedocument (vlax-get-acad-object)))
      (princ)
      )

    Còn về phần kích thước bảng thì nó scale theo cao chữ, cao chữ nhập trong cài đặt (lệnh DTL)

    • Like 1

  16. 59 phút trước, Hungtakigami đã nói:

    image.thumb.png.a919740aaaabb4335538e2df375e5e76.png

     VÍ DỤ MÌNH MUỐN CHÈN CÁI BLOCK 1-1 KIA TỪ LINE GỐC OFFET LÊN 80-80, NHƯNG TRONG TL THÌ MÌNH CHỈ CÓ CHỌN DC 80 THÔI, CÓ CÁCH NÀO ĐỂ BLOCK CỦA MÌNH NÓ NẰM ĐÚNG CHỖ HÌNH TRÒN KIA KO BẠN, 2 LINE PHỤ KIA MÌNH VẼ THÊM MINH HỌA. ĐAI LOẠI LÀ TỪ ĐƯỜNG GÓC OFFSET 80-80 VÀ GIAO NHAU Ở ĐÂU THÌ CHÈN BLOCK VÔ ĐÓ Ý

    Bạn nêu thiếu dữ kiện đề bài rồi:

    - Đối tượng chèn là block 1-1 như hình thì ok mình đã hiểu

    - Nhóm đối tượng để chèn block 1-1 vào thì chưa cụ thể: "Line gốc" cụ thể là như thế nào, đề bài có phải có nhiều cụm line gốc giống hệt nhau như hình hay xiên xẹo khác nhau ?

×