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

vietduc147258

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

    342
  • Đã tham gia

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

  • Ngày trúng

    37

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


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

    Chào bạn !

    Bạn có thể chỉnh sửa đoạn Lisp trên theo thứ tự :

    - Nhập lệnh DXF

    - Chọn đối tượng cần lấy bằng cách quét chuột

    - Xuất hiện đường dẫn lưu trữ File DXF

    - Nhập tên File

    - Chọn Save 

    Kết thúc 

    Rất mong được bạn giúp đỡ. Xin được cảm ơn bạn trước nhé !

    Cũng thử Gemini và có code này, bạn test lại thử:

    (defun c:DXF (/ ss path)
      (princ "\nChọn các đối tượng muốn xuất sang DXF: ")
      
      ;; 1. Quét chọn đối tượng
      (setq ss (ssget))
      
      (if ss
        (progn
          ;; 2. Hiện hộp thoại chọn nơi lưu và đặt tên
          (setq path (getfiled "Lưu File DXF" "" "dxf" 1))
          
          (if path
            (progn
              ;; 3. Sử dụng lệnh DXFOUT với tùy chọn Objects (O)
              ;; Lệnh này sẽ yêu cầu chọn đối tượng, điểm nền không quan trọng
              (command ".DXFOUT" path "O" ss "" "16") 
              ;; Số "16" ở trên là độ chính xác thập phân, bạn có thể thay đổi.
              
              (princ (strcat "\nĐã lưu thành công tại: " path))
            )
            (princ "\nBạn đã hủy chọn nơi lưu.")
          )
        )
        (princ "\nKhông có đối tượng nào được chọn.")
      )
      (princ)
    )
    
    (princ "\nGõ lệnh DXF để bắt đầu.")
    (princ)

     


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

    Mình tạo lệnh theo dòng trên của bạn thì được , nhưng thêm phần linetype vào thì lại bị lỗi layer tạo ra không có màu không có độ dày, không có linetype

    Mắc 2 lỗi :

    1- ký tự @ như bạn trên nói

    2- thừ một lần Enter ""

    Bạn thử: (command "-layer" "m" "BETONG" "c" "2" "" "l" "CENTER" "" "lw" "1" "" "")

    • Like 1

  3. Đúng là chưa thấy vấn đề nào làm khó được bác Cuongtk2.

    @dangtheanh262 bác chịu khó học hỏi nhưng hơi bị lười hỏi Google rồi đó. Thay vì hỏi làm sao để load dll với load vào bị lỗi thì phải làm sao thì tự mình hỏi GG luôn cho nhanh. unblock dll lần đầu tiên nghe bác Cường nói mới biết cái này. Nhưng hỏi GG cái ra liền.

    0EM30000001GLD4

    mở   C:\Program Files\Autodesk\<Product version>\acad.exe.config

    thêm cái dưới này vào

    <runtime>       
    <loadFromRemoteSources enabled="true" />   
    </runtime>

     https://www.autodesk.com/support/technical/article/caas/sfdcarticles/sfdcarticles/Cannot-load-assembly-Operation-is-not-supported-when-loading-a-DLL-file-via-NETLOAD-in-AutoCAD.html

    • Like 1

  4. Vào lúc 9/10/2025 tại 14:43, vietduc147258 đã nói:

    Có sưu tầm được lisp vẽ mặt cắt ống bằng SPL nên sửa lại cho bạn dùng thử coi.

    Kết thúc lệnh thì không thành 1 polyline được nha (do khả năng có hạn nên chỉ làm được tới đó thôi)

     

    Sửa lại chút cho kết thúc lệnh thành Polyline rồi nhé @Xuân Lộc

    (defun c:ot(/ pt1 pt2 pt3 goc kcach bk osm dt1 dt2)
    (setq osm	(getvar "osmode"))
    	(setq pt1 (getpoint "diem dau : "))
    	(setq pt2 (getpoint "diem cuoi : " pt1))
    (setvar "osmode" 0)
    	(setq goc (angle pt1 pt2))
    	(setq kcach (distance pt1 pt2))
    	(setq bk (* kcach 0.3))
    	(setq pt3 (polar pt1 goc (/ kcach 2)))
    	(command  ".pline" pt1 "a" "r" bk pt3 pt2 "")
    		(setq dt1(entlast))
    	(command  ".pline" pt3 "a" "r" bk pt1 "")
    		(setq dt2(entlast))
    	(command ".join" dt1 dt2 "")
    (setvar "osmode" osm)
    (princ)
    )

     


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


     

    Quả thực bây giờ mới thấy lỗi này. Cái này là thử trên các file khác cũng vậy. Sau khi tìm trên diễn đàn Autocad thì có câu trả lời. Chấp nhận sống chung với nó thôi. Chứ Find , replace không giải quyết được. xin phép Tag tên @Duong Nhat Duy vào đây xem có giúp được bạn không

    "I talked with Autodesk Support and they confirmed the following behavior:
    Using Find/Replace  with static block definitions in comparison to dynamic blocks.
    - static block --> change also in block definition
    - dynamic block --> no change in block definition"

     

    ps//

    riêng cái này ""Vấn đề là khi mình cần thay đổi gì trong block đó thì sau khi lưu lại nó sẽ trả về text cũ trước khi sửa""

    thấy không đúng nha. Mở Block ra sửa thì lưu bình thường mà


  6. Sẵn thì làm thêm cho lệnh vẽ Breck Line luôn.

     

    (defun c:brl(/ pt1 pt4 pt3 pt5 pt2 pt6 pt3 goc kcach osm)
    (setq    osm    (getvar "osmode"))
    (setq pt1 (getpoint "Diem dau : "))
    (setq pt2 (getpoint "Diem cuoi : " pt1))
    (command "osnap" "none")
    (setq goc (angle pt1 pt2))
    (setq kcach (distance pt1 pt2))
    (setq pt3 (polar pt1 goc (* kcach 0.4)))
    (setq x (polar pt1 goc (* kcach 0.45)))
    (setq pt4 (polar x (+ (/ PI 2) goc) (* kcach 0.15)))
    (setq y (polar pt1 goc (* kcach 0.55)))
    (setq pt5 (polar y (+ (/ PI 2) goc) (* kcach  -0.15)))
    (setq pt6 (polar pt1 goc (* kcach 0.6)))
    (command  ".PLINE" pt1 pt3 pt4 pt5 pt6 pt2"")
    (setvar "osmode" osm)
    (princ)
    )

    Những lisp dạng này thỉnh thoảng sẽ phát sinh lỗi không hoạt động + thoát lệnh giữa chừng bị lỗi bắt điểm


  7. Có sưu tầm được lisp vẽ mặt cắt ống bằng SPL nên sửa lại cho bạn dùng thử coi.

    Kết thúc lệnh thì không thành 1 polyline được nha (do khả năng có hạn nên chỉ làm được tới đó thôi)

     

    (defun c:ot(/ pt1 pt2 pt3 goc kcach bk osm)
    (setq    osm    (getvar "osmode"))
    (setq pt1 (getpoint "Diem dau : "))
    (setq pt2 (getpoint "Diem cuoi : " pt1))
    (command "osnap" "none")
    (setq goc (angle pt1 pt2))
    (setq kcach (distance pt1 pt2))
    (setq bk (* kcach 0.3))
    (setq pt3 (polar pt1 goc (/ kcach 2)))
    (command  ".PLINE" pt1 "A" "R" bk pt3 pt2 "")
    (command  ".PLINE" pt3 "A" "R" bk pt2 "")
    (setvar "osmode" osm)
    (princ)
    )


  8. 1 giờ trước, Tuan1012 đã nói:

    https://drive.google.com/file/d/1t1lFhgkImkHcPXawBIUlgxSn2vEQt1AM/view?usp=drive_link
    Em không upload file lên được, link file đây ạ

     

    thứ 1: Up file mà không share

    Thứ 2:  Thấy nội dung bạn viết rối quá

    "gặp block động thì chỉ sửa được hiển thị bên ngoài, còn khi vào trong block vẫn là text cũ"
    "Vấn đề là khi mình cần thay đổi gì trong block đó thì sau khi lưu lại nó sẽ trả về text cũ trước khi sửa"

    "Text em là text thường bác"

    Thứ 3: đã thử sửa trong Block và lưu lại rồi ATTSYNC chưa?


  9. Câu 1: Không lẽ bạn vẽ dùng mỗi lệnh Line à? Có ai đó giúp bạn lệnh 1, 2, 3 đó để vẽ Line sau đó bạn lại nhờ tiếp c1, c2, c3 để vẽ đường tròn, sp1, sp2, sp3 để vẽ Spline....

    Theo tôi chuyển Layer không tốn công lắm đâu. Nếu cần đổi nhanh thì có đoạn lisp trong diễn đàn mình dùng thử xem

    (defun c:0 () (vl-cmdf "clayer" "0" ))

    Sửa màu đỏ là tên lệnh, màu xanh là tên Layer. Tôi chỉ click chột đổi thôi chứ không dùng lisp này, nhưng chắc là nó sẽ hoạt động tốt


  10. 14 giờ trước, Tuan1012 đã nói:

    "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ũ"

    Lúc trước đọc không kỹ câu hỏi của bạn rồi. 

    Mục đích sửa bên trong để làm gì? mình hiển thị bên ngoài là được rồi mà.

    Nếu là ATT thì muốn sửa phải sửa trong Block, find , replace chỉ thay đổi nội dung để hiển thị bên ngoài thôi. Nhưng sửa trong Block thì lúc đầu tạo ATT để làm gì?. Nếu thực sự muốn sửa thì cứ vào Block editor rồi sửa thôi. Xong ATTSYNC để cập nhật lại.


  11. Vào lúc 7/10/2025 tại 10:43, Xuân Lộc đã nói:

    xài block thì nó ko căn được tim đối tượng được ạ. Nếu dùng lisp chọn điểm đầu, điểm cuối thì nó sẽ căn giữa luôn và đỡ phải đi tìm block copy past 

    Xài Block căn tim đối tượng bình thường mà. Chỉ có điều phải tìm block, copy paste thôi.

    Tạo block với điểm chèn nằm ở đầu đoạn thẳng, sao cho khi chèn vào là trùng với Point 1. Nắm đầu điểm còn lại xoay + Scale vào point 2 là xong.

    Nếu không tạo Block dynamic thì dùng lệnh AL.

    Theo tôi bạn tạo Block dynamic rồi dùng lệnh chèn block trong diễn đàn để chèn vào Point 1, còn pick điểm 2 phải thủ công rồi


  12. Hình như Autocad có lệnh Compare để so sánh 2 bản vẽ đó.

    Tôi thì hay dùng cách phá 1 Block ra rồi đổi toàn bộ sang màu xanh, sau đó đặt chồng lên để so sánh. Re một cái là chỗ nào khác nhận ra luôn. Zoom, pan  tới lui rồi move hoặc chọn lại 1 cái xoá đi thôi. Nếu đang Block thì việc chọn đối tượng càng dễ. Nếu không block thì Select rồi chọn "p" để chọn lại đối tượng trước đó thôi

     


  13. Tương lai có thể AI phát triển, Cad sẽ hiểu mình muốn làm cái gì mà tự làm cho mính á. Lúc đó có lẽ sẽ thất nghiệp hết rồi.

    Hiện tại thì chỉ có cách quản lý Block, Layer, Group kết hợp với chọn đối tượng (cách quét chuột, fi, fast slect...). Code hỗ trợ thì có code về lọc đối tượng có thể tìm trong diễn đàn.


  14. 21 giờ trước, vandongtdw đã nói:

    Các Bác cho e hỏi có lệnh hoặc lisp nào xoá khoảng trắng thừa khi chọn tất cả Mtext không  (ảnh như hình đính kèm)

     

    Thử cái này xem

    (defun c:00 (/ ss i sn)
    (setq ss (ssget "_:L" '((0 . "MTEXT"))))
    (setq L 0)
    (setq i (sslength ss))
    		
    	(repeat (setq a i)
    		(setpropertyvalue (ssname ss (setq a (1- a))) "ColumnType" 0) 
    	)
    (while (< L i)
    	(setq ssx (entget (ssname ss L)))
    	(setq ssx (subst (cons 46 0) (assoc 46 ssx) ssx))
    	(setq ssx (subst (cons 41 0) (assoc 41 ssx) ssx))
    	(entmod ssx)
    	 (setq L (+ L 1))
    )
     
     
     (princ))

     


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

    Bản vẽ em hay làm có nhiều dim lẻ quá, chỉnh lại từng cái mất nhiều thời gian nên em xin phép nhờ mọi người trên diễn đàn giúp em viếp 1 lisp làm tròn dim với ạ. Yêu cầu của em như sau :

    + Dim có số cuối 0,5: giữ nguyên

    + Dim có số cuối 1,2: làm tròn xuống về 0

    + Dim có số cuối 3,4: làm tròn lên về 5

    + Dim có số cuối 6,7: làm tròn xuống về 5

    + Dim có số cuối 8,9: làm tròn lên về 0 (chục tiếp theo)
    Em cảm ơn mọi người rất nhiều.

     

     

    Dimension Style 

    Tìm Round off trong Primary Unit , nhập vào 5

×