Chuyển đến nội dung
Diễn đàn CADViet
  • Thông báo

    • Nguyen Hoanh

      CADViet đã hoàn tất nâng cấp   14/09/2017

      Chào các bạn, CADViet đã hoàn tất việc nâng cấp lên phiên bản mới. Tất cả các chức năng đã hoạt động theo kỳ vọng của ban quản trị. Nếu có vấn đề gì cần phản hồi, các bản post ở đây nhé: Trân trọng, Nguyễn Hoành.
Đăng nhập để thực hiện theo  
NDBNGO

Làm sao dể tự động kết nối 1 bản vẽ text sang 2(nhiều) bản vẽ khác

Các bài được khuyến nghị

nataca    553
Chào bác Giabach,

Bác có thể hướng dẫn thêm về vấn đề: "Trong VD trên tôi mở file với thuộc tính là BackRound hay InVisible." này hay không????

Quả thực đây là một vấn đề mà mình cũng loay hoay chưa tìm ra lời giải. Mở một file text thì qua diễn đàn và các bác chỉ dẫn mình đã hiểu được và có thể sử dụng, Nhưng mở các file bản vẽ .DWG hay thậm chí .sldpart ra để xử lý trong lisp thì mình chưa biết cách. Rất mong bác chỉ giáo thêm.

Cám ơn bác trước.

Bác thử tham khảo lisp tạo list các bản vẽ này xem

(defun c:lstdwg(/ dirbox Ouvrir_dessin_dbx rep lst fic dbx lay)

 (defun dirbox(/ cdl rep)
   (if (setq cdl (vlax-create-object "Shell.Application"))
     (progn
   (and (setq rep (vlax-invoke cdl 'browseforfolder 0 "Choose a directory" 512 ""))
        (setq rep (vlax-get-property (vlax-get-property rep 'self) 'path))
   )
   (vlax-release-object cdl)
     )
   )
   rep
 )

 (defun Ouvrir_dessin_dbx(dwg / dbx doc lan)
   (vl-load-com) 
   (setq dwg (findfile dwg))
   (vlax-for doc (vla-get-documents (vlax-get-acad-object))
     (and (eq (strcase (vla-get-fullname doc)) (strcase dwg))
   (setq dbx doc lan T)
     )
   )
   (or dbx
     (progn
   (if (< (atoi (substr (getvar "ACADVER") 1 2)) 16)
     (setq dbx (vlax-create-object "ObjectDBX.AxDbDocument"))
     (setq dbx (vlax-create-object (strcat "ObjectDBX.AxDbDocument." (substr (getvar "ACADVER") 1 2))))
   )
   (vla-open dbx dwg)
     )
   )
   (list dbx lan)
 )

 (vl-load-com)
 (if (setq rep (dirbox))
   (if (setq lst (vl-directory-files rep "*.dwg" 1))
     (foreach fic lst
   (if (setq dbx (ouvrir_dessin_dbx (strcat rep "/" fic)))
     (progn
       (princ (strcat "\n Working in " fic))(princ)
       (vlax-for lay (vla-get-layouts (car dbx))
         (princ (strcat "\n\t\tLayout : " (vla-get-name lay)))(princ)
       )
       (or (cadr dbx)(vlax-release-object (car dbx)))
     )
     (princ (strcat "\n Can't read file " fic))
   )
     )
     (alert "No dwg's File")
   )
 )
 (princ)
)

 

và đặc biệt là đoạn này

(if (< (atoi (substr (getvar "ACADVER") 1 2)) 16)
     (setq dbx (vlax-create-object "ObjectDBX.AxDbDocument"))
     (setq dbx (vlax-create-object (strcat "ObjectDBX.AxDbDocument." (substr (getvar "ACADVER") 1 2))))
   )
   (vla-open dbx dwg)
   (vla-saveas dbx dwg)

  • Vote tăng 3

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
phamthanhbinh    3.123
Bác thử tham khảo lisp tạo list các bản vẽ này xem


Chào bác Nacata,

Mình đã thử áp dụng cái đoạn code bạn cho vào việc mở bản vẽ ra để xử lý. Xong có một số trở ngại mong bác hướng dẫn thêm.

1/- Mình đã mở được file ra và cũng đã thử được một vài lệnh lisp trong đó. Nhưng khổ nỗi muốn kiểm duyệt các lệnh này nó có hoạt động hay không thì chịu chết.

2/- Việc lưu lại cái file đã mở và đã thực hiện các lệnh lisp trên đó mình không làm được mặc dù đã dùng lệnh (vla-saveas dbx dwg) như bác đã chỉ. Mình cũng đã thử thay đổi các giá trị của biến hệ thống lispinit và sdi như gợi ý của bác Trungngamy nhưng vẫn không xi nhê gì.

Do mình không biết tham khảo về các lệnh vla- .... này ở đâu nên cũng bí luôn chả biết nó sai vì sao nữa.

3/- Khi sử dụng lệnh (vla-saveas dbx dwg) mình cũng sử dụng các biến dbx và dwg giống như khi mình đã dùng lệnh (vla-open dbx dwg) thì Cad hiện lên một bảng alert là Error writing/closing file.

 

Vậy bác và các bác khác có thể giải thích giùm mình các vấn đề trên được không??? Nếu có thể các bác chỉ cho mình các tài liệu có thể tham khảo về các hàm vla-... này với. Mình tìm hoài trong help mà chả thấy đâu. Khổ thế.

 

Rất mong được sự giúp đỡ từ các bác....

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
phamthanhbinh    3.123

Hề hề hề,

Cái bác chủ thớt này chắc mấy bữa nay bệnh rồi hay sao ý nhẩy. Quăng cái vấn đề ra cho mọi người cãi nhau ỏm tỏi mà chả thấy bác này í ới chi. Mấy câu hỏi mình chờ bác ấy giả nhời để còn có hướng mà vọc cũng chả thấy bác ấy ứ hự gì. Hay thật đấy.

Mong cho bác ấy chóng khỏi bệnh để còn làm chủ thớt cho nó vuông vắn.

Hề hề hề,.....

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
NDBNGO    20

Xin cảm ơn,các ban còn nhớ đến mình.Đợt này đang chỉ đạo công trình ở Yên tử ,sóng yếu quá 3G không online được.Chứ nhớ các ban và diễn đàn hơn nhớ người yêu đó.

Thỉnh thoảng cũng phải đi làm kiếm lấy 30-40 tr /tháng để láy lương khô ngồi học chú.

Đêm ngày ôm lísp hơn cả ôm vợ đấy .Sao vài 3 tháng nữa kiến thức bằng 1/10 Phamthanhbinh là ngôi chơi cũng đủ tiền nuối cả nhà rồi

Cảm ơn các ban lần nữa.

  • Vote tăng 1

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
nataca    553
Chào bác Nacata,

Mình đã thử áp dụng cái đoạn code bạn cho vào việc mở bản vẽ ra để xử lý. Xong có một số trở ngại mong bác hướng dẫn thêm.

1/- Mình đã mở được file ra và cũng đã thử được một vài lệnh lisp trong đó. Nhưng khổ nỗi muốn kiểm duyệt các lệnh này nó có hoạt động hay không thì chịu chết.

2/- Việc lưu lại cái file đã mở và đã thực hiện các lệnh lisp trên đó mình không làm được mặc dù đã dùng lệnh (vla-saveas dbx dwg) như bác đã chỉ. Mình cũng đã thử thay đổi các giá trị của biến hệ thống lispinit và sdi như gợi ý của bác Trungngamy nhưng vẫn không xi nhê gì.

Do mình không biết tham khảo về các lệnh vla- .... này ở đâu nên cũng bí luôn chả biết nó sai vì sao nữa.

3/- Khi sử dụng lệnh (vla-saveas dbx dwg) mình cũng sử dụng các biến dbx và dwg giống như khi mình đã dùng lệnh (vla-open dbx dwg) thì Cad hiện lên một bảng alert là Error writing/closing file.

 

Vậy bác và các bác khác có thể giải thích giùm mình các vấn đề trên được không??? Nếu có thể các bác chỉ cho mình các tài liệu có thể tham khảo về các hàm vla-... này với. Mình tìm hoài trong help mà chả thấy đâu. Khổ thế.

 

Rất mong được sự giúp đỡ từ các bác....

- Bác chú ý là trong đoạn

(vla-saveas dbx dwg) ... (vla-saveas dbx dwg)

thì dấu ... bác phải dùng các hàm visual lisp (vla-, vl- , vlax ...) để tác động tới đối tượng của bản vẽ

- Không cần phải tác động tới 2 biến lispinit và sdi lisp vẫn chạy như thường

- Bác chú ý sau khi hoàn tất các bước bác phải Release các biến vla- đi nhé

- Bác thử đưa đoạn Code bác viết lên mọi người xem thử mới biết lỗi xảy ra ở đâu

- Dùng DBX được cái nhanh hơn Scrip nhưng attsync thì em chịu không biết nhúng vào thế nào, nhờ các bác chỉ giáo

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
phamthanhbinh    3.123
- Bác chú ý là trong đoạn

(vla-saveas dbx dwg) ... (vla-saveas dbx dwg)

thì dấu ... bác phải dùng các hàm visual lisp (vla-, vl- , vlax ...) để tác động tới đối tượng của bản vẽ

- Không cần phải tác động tới 2 biến lispinit và sdi lisp vẫn chạy như thường

- Bác chú ý sau khi hoàn tất các bước bác phải Release các biến vla- đi nhé

- Bác thử đưa đoạn Code bác viết lên mọi người xem thử mới biết lỗi xảy ra ở đâu

- Dùng DBX được cái nhanh hơn Scrip nhưng attsync thì em chịu không biết nhúng vào thế nào, nhờ các bác chỉ giáo

Chào bác Nacata,

Cái đoạn code ấy nó đây, cũng là cái để mình thử xài cho cái yêu cầu của bác ndbngo ấy mà.

(defun c:cmtxt ( )
(vl-load-com)
(command "undo" "be")
(setq lp (getvar "lispinit"))
(setq sd (getvar "sdi"))
;;;;;;(setvar "lispinit" 0)
;;;;;;(setvar "sdi" 1)
(setq sst (ssget (list (cons 0 "MTEXT")))
       n (sslength sst)
       i 0
       lscotxt (list)
)
(while (< i n)
        (setq ent (ssname sst i)
               elst (entget ent)
               ht (cdr (assoc 40 elst))
               mt (cdr (assoc 1 elst))
               st (cdr (assoc 7 elst))
               gt (cdr (assoc 50 elst))

        )
        (alert (strcat " Noi dung text la" mt))
        (setq ans (getstring "\n Ban muon thay doi noi dung text (y or n): "))
        (if (= ans "y")
           (setq mt (getstring T "\n Nhap noi dung text moi: "))
        )
        (setq cod (strcase (getstring T "\n Nhap ma diem nhap text: "))
                 lscotxt (append lscotxt (list (list cod st ht gt mt)))
                 i (1+ i)
        )
)
(while (setq dwg (getfiled "Chon file ban ve can bo sung" "" "dwg" 0))
(if (setq dbx (ouvrir_dessin_dbx dwg ))
(progn
(get_datapoint)
(foreach cotxt lscotxt
      (setq co1 (car cotxt)
              st1 (cadr cotxt)
              ht1 (caddr cotxt)
              gt1 (cadddr cotxt)
              mt1 (car (cddddr cotxt))
      )
      (foreach po pdlst
             (if (= (car po) co1)
                 (progn 
                 (entmake (list (cons 0 "MTEXT") (cons 1 mt1) (cons 7 st1)
                                      (cons 40 ht1) (cons 50 gt1) (cons 10 (cdr po))))
                 (entupd (entlast))
                 (command "regenall")
                 )
              )
       )

)

)
)
(vla-saveas dbx dwg)


)

(setvar "lispinit" lp)
(setvar "sdi" sd)
(command "undo" "e")
(princ)
)


(defun Ouvrir_dessin_dbx(dwg / dbx doc lan)
(vl-load-com)
(setq dwg (findfile dwg))
(vlax-for doc (vla-get-documents (vlax-get-acad-object))
(and (eq (strcase (vla-get-fullname doc)) (strcase dwg))
(setq dbx doc lan T)
) ;;;;;;;;;;;;;;;; Close and
) ;;;;;;;;;;;;;;;; Close vlax-for
(or dbx
(progn
(if (< (atoi (substr (getvar "ACADVER") 1 2)) 16)
(setq dbx (vlax-create-object "ObjectDBX.AxDbDocument"))
(setq dbx (vlax-create-object (strcat "ObjectDBX.AxDbDocument." (substr (getvar "ACADVER") 1 2))))
) ;;;;;;;;;;; Close if
(vla-open dbx dwg)
) ;;;;;;;;;;;;; Close progn
) ;;;;;;;;;;;;;; Close or
(list dbx lan)
dbx
) ;;;;;;;;;;;;;;;; Close ouvrir_dessin_dbx

(defun get_datapoint ( )
(setq data (list))
(while (setq filecsv (getfiled "Chon file toa do diem chen: " "" "sl" 0))
(setq f (open filecsv "r")

)
(setq str (read-line f))
(while str
(setq cdata  (list str)
       data (append data (list cdata))
       str (read-line f)
)
)
(close f)
)
data

(setq ptlst (list))
(foreach pt data 
(setq str (car pt)
        len (strlen str)
        i 1
)
(setq stlst (list))
(while (<=  i len)
        (if (= (substr str i 1) " ") 
            (progn 
                  (setq st1 (substr str 1 (1- i))
                          str (substr str (1+ i))
                          len (strlen str)
                          i 0
                  )
                  (if (not (equal st1 ""))
                  (setq stlst (append stlst (list st1)))
                  )
             )
         )
         (setq i (1+ i))
)
(if (= len 1) 
   (progn
         (setq st1 str
                 stlst (append stlst (list st1))
         )
    )
)
(setq ptlst (append ptlst (list stlst)))
)
(setq pdlst (list))
(foreach pd ptlst
(setq old (getvar "luprec"))
(setvar "luprec" 3)
(setq ma (car pd)
       x (atof (caddr pd) )
       y (atof (cadr pd) )
       z (atof (cadddr pd) )
      pos (list ma x y z)
      pdlst (append pdlst (list pos))
)
)
(setvar "luprec" old)
pdlst
)

 

Nói như bác thì mình làm sai tuốt luốt rồi vì trong cái khúc ... ấy mình toàn dùng hàm lisp bình thường thôi bác ạ....

Cái vụ xóa biến mình cũng chưa rõ lắm nữa.

Hề hề hề, dốt quá.....

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
TRUNGNGAMY    91
Chào bác Nacata,

Cái đoạn code ấy nó đây, cũng là cái để mình thử xài cho cái yêu cầu của bác ndbngo ấy mà.

(defun c:cmtxt ( )
(vl-load-com)
(command "undo" "be")
(setq lp (getvar "lispinit"))
(setq sd (getvar "sdi"))
;;;;;;(setvar "lispinit" 0)
;;;;;;(setvar "sdi" 1)
(setq sst (ssget (list (cons 0 "MTEXT")))
       n (sslength sst)
       i 0
       lscotxt (list)
)
(while (< i n)
        (setq ent (ssname sst i)
               elst (entget ent)
               ht (cdr (assoc 40 elst))
               mt (cdr (assoc 1 elst))
               st (cdr (assoc 7 elst))
               gt (cdr (assoc 50 elst))

        )
        (alert (strcat " Noi dung text la" mt))
        (setq ans (getstring "\n Ban muon thay doi noi dung text (y or n): "))
        (if (= ans "y")
           (setq mt (getstring T "\n Nhap noi dung text moi: "))
        )
        (setq cod (strcase (getstring T "\n Nhap ma diem nhap text: "))
                 lscotxt (append lscotxt (list (list cod st ht gt mt)))
                 i (1+ i)
        )
)
(while (setq dwg (getfiled "Chon file ban ve can bo sung" "" "dwg" 0))
(if (setq dbx (ouvrir_dessin_dbx dwg ))
(progn
(get_datapoint)
(foreach cotxt lscotxt
      (setq co1 (car cotxt)
              st1 (cadr cotxt)
              ht1 (caddr cotxt)
              gt1 (cadddr cotxt)
              mt1 (car (cddddr cotxt))
      )
      (foreach po pdlst
             (if (= (car po) co1)
                 (progn 
                 (entmake (list (cons 0 "MTEXT") (cons 1 mt1) (cons 7 st1)
                                      (cons 40 ht1) (cons 50 gt1) (cons 10 (cdr po))))
                 (entupd (entlast))
                 (command "regenall")
                 )
              )
       )

)

)
)
(vla-saveas dbx dwg)
)

(setvar "lispinit" lp)
(setvar "sdi" sd)
(command "undo" "e")
(princ)
)
(defun Ouvrir_dessin_dbx(dwg / dbx doc lan)
(vl-load-com)
(setq dwg (findfile dwg))
(vlax-for doc (vla-get-documents (vlax-get-acad-object))
(and (eq (strcase (vla-get-fullname doc)) (strcase dwg))
(setq dbx doc lan T)
) ;;;;;;;;;;;;;;;; Close and
) ;;;;;;;;;;;;;;;; Close vlax-for
(or dbx
(progn
(if (< (atoi (substr (getvar "ACADVER") 1 2)) 16)
(setq dbx (vlax-create-object "ObjectDBX.AxDbDocument"))
(setq dbx (vlax-create-object (strcat "ObjectDBX.AxDbDocument." (substr (getvar "ACADVER") 1 2))))
) ;;;;;;;;;;; Close if
(vla-open dbx dwg)
) ;;;;;;;;;;;;; Close progn
) ;;;;;;;;;;;;;; Close or
(list dbx lan)
dbx
) ;;;;;;;;;;;;;;;; Close ouvrir_dessin_dbx

(defun get_datapoint ( )
(setq data (list))
(while (setq filecsv (getfiled "Chon file toa do diem chen: " "" "sl" 0))
(setq f (open filecsv "r")

)
(setq str (read-line f))
(while str
(setq cdata  (list str)
       data (append data (list cdata))
       str (read-line f)
)
)
(close f)
)
data

(setq ptlst (list))
(foreach pt data 
(setq str (car pt)
        len (strlen str)
        i 1
)
(setq stlst (list))
(while (<=  i len)
        (if (= (substr str i 1) " ") 
            (progn 
                  (setq st1 (substr str 1 (1- i))
                          str (substr str (1+ i))
                          len (strlen str)
                          i 0
                  )
                  (if (not (equal st1 ""))
                  (setq stlst (append stlst (list st1)))
                  )
             )
         )
         (setq i (1+ i))
)
(if (= len 1) 
   (progn
         (setq st1 str
                 stlst (append stlst (list st1))
         )
    )
)
(setq ptlst (append ptlst (list stlst)))
)
(setq pdlst (list))
(foreach pd ptlst
(setq old (getvar "luprec"))
(setvar "luprec" 3)
(setq ma (car pd)
       x (atof (caddr pd) )
       y (atof (cadr pd) )
       z (atof (cadddr pd) )
      pos (list ma x y z)
      pdlst (append pdlst (list pos))
)
)
(setvar "luprec" old)
pdlst
)

 

Nói như bác thì mình làm sai tuốt luốt rồi vì trong cái khúc ... ấy mình toàn dùng hàm lisp bình thường thôi bác ạ....

Cái vụ xóa biến mình cũng chưa rõ lắm nữa.

Hề hề hề, dốt quá.....

Công nhận bác phamthanhbinh rất nhiệt tình có mặt mọi lúc mọi nơi. Vụ mấy cái hàm mới bác nghiên cứu đi, lúc nào thông suốt chỉ cho mình với chú mình còn dốt VL lắm. Riêng vđ của bác ndbngo thì chỉ cần cad14 và cái biến lispinit là làm đc rồi. biến sdi chủ yéu làm cho cad2000 trở lên kg mở đc nhiều bv cùng lúc cho nó giống như cad14 thôi. Mình nghĩ vận dụng việc mở đóng file kg hiển thị lên cửa sổ cad là kỹ thuật hay nhưng nếu kg cần thiết thì cũng kg nên dùng vì nó có nhiều rủi ro hơn, vì lúc đó sự hoạt động của các hàm này có thể do hệ điều hành điều khiển chứ kg phải do riêng cad điều khiển. Trước đây khi lập trình trên Delphi mình đã sd kỹ thuật OLE-Automation để gởi dữ liệu từ phần mềm bình sai vào cad nên mình cũng có hiểu sơ sơ về nó. Tuy nhiên, lâu quá rồi mình cũng quên, sự giống và khác nhau giữa các kỹ thuật này chắc nhờ các cao thủ trên diễn đàn phân tích thêm. Mình bây giờ thuộc dạng "kg biết dựa cột mà nghe" chứ kg phải ngủ quên đâu

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
phamthanhbinh    3.123
Công nhận bác phamthanhbinh rất nhiệt tình có mặt mọi lúc mọi nơi. Vụ mấy cái hàm mới bác nghiên cứu đi, lúc nào thông suốt chỉ cho mình với chú mình còn dốt VL lắm. Riêng vđ của bác ndbngo thì chỉ cần cad14 và cái biến lispinit là làm đc rồi. biến sdi chủ yéu làm cho cad2000 trở lên kg mở đc nhiều bv cùng lúc cho nó giống như cad14 thôi. Mình nghĩ vận dụng việc mở đóng file kg hiển thị lên cửa sổ cad là kỹ thuật hay nhưng nếu kg cần thiết thì cũng kg nên dùng vì nó có nhiều rủi ro hơn, vì lúc đó sự hoạt động của các hàm này có thể do hệ điều hành điều khiển chứ kg phải do riêng cad điều khiển. Trước đây khi lập trình trên Delphi mình đã sd kỹ thuật OLE-Automation để gởi dữ liệu từ phần mềm bình sai vào cad nên mình cũng có hiểu sơ sơ về nó. Tuy nhiên, lâu quá rồi mình cũng quên, sự giống và khác nhau giữa các kỹ thuật này chắc nhờ các cao thủ trên diễn đàn phân tích thêm. Mình bây giờ thuộc dạng "kg biết dựa cột mà nghe" chứ kg phải ngủ quên đâu

Chào bác Trungngamy,

Những lời góp ý của bác thật đúng. Chỉ tại mình không tìm được cách mở các file bản vẽ bằng lisp như bác đã nói nên mới lọ mọ tới cái vla mà bác Nacata chỉ cho chứ cũng có hiểu gì nhiều về nó đâu. Nếu mình mở được thì chắc chắn cũng sẽ làm y như bác hướng dẫn vậy.

Cũng vì chả mở được nên mình mới nghĩ ra cái cách hơi chuối là đưa tất cả các bản vẽ cần mở về cùng một file rồi làm việc với file này. Sau đó thì lại tách các file kết quả ra bằng các lệnh cad thông dụng bác ạ. Với phương án này thì mình đã làm được rồi, nhưng nó chuối quá nên mình không post lên và để đó để dành khi hữu sự thì xài tạm vậy.

Còn mình vẫn đang cố các cách khác sao cho nó có hiệu quả hơn và khả dĩ được coi là tự động như bác ndbngo đã yêu cầu.

Hề hề hề, cái sự dựa cột thì mình cũng dựa lâu lâu rồi, nghe cũng được lắm, mà mót cũng được không ít bác ạ. Tuy nhiên mình thấy đôi khi cũng nên cho người ta biết cái dốt của mình thì cái sự mót nó sẽ được khá hơn bác ạ.

Hề hề hề...

Chúc bác dồi dào sức khỏe để thức lâu lâu, giúp anh em Cadviet có thêm cảm hứng đi mót bác nhé.....

  • Vote tăng 1

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
gia_bach    1.442
Chào bác Giabach,

Bác có thể hướng dẫn thêm về vấn đề: "Trong VD trên tôi mở file với thuộc tính là BackRound hay InVisible." này hay không????

Quả thực đây là một vấn đề mà mình cũng loay hoay chưa tìm ra lời giải. Mở một file text thì qua diễn đàn và các bác chỉ dẫn mình đã hiểu được và có thể sử dụng, Nhưng mở các file bản vẽ .DWG hay thậm chí .sldpart ra để xử lý trong lisp thì mình chưa biết cách. Rất mong bác chỉ giáo thêm.

Cám ơn bác trước.

Chào bác phamthanhbinh,

Vì khả năng diễn giải có hạn. Bác vui lòng tham khảo các ví dụ sau :

VD1 : Open file sử dụng hàm Vla-Open

với tùy chọn Set Active (đưa về hiện hành) cho file.

Sau khi open file, bác làm việc với đối tuợng VLA đuợc gán vào biến file-opened

 

(defun c:openFile (/ doc file-opened fileName openflag)
 (vl-load-com)  
 (setq fileName (getfiled "FILE TO OPEN"  ""  "dwg" 16))
 (if (equal (vla-get-FullName(vla-get-ActiveDocument (vlax-get-Acad-Object))) fileName)
   (princ (strcat "\nFile ban chon : "
	       fileName
	       " da duoc mo roi. \nVa dang duoc Set Activate." ) )
   (progn
     (setq doc (vla-get-documents (vlax-get-acad-object)))
     (setq openFlag nil)
     (vlax-for dwg doc
(if (= (vla-get-FullName dwg) fileName)
  (progn
    (setq file-opened dwg openFlag T)
    (princ (strcat "\nFile ban chon : "
		   (vla-get-FullName file-opened)
		   " da duoc mo roi. \nNhung chua duoc Set Activate." ) )	)) )
     (if (not openFlag)
(progn
  (setq file-opened (vla-open doc fileName))
  (princ (strcat "\nLisp vua thuc hien mo file : "
		 (vla-get-FullName file-opened)
		 "\nNhung chua duoc Set Activate." ) )))
     (initget "Y N y n")
     (setq actFlag (getkword "\nBan co muon Set Activate cho file khong (Y/N):"))
     (if (= actFlag "Y")
(vla-activate file-opened)  )))
 (princ )  )

 

VD2 : Tạo Layer có tên "CadViet" trên tất cả các file đang mở :

(thay đổi biến layName cho phù hợp)

(defun c:AddLayer (/ layexist layname)
 (setq layName "CadViet"
layExist nil)
 (vlax-for dwg (vla-get-Documents (vlax-get-acad-object))
   (vlax-for lay (vla-get-layers dwg)
     (if (= (vla-get-name lay) layName)
(setq layExist T)) )
   (if (not layExist)
   (vl-catch-all-apply 'vla-add (list (vla-get-layers dwg) layName))))
 (princ))

 

VD3 : Thay thế các Text có giá trị "Text" với giá tri mới là "CadViet" trên tất cả các file đang mở :

(có thể thay thế tại dòng : (setq oldTxt "Text" newTxt "CadViet") cho phù hợp.)

(defun c:ReplaceTxt (/ newtxt oldtxt)
 ;(setq oldTxt (getstring "\nNhap gia tri Text can thay the :"))
 (setq oldTxt "Text"
newTxt "CadViet")
 (vlax-for dwg (vla-get-Documents (vlax-get-acad-object))
   (vlax-for lay (vla-get-layouts dwg)
     (vlax-for obj (vla-get-Block lay)
       (if (and
      (eq "AcDbText" (vla-get-ObjectName obj))
      (eq oldTxt (vla-get-TextString obj)))
         (vla-put-TextString obj newTxt))))
   (vla-regen dwg acAllViewports))
 (princ))

  • Vote tăng 2

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

Tạo một tài khoản hoặc đăng nhập để nhận xét

Bạn cần phải là một thành viên để lại một bình luận

Tạo tài khoản

Đăng ký một tài khoản mới trong cộng đồng của chúng tôi. Điều đó dễ mà.

Đăng ký tài khoản mới

Đăng nhập

Bạn có sẵn sàng để tạo một tài khoản ? Đăng nhập tại đây.

Đăng nhập ngay

Đăng nhập để thực hiện theo  

×