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

hoquangvinh

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

    212
  • Đã tham gia

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

  • Ngày trúng

    3

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


  1.  

    Vào lúc 18/6/2026 tại 08:46, singfeng đã nói:

    Mình đã cập nhật bản c# lên link thư mục chứa file rồi nhé. 
    Sẽ có 2 bản lisp và c# song song với nhau. Hy vọng được mn ủng hộ nha 

    :>

    Bạn ơi một số BV mình in thấy lỗi font chứ dù in PDF bằng lisp khác thì ko bị lỗi font


  2. Vào lúc 8/4/2026 tại 22:23, singfeng đã nói:

    Mình đã cập nhật theo ý tưởng của bạn nhé. Bản cập nhật sẵn trong thư mục chưa file lisp nhé. 

    Đúng rồi chỉ cần ghi thêm ngày, giờ thì sẽ ko trùng tên file nữa, Thế mà mình cứ nghĩ là phải đổi tên

    Nhưng khi in ra thì file vẫn chưa cập nhật đc ngày, giờ bạn ơi. File PDF lấy tên file cad thêm đuôi _01 vào sau và in tiếp vẫn bị trùng

    image.png.202d892ef3b2ea4b40c45b3cd005635b.png


  3. Vào lúc 29/3/2026 tại 16:19, singfeng đã nói:

    Chào mn mình có Fix lỗi liên quan các Mtext bị tràn khỏi khung bản vẽ (dạng block) dẫn đến việc in bản vẽ không vừa với khổ giấy
    Cảm ơn các bác đã đóng góp nhé ^^ 
    V14.4.1
    https://drive.google.com/drive/u/2/folders/1sYJtJvkAxqreid7PYrmUM0mivaYmCblg

    Mình dùng một số lisp in free rồi, cái này của bạn tốt như một số lisp hay khác nhưng tháy load nhẹ hơn, dung lượng file PDF sau khi nén nhẹ hơn. Cảm ơn bạn.

    Có một chỗ này chưa được tối ưu lắm là khi kết thúc 1 lệnh in, Lisp chạy và xuất ra file PDF trùng với tên BV (ok) nhưng khi in tiếp 1 lệnh in nữa (trong file đó) nếu chưa kịp đổi tên file PDF đã xuất ra trước thì lệnh in mới đè luôn vào file PDF cũ. Bạn có thể thêm tiện ích đổi tên BV (Ví dụ Bản vẽ 1, 2, ...) để khi dùng nhiều lệnh in liên tiếp không lo chưa kịp đổi tên file PDF được không?

    • Like 1

  4. Vào lúc 3/10/2010 tại 15:00, Thaistreetz đã nói:

    Có thể bạn không biết. lisp trên mình viết để áp dụng cho mọi hình dạng miền kín và mọi góc xiên của text. Vì thế với yêu cầu trên căn TRÁI VÀ PHẢI của bạn mình chỉ có thể viết để áp dụng 2 trường hợp này với điều kiện: miền kín là hình chữ nhật và text có góc quay = 0. với lựa chọn căn GIƯA, lisp vẫn làm việc bình thuờng như cũ.

    Tại dòng nhắc: Select text object bạn có thể chọn đối tuợng để xử lý luôn hoặc gõ S (setting) để chọn vị trí căn lề.

     

    
    (defun C:TC (/ Txt PTxt PTX SS i prmt DK TEMP_JTF DCL_ID DCL_JTF)
     (setq SS (ssget "I" '((0 . "TEXT"))) i 0)
    (command "undo" "begin")
    (setvar "cmdecho" 0)
    (if (not JTF-T) (setq JTF-T (list 0 1 0)))
    (if (= (cadr JTF-T) 1)
    	(setq prmt "Text to Center")
    	(if (= (caddr JTF-T) 1) (setq prmt "Text to Right") (setq prmt "Text to Left"))
    );if
    (vl-load-com)
     (if (not SS)
       (progn
         (prompt (strcat "\nSelect text object [setting - " prmt " ]"))
    	(setq DK (grread nil 4 2))
    	(if (= (car DK) 3)
    	(setq SS (ssget "C" (cadr DK) (getcorner (cadr DK)) '((0 . "TEXT"))))
    	(if (= (cadr DK) 115)
    	(progn
    		(setq	DCL_JTF (list "JTFtext : dialog {label = \"Justify in Region\"; : boxed_radio_row {"
                                  "        : radio_button { label = \"Left\"; key = \"Lft\";}"
    		  "        : spacer { width = 1.2; }"
                                  "        : radio_button { label = \"Center\"; key = \"Ctr\";}"
                                  "        : radio_button { label = \"Right\"; key = \"Rgt\";}}"
                                  "        ok_cancel;}"))
    		(setq	TEMP_JTF (vl-filename-mktemp "CTK.DCL")
    			FILE_DCL (open TEMP_JTF "W"))
    		 (foreach LL DCL_JTF (write-line LL FILE_DCL))
    		(close FILE_DCL)
    		(setq DCL_ID (load_dialog TEMP_JTF))
    		(new_dialog "JTFtext" DCL_ID)
    		(set_tile "Lft" (rtos (nth 0 JTF-T) 2 0))
    		(set_tile "Ctr" (rtos (nth 1 JTF-T) 2 0))
    		(set_tile "Rgt" (rtos (nth 2 JTF-T) 2 0))
    (action_tile "accept" "(setq JTF-T (list(atof(get_tile \"Lft\"))(atof (get_tile \"Ctr\"))(atof (get_tile \"Rgt\"))))(done_dialog)")
    (start_dialog)
    (unload_dialog DCL_ID)
    (vl-file-delete TEMP_JTF)
    (setq SS (ssget '((0 . "TEXT"))))
    );progn
    (if (= (cadr DK) 32) (exit)	(progn (prompt "\nWrong Key (!) Select text oject or press [s]etting") (C:TC)))
    );if
    );if
    );progn
    );if
    (if SS
    (progn
      (command "UCS" "W")
      (setq    OSMLAST    (getvar "osmode"))
      (setvar "OSMODE" 0)
      (cond ((= (nth 1 JTF-T) 1)
      (repeat (sslength SS)
      (setq txt (ssname SS i) PTxt (GET_MIDTEXT txt) PTX (GET_CENTER_REGION PTxt) i (1+ i))
      (if PTX (vl-cmdf "move" txt "" PTxt PTX))
    );repeat
    );list_Ctr
    ((= (nth 0 JTF-T) 0)
    (repeat (sslength SS)
    (setq txt (ssname SS i) PTxt (GET_RIGHTTEXT txt) PTX (cadr (GET_LR_REGION PTxt)) i (1+ i))
    (if PTX (vl-cmdf "move" txt "" PTxt PTX))
    );repeat
    );list_rgt
    ((= (nth 2 JTF-T) 0)
    (repeat (sslength SS)
    (setq txt (ssname SS i) PTxt (GET_LEFTTEXT txt) PTX (car (GET_LR_REGION PTxt)) i (1+ i))
    (if PTX (vl-cmdf "move" txt "" PTxt PTX))
    );repeat
    );list_lft
    );cond
    (setvar "osmode" OSMLAST)
    (command "UCS" "P")
    );progn
    );if
    (prompt "Thaistreetz@gmail.com")
    (command "undo" "end")
    (princ)
    );end TC
    (defun GET_CENTER_REGION (PT / SSL PTC )
       (setq SSL (entlast))
       (if (= (DXF 0 SSL) "POLYLINE")
           (while    (/= "SEQEND" (DXF 0 (entnext SSL)))
               (setq SSL (entnext SSL))
           );while
       );if
       (vl-cmdf "-boundary" PT "")
       (if (entnext SSL)
           (progn
               (command "region" "L" "")
               (setq PTC (vlax-safearray->list (vlax-variant-value (vlax-get-property (vlax-ename->vla-object (entlast)) 'Centroid))))
               (command "erase" (entlast) "")
               PTC
           );progn
           nil
       );if    
    );END
    (defun GET_LR_REGION (PT / SSL PTC )
       (setq SSL (entlast))
       (if (= (DXF 0 SSL) "POLYLINE")
           (while    (/= "SEQEND" (DXF 0 (entnext SSL)))
               (setq SSL (entnext SSL))
           );while
       );if
       (vl-cmdf "-boundary" PT "")
       (if (entnext SSL)
           (progn
             (command "region" "L" "")
            (setq PTC (ACET-GEOM-SS-EXTENTS-FAST (ssget "L")))
             (command "erase" (entlast) "")
             (list (list (car (car PTC)) (+ (cadr (car PTC)) (* 0.5 (abs (- (cadr (car PTC)) (cadr (cadr PTC)))))))
    (list (car (cadr PTC)) (- (cadr (cadr PTC)) (* 0.5 (abs (- (cadr (car PTC)) (cadr (cadr PTC))))))))
           );progn
           nil
       );if    
    );END
    (defun GET_MIDTEXT (EN / TB PTxt PT0 PTA)
     (setq TB (textbox (entget EN))
           PTxt (GET_M2P (car TB) (cadr TB))
           PT0 (DXF 10 EN)
           PTA (list (+ (car PT0) (car PTxt)) (+ (cadr PT0) (cadr PTxt))))
     (polar PT0 (+ (DXF 50 EN) (angle PT0 PTA)) (distance PT0 PTA))
    );end
    (defun GET_RIGHTTEXT (EN / TB PTxt PT0 PTA)
     (setq TB (textbox (entget EN))
           PTxt (GET_M2P (car TB) (cadr TB))
           PT0 (DXF 10 EN)
           PTA (list (+ (car PT0) (car PTxt)) (+ (cadr PT0) (cadr PTxt))))
    (list(+(car PT0)(car (cadr TB))(abs(-(cadr(car TB))(cadr (cadr TB))))) (cadr(polar PT0 (+(DXF 50 EN)(angle PT0 PTA))(distance PT0 PTA))))
    )
    (defun GET_LEFTTEXT (EN / TB PTxt PT0 PTA)
     (setq TB (textbox (entget EN))
           PTxt (GET_M2P (car TB) (cadr TB))
           PT0 (DXF 10 EN)
           PTA (list (+ (car PT0) (car PTxt)) (+ (cadr PT0) (cadr PTxt))))
     (list (- (car PT0) (abs (- (cadr (car TB)) (cadr (cadr TB))))) (cadr (polar PT0 (+ (DXF 50 EN) (angle PT0 PTA)) (distance PT0 PTA))))
    )
    (defun DXF (Id Obj)
       (cdr (assoc Id (entget Obj)))
    ) 
    (defun GET_M2P (PT1 PT2) (polar PT1 (angle PT1 PT2) (* 0.5 (distance PT1 PT2))));end
    
     

     

    PS: Ban đừng trích dẫn bài người khác với cả code như trên. nhìn rối mắt lắm. giữ lại những gì cần phải reply thôi.

    Hôm nay vẫn tìm đc lisp cần, Cảm ơn bác Thaistreetz


  5. Vào lúc 18/8/2013 tại 12:12, theducw87 đã nói:

    Bạn dùng lệnh "UCS" ->"W" để trục tọa độ chuyển về vị trí (0,0,0) mặc định xong rồi dùng lệnh "INSBASE"->"0,0,0" rồi chọn gốc tọa độ (0,0,0). Làm thế ở cả bản vẽ mẹ mà bản vẽ tham chiếu. Nên để điểm gốc tọa độ là điểm mà bạn muốn chèn từ bản vẽ con sang bản vẽ mẹ.

    Mình tìm được lời giải sau bài hướng dẫn gần 11 năm.

    Thanks bạn nhé!


  6.   Em đang dùng cad 2022 mà mới bị tình trạng kick chọn block nó hiển thị hết tất cả các chi tiết trong block giống như hiển thị đối tượng group vậy.

      Hình minh họa của e là block khung tên mà nó hiển thị thế này. Nếu Reset cad thì chắc cũng được nhưng e cũng cài nhiều tiện ích cad, lisp rồi và cũng muốn biết rõ ngọn ngành nên nhờ mọi người ai biết chỉ cách chỉnh lại cho e với.
      Em cảm ơn ạ!


  7. 6 giờ trước, tien_bg90 đã nói:

    Bác dùng bản 2020 có bị dính lỗi bị phát hiện crack ko ạ? Của mình bị mới đau chứ,tìm mọi cách Fix mà k đc.

    mình dùng bản 64bit từ khi dùng giờ chưa thấy báo lỗi crack nhưng mình cũng mới dùng đc vài tháng gần đây thôi

     

    18 giờ trước, ketxu đã nói:

    Video cho bạn hiểu thêm về nó

     xem video mới thấy nó cùng có nhiều tiện ích đấy chứ, chỉ là chưa biết dùng đúng lúc đúng chỗ thôi


  8. Cái này chắc mới nên e cũng tìm mà chưa thấy đâu có, xin hỏi các bác xem ai biết thì chỉ e với ạ.

    E đang dùng thử cad 2020 một thời gian đầu thì ko vấn đề gì vài tuần nay thấy xuất hiện một số hiển thị bắt điểm thì phải. Nó bao gôm hiển thị đường thẳng đứng, đường ngang ở Pline và Line, đường tròn và Spl thì ko thấy. Điểm trùng hợp đầu cuối giữ 2 đường line nối tiếp nhau rất khó chịu khi vẽ.

    Có bác nào biết cách tắt cái này ko xin chỉ cho e với, e cảm ơn ạ.

    192027924_loicad2.jpg.a5661387301cb9c00f3c247260e6fe26.jpg984907651_loicad3.jpg.79a6ae02e5903955437e4cef45dd805c.jpg2118527634_loicad4.jpg.cae9937a21fb4b40f55be57a4c324b13.jpg141432929_loicad.jpg.136fc40b945c217ea3cf2af9a32e247a.jpg


  9. Vào lúc 10/12/2008 tại 06:46, Tue_NV đã nói:

    Ứng dụng hàm Round của bác SSG đã trả lời trong topic Lisp nhân thêm hệ số K vào Text. Mình đã phát triển nên đoạn Code này để làm tròn các Text sau các chữ số thập phân

     

    
    ;;;-------------------------------------------------------
    ;;;-------------------------------------------------------
    (defun etype (e);;;Entity Type
    (cdr (assoc 0 (entget e)))
    )
    ;;;-------------------------------------------------------
    (defun rnd(x);;;Round x, return INT
    (if (>= x 0) (fix (+ x 0.5)) (fix (- x 0.5)))
    ) 
    ;;;-------------------------------------------------------
    
    (defun TP()
    (setq thapphan 2);Ban co the thay doi so thap phan o dong nay
    )
    
    (defun round3(x / tue S i j S1 S3)
    
    (setq tue (TP))
    
    (setq S (itoa (rnd (* (abs x) (expt 10 tue)))))
    
    (setq
    i (strlen S)
    j (- i tue)
    S1 (substr S 1 j)
    S3 (substr S (1+ j) tue)
    )
    (if (>= x 0) (strcat S1 "." S3) (strcat "-" S1 "." S3))
    )
    ;;;-------------------------------------------------------
    (defun C:Round( / ss k i e d v S)
    
    (setq
    ss (ssget '((0 . "TEXT,MTEXT")))
    i 0
    
    )
    
    (repeat (sslength ss)
    (setq e (ssname ss i))
    (if (= (etype e) "MTEXT") (progn
    (command "explode" e "")
    (setq e (entlast))
    ))
    (setq
    d (entget e)
    v (atof (cdr (assoc 1 d)))
    S (round3 v)
    d (subst (cons 1 S) (assoc 1 d) d)
    )
    (entmod d)
    (setq i (1+ i))
    )
    (princ)
    )
     

     

     

    Bạn có thể thay đổi số thập phân ở dòng này : (setq thapphan 2)

    Đoạn Code này chưa được hoàn thiện lắm vì theo yêu cầu của người sử dụng là khi đánh số thập phân vào thì chương trình sẽ hiểu. Nhưng ở đây lại phải thay đổi số thập phân bằng cách vào file Lisp sửa lại dòng (setq thapphan 2) mới ra được kết quả như ý.

     

    Mình đã thử thay câu (setq thapphan 2) bằng câu (setq thapphan (getint "\nSo chu so thap phan la :"))

    Nhưng kết quả lại không theo như ý. Vì dưới tác dụng của vòng lặp Repeat cái câu nhắc "nSo chu so thap phan la :" được lặp lại cho đến Text cuối cùng. Điều này nó không theo được ý của người sử dụng.

     

    Mong bác SSG và tất cả mọi người cùng góp ý để đoạn Code trên được hoàn thiện một cách trọn vẹn.

     

    Chân thành cảm ơn tất cả mọi người. :cheers:

    lisp này của bác Tuệ chọn số thập phân thì OK rồi nhưng còn muốn thành số nguyên luôn (phía sau ko có .0 hay .00) thì thế nào ạ. E thử sửa về số 0 mà ko đc


  10. Vào lúc 21/8/2013 tại 02:01, lexussc430 đã nói:

    Minh sưu tầm được lisp cập nhật dữ liệu attribute từ file cvs rất hay nhưng không dùng được tiếng việt unicode, có bạn nào biết cách chỉnh giúp mình không. Thanks

    http://www.cadviet.com/upfiles/3/100340_updatetitleblockv16_1.lsp

    mình thử thấy ko đc dù chuyển font của csv thành font *.Vn rồi, cái font csv cần để đưa sang cad cấu trúc thành phần thế nào vậy bạn


  11. Mình muốn làm 2 việc như sau:

    1. Chuyển 06 hàng text trên cad về bảng exel và sau khi tính toán giá trị pase ngược lại từ exel vào lại cad.

    2. Chuyển 02 giá trị Cao độ đỉnh và đáy hố thu từ file exel lên block ATT trong cad còn tên hố thu đã có sẵn ko cần pase lại vào block att nữa.

    Mục 1 thì e đã có lisp C2E chuyển từ cad qua exel của bác Hoành rồi (Cái này mình cũng đã làm trong file exel) nhưng khoản pase ngược từ exel lại cad thì search trên diễn đàn và các nơi cũng có rất nhiều nhưng link die hết rồi chẳng còn link nào nữa.

    Mục 2 mình cũng có tìm thấy một số lisp xuất từ cad sang exel hoặc txt nhưng ko dùng đc trong trường hợp của mình

    có file đính kèm đây mong mọi người xem nếu biết link thì cho mình xin ko nhờ các bác viết hộ cho mình lisp này với ạ

    Quên mình dùng thử bằng cad 2008, 2018. Exel 2010

    binh do - trac doc.dwg

    Exel.rar

×