Đến nội dung


Hình ảnh
- - - - -

Mở và đóng một thư mục của file bản vẽ hiện hành


  • Please log in to reply
10 replies to this topic

#1 nataca

nataca

    biết lệnh adcenter

  • Members
  • PipPipPipPipPipPipPip
  • 712 Bài viết
Điểm đánh giá: 553 (tốt)

Đã gửi 09 April 2011 - 08:46 AM

- Trong quá trình làm việc với file bản vẽ không ít lần chúng ta cần mở thư mục chứa file bản vẽ đang mở. Theo cách thông thường thì chúng ta sẽ vào thư mục một cách thủ công, đôi khi thư mục để ở một nơi "thâm sâu bí hiểm" nên việc tìm đến nó khá mệt mỏi. Có một số cách để làm nhẹ nhàng đi như: tạo shortcut file hay thư mục... Tuy nhiên có một cách mà mình muốn bàn ở đây là mở bằng Autolisp:
+ Cad có một biến lưu đường dẫn thư mục chứa file đó là: "DWGPREFIX"
+ Vấn đề còn lại là Explorer thư mục này. Có một cách đơn giản là dùng hàm (startapp "explorer.exe"(getvar "DWGPREFIX")) . Tuy nhiên cách này không chơi được với những thư mục có dấu , (phẩy)-> hiện tại mới test được lỗi này
+ Cách nữa có thể chơi được với mọi loại tên thư mục:

(defun C:QE ()
(Explore (getvar "DWGPREFIX"))
)
(defun Explore ( Directory / Shell result )
(setq Shell (vla-getInterfaceObject (vlax-get-acad-object) "Shell.Application"))
(setq result (vl-catch-all-apply 'vlax-invoke (list Shell 'Explore Directory)))
(vlax-release-object Shell)
(not (vl-catch-all-error-p result))
)
-> Cách này rất ổn. Nó dùng "Shell.Application" để liên kết với windows.
- Tiếp theo là vấn đề thứ 2 của topic: Mở ra được rồi nhưng làm cách nào để đóng một thư mục đang mở hoặc để không mở trùng một thư mục đã mở trước. Mình thử tìm hiểu nhưng chưa nghĩ ra cách. Mọi người thử nghĩ tiếp xem sao. :)
  • 2

#2 pfievxd

pfievxd

    biết vẽ spline

  • Members
  • PipPip
  • 94 Bài viết
Điểm đánh giá: 6 (bình thường)

Đã gửi 10 April 2011 - 08:51 AM

Hehe, ý kiến của em là : ý tưởng của bác rất hay (^^)
  • 0

#3 DuongTrungHuy

DuongTrungHuy

    biết lệnh copy

  • Members
  • PipPipPip
  • 116 Bài viết
Điểm đánh giá: 41 (tàm tạm)

Đã gửi 10 April 2011 - 10:09 AM

Bạn tìm được 1 Func khá hay đó.
Đây cũng là vấn đề thường gây khó chịu cho người vẽ. Mình cũng thử nhiều lần mà không được, có lẽ do Lisp cắt liên lạc sau lệnh Open.
Nhờ sự gợi nhớ của Bạn Mình đã thử lại với VBA thì được. Cũng đơn giản thôi, Mình dùng hơi dân giả là như sau:
(defun Open()
(setq file1 (acet-ui-getfile "Open file" (getvar "DWGPREFIX") "dwg" "Drawing files" 0))
(If File1
(Progn
(setq kq (open "c:/windows/temp/open.txt" "w"))
(write-line file1 kq) (close kq)
(Command "vbarun" "module1.mofile_Open")
)
)
)
...Sau đó Bạn viết Module1 bằng VBA để đọc tên file và mở bản vẽ, cái này chắc Bạn viết được.
(dùng hàm ThisDrawing.Application.Documents.Open (tenfile))
  • 0

#4 VUVUZELA

VUVUZELA

    biết lệnh chamfer

  • Members
  • PipPipPipPip
  • 210 Bài viết
Điểm đánh giá: 97 (tàm tạm)

Đã gửi 10 April 2011 - 10:26 AM

-> Cách này rất ổn. Nó dùng "Shell.Application" để liên kết với windows.
- Tiếp theo là vấn đề thứ 2 của topic: Mở ra được rồi nhưng làm cách nào để đóng một thư mục đang mở hoặc để không mở trùng một thư mục đã mở trước. Mình thử tìm hiểu nhưng chưa nghĩ ra cách. Mọi người thử nghĩ tiếp xem sao. :)


Ban thu nghien cuu doan ma xem thu nhe

http://forums.augi.c...ead.php?t=60673
  • 2

Hệ thống Liên Kết, Thiết Kế Tự Động

ttps://www.facebook...etThietKeTuDong


#5 Thaistreetz

Thaistreetz

    biết lệnh adcenter

  • Advance Member
  • PipPipPipPipPipPipPip
  • 903 Bài viết
Điểm đánh giá: 505 (tốt)

Đã gửi 10 April 2011 - 12:59 PM

(defun Open()
(setq file1 (acet-ui-getfile "Open file" (getvar "DWGPREFIX") "dwg" "Drawing files" 0))
(If File1
(Progn
(setq kq (open "c:/windows/temp/open.txt" "w"))
(write-line file1 kq) (close kq)
(Command "vbarun" "module1.mofile_Open")
)
)
)
...Sau đó Bạn viết Module1 bằng VBA để đọc tên file và mở bản vẽ, cái này chắc Bạn viết được.
(dùng hàm ThisDrawing.Application.Documents.Open (tenfile))

Không biết mình có nhầm hay không, nhưng hình như bạn đã hiểu nhầm ý của nataca
Vuvuzela: Mình cũng không tìm thấy đoạn code đóng 1 thư mục trong link bạn gửi.

Ban đầu thì ý tưởng của bọn mình là kiểm tra xem window có đang mở thư mục chứa file bản vẽ hiện hành hay không? nếu có thì khi gõ lệnh QE sẽ không mở thêm nữa bởi sau khi dùng lệnh này 1 thời gian sẽ nảy sinh tính lười, không chịu đưa con chuột xuống start bar để mở thử mục có sẵn lên, vài lần QE là start bar đã chật kín. các bạn thử giải quyết theo hướng này xem thế nào.
PS: nếu dùng (startapp "explorer.exe"(getvar "DWGPREFIX")) thì không fải lăn tăn gì về vấn đề này.
  • 0

Hình đã gửi
IN HIM, I TRUST. THE TRUST IN MY GOD


#6 VUVUZELA

VUVUZELA

    biết lệnh chamfer

  • Members
  • PipPipPipPip
  • 210 Bài viết
Điểm đánh giá: 97 (tàm tạm)

Đã gửi 10 April 2011 - 10:02 PM

Không biết mình có nhầm hay không, nhưng hình như bạn đã hiểu nhầm ý của nataca
Vuvuzela: Mình cũng không tìm thấy đoạn code đóng 1 thư mục trong link bạn gửi.

Ban đầu thì ý tưởng của bọn mình là kiểm tra xem window có đang mở thư mục chứa file bản vẽ hiện hành hay không? nếu có thì khi gõ lệnh QE sẽ không mở thêm nữa bởi sau khi dùng lệnh này 1 thời gian sẽ nảy sinh tính lười, không chịu đưa con chuột xuống start bar để mở thử mục có sẵn lên, vài lần QE là start bar đã chật kín. các bạn thử giải quyết theo hướng này xem thế nào.
PS: nếu dùng (startapp "explorer.exe"(getvar "DWGPREFIX")) thì không fải lăn tăn gì về vấn đề này.


Vô mục này theo dõi tiếp nhé
http://www.cadtutor....-by-visual-lisp
:rolleyes:
  • 0

Hệ thống Liên Kết, Thiết Kế Tự Động

ttps://www.facebook...etThietKeTuDong


#7 Thaistreetz

Thaistreetz

    biết lệnh adcenter

  • Advance Member
  • PipPipPipPipPipPipPip
  • 903 Bài viết
Điểm đánh giá: 505 (tốt)

Đã gửi 10 April 2011 - 10:59 PM

Vô mục này theo dõi tiếp nhé
http://www.cadtutor....-by-visual-lisp
:rolleyes:

Chủ topic đó là 1 thằng tây tên nataca bác ạ. Chả biết nó có họ hàng gì với mod nataca của cadviet không nữa :D
  • 0

Hình đã gửi
IN HIM, I TRUST. THE TRUST IN MY GOD


#8 DuongTrungHuy

DuongTrungHuy

    biết lệnh copy

  • Members
  • PipPipPip
  • 116 Bài viết
Điểm đánh giá: 41 (tàm tạm)

Đã gửi 11 April 2011 - 07:35 AM

Không biết mình có nhầm hay không, nhưng hình như bạn đã hiểu nhầm ý của nataca

:) à vấn đề là thế này. Trong quá trình làm việc Mình cũng hay gặp khó chịu như Nataca đó là đang vẽ bản vẽ nằm ở thư mục d:\ve\nha1 nhưng khi dùng lệnh open để mở thêm 1 bản vẽ trong thư mục đó nhưng nó lại hiện lên 1 thư mục khác ví dụ c:\nha1\nha2... làm mât công phải bật đi tìm thư mục d:\ve\nha1 nên hơi lâu. bạn Nataca định dùng pp Explore để mở thư mục d:\ve\nha1 lên và mở file từ Explore đó xong rồi muốn đóng Explore lại nhưng chưa làm được. Mình hiểu như vậy không biết có đúng ý Nataca không?
Hôm qua Mình vừa tìm thấy trên Cadviet đoạn chương trình nyà hy vọng giải quyết trọn vẹn đước vấn đề mà không cần DVB
(defun c:openFile (/ doc file-opened fileName openflag)
(vl-load-com)
(setq doc (vla-get-documents (vlax-get-acad-object)) openFlag F
fileName (getfiled "File to Open" (getvar "DWGPREFIX") "dwg" 16)
)
(vlax-for dwg doc
(if (= (vla-get-FullName dwg) fileName)(setq file-opened dwg openFlag T))
)
(if (not openFlag) (setq file-opened (vla-open doc fileName)))
(vla-activate file-opened)
(princ)
)
...các Bạn thử xem nhé!
  • 0

#9 Thaistreetz

Thaistreetz

    biết lệnh adcenter

  • Advance Member
  • PipPipPipPipPipPipPip
  • 903 Bài viết
Điểm đánh giá: 505 (tốt)

Đã gửi 11 April 2011 - 08:53 AM

:) à vấn đề là thế này. Trong quá trình làm việc Mình cũng hay gặp khó chịu như Nataca đó là đang vẽ bản vẽ nằm ở thư mục d:\ve\nha1 nhưng khi dùng lệnh open để mở thêm 1 bản vẽ trong thư mục đó nhưng nó lại hiện lên 1 thư mục khác ví dụ c:\nha1\nha2... làm mât công phải bật đi tìm thư mục d:\ve\nha1 nên hơi lâu. bạn Nataca định dùng pp Explore để mở thư mục d:\ve\nha1 lên và mở file từ Explore đó xong rồi muốn đóng Explore lại nhưng chưa làm được. Mình hiểu như vậy không biết có đúng ý Nataca không?
Hôm qua Mình vừa tìm thấy trên Cadviet đoạn chương trình nyà hy vọng giải quyết trọn vẹn đước vấn đề mà không cần DVB
(defun c:openFile (/ doc file-opened fileName openflag)
(vl-load-com)
(setq doc (vla-get-documents (vlax-get-acad-object)) openFlag F
fileName (getfiled "File to Open" (getvar "DWGPREFIX") "dwg" 16)
)
(vlax-for dwg doc
(if (= (vla-get-FullName dwg) fileName)(setq file-opened dwg openFlag T))
)
(if (not openFlag) (setq file-opened (vla-open doc fileName)))
(vla-activate file-opened)
(princ)
)
...các Bạn thử xem nhé!

Đoạn code trên có thể viết lại bằng autolisp rất đơn giản. đúng là bạn đã hiểu sai ý của nataca cũng như mục đích của việc làm này.
ý của nataca đơn thuần chỉ là đóng cái cửa sổ Explorer nếu nó đang mở ở thư mục chứa bản vẽ hiện hành. nghĩa là khi gõ lệnh QE thì chương trình sẽ đóng thư mục ấy rồi lại mở nó lên. nghe thì ngớ ngẩn nhưng việc này nhằm tránh mở 1 thư mục bằng nhiều cửa sổ.
Việc tạo ra lệnh mở thư mục này mục đích cũng không như bạn nghĩ. trong quá trình làm việc có thể chúng ta fải truy xuất một số file khác nữa ngoài dwg (excel, word...) cùng nằm trong thư mục bản vẽ hoặc trong 1 thư mục cùng cấp với thư mục bản vẽ. khi đó lệnh này giúp ta đỡ được 1 chút mệt mỏi vì fải dò dẫm đi tìm cái thư mục mình cần.
  • 0

Hình đã gửi
IN HIM, I TRUST. THE TRUST IN MY GOD


#10 ketxu

ketxu

    Copier - Paster - Editor

  • Moderator
  • PipPipPipPipPipPipPip
  • 5684 Bài viết
Điểm đánh giá: 2606 (tuyệt vời)

Đã gửi 11 April 2011 - 09:03 AM

@DTH : Để kiểm tra File đã Open và Folder đã Open khác nhau hoàn toàn :)
  • 0

Thành viên nhóm CadMagic.
Mời bạn ghé thăm facebook nhóm - Page viết lisp theo yêu cầu  :
CAD MAGIC


#11 phamductai1989

phamductai1989

    biết pan

  • Members
  • Pip
  • 7 Bài viết
Điểm đánh giá: 0 (bình thường)

Đã gửi 24 March 2015 - 09:18 PM

minh có doạn con nay ai huong dan minh với cảm ơn mọi ng nhiu nhá
minh dang rat can
("open" ("d:\\kqdd\\gcn_to1\\23.dwg")(1)
minh muon sửa
("open" ("d:\\kqdd\\gcn_i\\j.dwg")(2)
i.j la 2 bien nhap tu command de mo linh
  • 0