Chuyển đến nội dung
Diễn đàn CADViet
Đăng nhập để thực hiện theo  
amateurday

[Nhờ giúp đỡ] Chuyển xref thành no path

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

Nhờ các bác sửa cho em đoạn code này, mục đích là chuyển xref thành no path. Có lẽ lisp không update dữ liệu vào được nên không chạy. Em đang gặp khó khăn nếu reference name bị thay đổi (không trùng tên với file xref).

(defun c:aaa(/ tmp1)
;(vl-load-com)
(setq tmp1 (tblnext "BLOCK" 1))
(WHILE (/= tmp1 NIL)
  (IF(/= (assoc 1 tmp1) nil)
	(PROGN
   	(SETQ xfname (cdr (ASSOC 2 tmp1)))
   	(princ xfname) (princ "\n  Current: ")
   	(setq pathname (cdr (assoc 1 tmp1)))
   	(princ pathname)
(setq ct (strlen pathname))
(setq c ct)
(setq test (substr pathname ct 1))
(while (/= test "\\")              
 (setq test (substr pathname c 1))
 (setq c (1- c))
) ;while
(setq pathdir (substr pathname 1 c))
(setq filenameex (substr pathname (1+ c)))
(if (/= (assoc 2 tmp1) (substr pathname 1 (- (strlen pathname) 4)))
(progn
 (setq tmp1 (subst (cons 1 (strcat (cdr (assoc 2 tmp1)) ".dwg")) (assoc 1 tmp1) tmp1))
 (entmod tmp1)
 (entupd (cdr(assoc -2 tmp1)))
)
))))
(setq tmp1 (tblnext "BLOCK"))
)

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
(defun c:xrefnopath (/ xrefName ) ;@ketxu 4/6
 (vl-load-com)
 (vlax-for x (vla-get-Blocks (vla-get-ActiveDocument (vlax-get-acad-object)))
(cond ((and
  (vlax-property-available-p x 'isxref)
  (eq (vla-get-IsXref x) :vlax-true)
  ) 
 (vla-put-path
  x
  (strcat
(vl-filename-base (setq xrefName (vla-get-Path x)))
(vl-filename-extension  xrefName)
  )  
 )
 (vla-reload x)
 )
)
)
)

  • 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

Mình bị gặp lỗi này

Command: XREFNOPATH

; error: Automation Error. File access error

 

Cho mình hỏi liệu có thể chuyển đổi qua lại giữa Full path, Relative path và No path được không?

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

Nếu bạn xài thì hình như mình có nghịch một cái ở đây, lâu quá rùi ^^ CODE search trên mạng nhìu lắm í

  • 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

Cám ơn ket! Mình đã thử, khi chuyển từ Relative sáng Full thì tốt, nhưng ngược lại thì không thành công bạn ạ, chẳng có gì thay đổi hết!

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ôi chưa test. LL thử xem:

;Full Path to Relative Path
;;-------------=={ Full Path to Relative Path }==-------------;;
;;                                                            ;;
;;  Converts a Full XRef path to a Relative Path.         	;;
;;------------------------------------------------------------;;
;;  Author: Lee Mac, Copyright © 2011 - www.lee-mac.com   	;;
;;------------------------------------------------------------;;
;;  Arguments:                                                ;;
;;  dir  - Directory of the Drawing in which the Xref resides ;;
;;  path - Full Xref Path                                 	;;
;;------------------------------------------------------------;;
;;  Returns:  Relative XRef Path                              ;;
;;------------------------------------------------------------;;
(defun LM:XRef:Full->Relative ( dir path / p q ) (setq dir (vl-string-right-trim "\\" dir))
 (cond
   ( (and
       (setq p (vl-string-position 58  dir))
       (setq q (vl-string-position 58 path))
       (not (eq (strcase (substr dir 1 p)) (strcase (substr path 1 q))))
     )    
     path
   )
   ( (and
       (setq p (vl-string-position 92  dir))
       (setq q (vl-string-position 92 path))
       (eq (strcase (substr dir 1 p)) (strcase (substr path 1 q)))
     )
     (LM:Xref:Full->Relative (substr dir (+ 2 p)) (substr path (+ 2 q)))
   )
   ( (and
       (setq q (vl-string-position 92 path))
       (eq (strcase dir) (strcase (substr path 1 q)))
     )
     (strcat ".\\" (substr path (+ 2 q)))
   )
   ( (eq "" dir)
     path
   )
   ( (setq p (vl-string-position 92 dir))
     (LM:Xref:Full->Relative (substr dir (+ 2 p)) (strcat "..\\" path))
   )
   ( (LM:Xref:Full->Relative "" (strcat "..\\" path)) )
 )
)
;----- Example Function Calls:
;_$ (LM:XRef:Full->Relative "C:\\Folder1\\Folder2\\Folder3" "C:\\Folder1\\Folder2\\Folder3\\XRef.dwg") => ".\\XRef.dwg"
;_$ (LM:XRef:Full->Relative "C:\\Folder1\\Folder2\\Folder3" "C:\\Folder1\\Folder2\\XRef.dwg") => "..\\XRef.dwg"
;_$ (LM:XRef:Full->Relative "C:\\Folder1\\Folder2\\Folder3" "C:\\Folder1\\Folder4\\XRef.dwg") => "..\\..\\Folder4\\XRef.dwg"

  • 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

hihi.. cám ơn bác HẠ, nhưng cái này là hàm con, chỉ làm nhiệm vụ xử lý thôi. Mình muốn có cái nào ... trọn gói lun í, nghĩa là chỉ gõ lệnh là xong thôi! :)

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

Lôi cái này lên nhờ bác Doan Van Ha giúp cho.

Em rất cần "Full Path to Relative Path" cái này nhưng không thể "Phóng bút" như bác nói, mong bác hoàn thiện giúp cho.

Em có biết vài hàm lisp nhưng mấy hàm vl thì em mù tịt luôn. Hơn nữa cho em hỏi thêm không biết nó có dùng được cho Attach Image không? nếu không thì nhờ bác sửa cho nó dùng được với à.

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  

×