Đến nội dung


Hình ảnh
- - - - -

Nhờ các bác giải thích dùm tai sao lisp không thể chuyển qua file .vlx


  • Please log in to reply
5 replies to this topic

#1 xuandao0708

xuandao0708

    biết lệnh scale

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

Đã gửi 09 September 2009 - 12:37 AM

Em mới mót được 1 số lisp mà không thể chuyển qua file .vlx được, mong các Bác giải thích dùm.

;===============================================
; UnAnon.Lsp Jul 05, 1998
;======================================
(princ "\nCopyright © 1998, Fabricated Designs, Inc.")
(princ "\nLoading UnAnon v1.0 ")
(setq uan_ nil lsp_file "UnAnon")

;================== For Automated Calling From Another Program =========
(defun uan_auto (ar1) (UnAnon ar1))

;================== Macros =============================================
(defun PDot ()(princ "."))

(PDot);++++++++++++ Set Modes & Error ++++++++++++++++++++++++++++++++++
(defun uan_smd ()
(SetUndo)
(setq olderr *error*
*error* (lambda (e)
(and (/= e "quit / exit abort")
(princ (strcat "\nError: *** " e " *** ")))
(command "_.UNDO" "_END" "_.U")
(uan_rmd))
uan_var '(
("CMDECHO" . 0) ("MENUECHO" . 0) ("MENUCTL" . 0) ("MACROTRACE" . 0)
("OSMODE" . 0) ("SORTENTS" . 119)("MODEMACRO" . ".")
("BLIPMODE" . 0) ("EXPERT" . 0) ("SNAPMODE" . 1) ("PLINEWID" . 0.0)
("ORTHOMODE" . 1) ("GRIDMODE" . 0) ("ELEVATION" . 0) ("THICKNESS" . 0)
("FILEDIA" . 0) ("FILLMODE" . 0) ("SPLFRAME" . 0) ("UNITMODE" . 0)
("TEXTEVAL" . 0) ("ATTDIA" . 0) ("AFLAGS" . 0) ("ATTREQ" . 1)
("ATTMODE" . 1) ("UCSICON" . 1) ("HIGHLIGHT" . 1) ("REGENMODE" . 1)
("COORDS" . 2) ("DRAGMODE" . 2) ("DIMZIN" . 1) ("PDMODE" . 0)
("CECOLOR" . "BYLAYER") ("CELTYPE" . "BYLAYER")))
(foreach v uan_var
(setq m_v (cons (getvar (car v)) m_v)
m_n (cons (car v) m_n))
(setvar (car v) (cdr v)))
(princ (strcat (getvar "PLATFORM") " Release " (substr (ver) 18 2)
" - Convert To Anonymous Blocks ....\n"))
(princ))

(PDot);++++++++++++ Return Modes & Error +++++++++++++++++++++++++++++++
(defun uan_rmd ()
(setq *error* olderr)
(mapcar 'setvar m_n m_v)
(command "_.UNDO" "_END")
(prin1))

(PDot);++++++++++++ Set And Start An Undo Group ++++++++++++++++++++++++
(defun SetUndo ()
(and (zerop (getvar "UNDOCTL"))
(command "_.UNDO" "_ALL"))
(and (= (logand (getvar "UNDOCTL") 2) 2)
(command "_.UNDO" "_CONTROL" "_ALL"))
(and (= (logand (getvar "UNDOCTL") 8) 8)
(command "_.UNDO" "_END"))
(command "_.UNDO" "_GROUP"))

(PDot);++++++++++++ Get Entity Name ++++++++++++++++++++++++++++++++++++
(defun GetOne (/ st os)
(setq os (getvar "SNAPMODE") s nil)
(setvar "SNAPMODE" 0)
(while (not st)
(setq st (ssget)))
(while (> (sslength st) 1)
(setq st nil)
(princ "\nOnly 1 At A Time Please\n")
(while (not st)
(setq st (ssget))))
(setvar "SNAPMODE" os)
(setq s (ssname st 0)))

(PDot);++++++++++++ Convert An Anonymous Block To Named Block ++++++++++
(defun UnAnon (b / tdef en ed bc bn bd in) ;Supply ename
(setq bn "TEMP1" bc 1)
(while (tblsearch "BLOCK" bn)
(setq bc (1+ bc) bn (strcat "TEMP" (itoa bc))))
(and (= (type cool.gif 'ENAME)
(setq bd (entget cool.gif
in (cdr (assoc 2 bd))))
(if (or (not bd)
(not in)
(/= "INSERT" (cdr (assoc 0 bd)))
(/= "*U" (substr in 1 2))
(= (logand (cdr (assoc 70 (tblsearch "BLOCK" in))) 4) 4)
(= (logand (cdr (assoc 70 (tblsearch "BLOCK" in))) 16) 16)
(= (logand (cdr (assoc 70 (tblsearch "BLOCK" in))) 32) 32))
(progn
(princ "*** Not An Anonomymous Block *** ")
(setq bn nil bc nil bd nil in nil b nil)
(exit)))
(setq tdef (tblsearch "BLOCK" in)
en (cdr (assoc -2 tdef))
ed (entget en))
(entmake (list (cons 0 "BLOCK")
(cons 2 bn)
(cons 70 0)
(cons 10 (cdr (assoc 10 tdef)))))
(entmake ed)
(while (setq en (entnext en))
(setq ed (entget en))
(entmake ed))
(entmake (list (cons 0 "ENDBLK")))
(setq bd (subst (cons 2 bn) (assoc 2 bd) bd))
(entmod bd)
(entupd cool.gif
(princ (strcat "\n" bn)))

(PDot);************ Main Program ***************************************
(defun uan_ (/ m_v m_n olderr uan_var s)
(uan_smd)
(GetOne)
(UnAnon s)
(uan_rmd))

(defun c:UnAnonall (/ ss i)
(setq ss (ssget "X" (list (cons 0 "INSERT")(cons 67 (if (= (getvar "TILEMODE") 1) 0 1)))))
(and ss
(setq i (sslength ss))
(while (not (minusp (setq i (1- i))))
(setq en (ssname ss i))
(if (= "*U" (substr (cdr (assoc 2 (entget en))) 1 2))
(UnAnon en))))
(prin1))

(PDot);************ Load Program ***************************************
(defun C:UnAnon () (uan_))
(if uan_ (princ "\nUnAnon Loaded\n"))
(prin1)
;================== End Program ========================================



;Copy DT tu 1 XREF hay block
;;;--- CPYXREF - Copy any entity from an XREF or a block.
;;;
;;;--- Legalities:
;;; Copyright 2002-2004 by JefferyPSanders.com
;;; All rights reserved.
;;;
;;;; You may use this program for free. You may not obtain profit without consent
;;; from Jeffery P Sanders. You may make copies of this program and distribute as
;;; long as the legalities remain in tact.
;;;
;;; End of Legalities
;;;
;;;--- Created on 7/18/02
;;;

;;;--- Main application
(defun C:CXF()

;;;--- Turn the command echo off
(setvar "cmdecho" 0)

;;;--- Save some system variables
(setq origCmddia(getvar "cmddia"))
(setq origFiledia(getvar "filedia"))

;;;--- Set some system variables
(setvar "cmddia" 0)
(setvar "filedia" 0)

;;;--- Select an entity
(if (setq entselected(entsel "\n Select XRef or Block: "))
(progn

;;;--- Save the entity name
(setq en(car entselected))

;;;--- Save the point selected
(setq selectedPt(cadr entselected))

;;;--- Get entity's DXF group codes
(setq enlist(entget en))

;;;--- If it is a block
(if(= "INSERT" (cdr(assoc 0 enlist)))
(progn

;;;--- Get the dxf group codes for the first sub-entity
(setq enlist2(tblNext "block" en))

;;;--- Save the file name of the block
(setq shortFileName(cdr(assoc 2 enlist))) ;thanks to Günther Bittner for fix

;;;--- Set a mark for the undo command
(command "undo" "mark")

;;;--- Make the XREF part of the drawing temporarily
(command "-xref" "bind" shortFileName)

;;;--- Explode the block temporarily
(command "explode" en)

;;;--- Get the entity at the point selected originally if it exist
(if (setq eset(ssget selectedPt))
(progn

;;;--- Get the name of the entity selected
(setq en(ssname eset 0))

;;;--- Get the DXF group codes of the entity
(setq enlist(entget en))

;;;--- Make a wblock named "X2"
(if(findfile "x2.dwg")
(command "_wblock" "x2" "y" "" selectedPt en "")
(command "_wblock" "x2" "" selectedPt en "")
)

;;;--- Undo everything back to the marked position
(command "undo" "Back")

;;;--- Insert the X2 block
(setq pt1(getpoint selectedPt "\n Insertion Point: "))
(command "insert" "*x2" pt1 "" "")

)
(alert "*Error* - Select a sub-entity.")
)
)
(alert "*Error* - Select a block or an XREF.")
)
)
(alert "*Error* - Select a block or an XREF please.")
)

;;;--- Reset system variables
(setvar "cmddia" origCmddia)
(setvar "filedia" origFiledia)

;;;--- Turn command echo back on
(setvar "cmdecho" 1)

;;;--- Inform the user
(princ "\n ...CPYXREF.lsp Complete. ")
(princ "\n By: Jeffery P. Sanders 7/19/02 Copyright 2002-2004 by JefferyPSanders.com")

;;;--- Suppress last echo for a clean exit
(princ)
)



Tiện đây các Bác cho em hỏi thêm về lisp UnAnonall này là tại sao khi mình add vào coment của cad để khởi động mặc định thì nó báo lỗi như sau:
Loading UnAnon v1.0 .....; error: malformed list on input
Nhưng khi mình mở cad load file lisp thì nó lại chạy được. Mong nhận sự hồi âm của các Bác sớm. Thank các Bác nhiều.
  • 0

#2 gia_bach

gia_bach

    biết lệnh adcenter

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 1431 Bài viết
Điểm đánh giá: 1425 (rất tốt)

Đã gửi 09 September 2009 - 09:55 AM

Em mới mót được 1 số lisp mà không thể chuyển qua file .vlx được, mong các Bác giải thích dùm.
.........
; UnAnon.Lsp Jul 05, 1998
............
;Copy DT tu 1 XREF hay block
;;;--- CPYXREF - Copy any entity from an XREF or a block.
............
Tiện đây các Bác cho em hỏi thêm về lisp UnAnonall này là tại sao khi mình add vào coment của cad để khởi động mặc định thì nó báo lỗi như sau:
Loading UnAnon v1.0 .....; error: malformed list on input
Nhưng khi mình mở cad load file lisp thì nó lại chạy được. Mong nhận sự hồi âm của các Bác sớm. Thank các Bác nhiều.

Bạn viết khó hiểu quá!
- lisp nào không thể chuyển qua file .vlx đuợc ? : UnAnon.Lsp hay Copy DT tu 1 XREF hay block
khi bạn Load UnAnon v1.0 -> Cad báo lỗi error: malformed list on input thì đuơng nhiên bạn không thể convert qua .vlx (chỉ khi nào Cad load file lisp thành công, bạn mới có thể chuyển qua file .vlx đuợc)

- trong codebox Lisp UnAnon.Lsp bị lỗi ở dòng : (and (= (type cool.gif 'ENAME) , bạn có thể vô trang http://www.draftsperson.net để download lại.
  • 1

#3 xuandao0708

xuandao0708

    biết lệnh scale

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

Đã gửi 11 September 2009 - 12:43 AM

Bác Gia_Bach ơi cho em hỏi 1 chút là nếu em chạy lisp cxf và lisp Unanon thì các lệnh co bản của Cad như New, Open, save ... nó mất cái bảng hiện để mình chỉnh thư mục. Không biết là nó bị gì, nếu được thì khôi phục như thế nào. Mong nhận được hồi âm của Bác sớm. Em đã cài lại cad nhưng nó vẫn bị.

Command: cxf

Select XRef or Block: *Cancel*
; error: Function cancelled

Command:
Command: UnAnon
Regenerating model.
Microsoft Windows NT Version 5.1 (x86) Release (e - Convert To Anonymous
Blocks ....

Select objects: *Cancel*

Error: *** Function cancelled *** Regenerating model.

Command: menu
Enter customization file name or [. (for none)] Do\Lisp hay\ACAD>: *Cancel*

Command: *Cancel*

Command: menu
Enter customization file name or [. (for none)] Do\Lisp hay\ACAD>: *Cancel*

Command: *Cancel*
  • 0

#4 gia_bach

gia_bach

    biết lệnh adcenter

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 1431 Bài viết
Điểm đánh giá: 1425 (rất tốt)

Đã gửi 11 September 2009 - 07:35 AM

Bác Gia_Bach ơi cho em hỏi 1 chút là nếu em chạy lisp cxf và lisp Unanon thì các lệnh co bản của Cad như New, Open, save ... nó mất cái bảng hiện để mình chỉnh thư mục. Không biết là nó bị gì, nếu được thì khôi phục như thế nào. Mong nhận được hồi âm của Bác sớm. Em đã cài lại cad nhưng nó vẫn bị.
................................

Có phải Bạn nói mất hộp thọai chọn file và tại dòng lệnh CAD xuất hiện : Enter name of drawing to open <.>: khi gọi lệnh Open ...
Để xuất hiện hộp thọai chọn file (Select File) : đặt biến hệ thống FILEDIA = 1
  • 2

#5 xuandao0708

xuandao0708

    biết lệnh scale

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

Đã gửi 12 September 2009 - 12:18 PM

Em cá mơn Bác nhiều. Tiện thể đây Bác có thể chỉnh đoạn code cho nó không bị sửa biến hệ thống thành 0 khi chạy lisp mà nhấn Esc để thoát lệnh. Lisp này em
down được trên trang JefferyPSanders.com, trong trang này có lệnh xoá line trùng rất hay mà nó không cho down, Bác có thể viết 1 lisp tương tự như vậy không? Nếu được thì hay quá vì khi em ghép nhiều tờ bản đồ với nhau thì thường xuyên bị trường hợp line trùng. Một lần nữa xin cả mơn Bác.
;;;Copy DT tu 1 XREF hay block
;;;--- CPYXREF - Copy any entity from an XREF or a block.
;;;
;;;--- Legalities:
;;; Copyright 2002-2004 by JefferyPSanders.com
;;; All rights reserved.
;;;
;;;; You may use this program for free. You may not obtain profit without consent
;;; from Jeffery P Sanders. You may make copies of this program and distribute as
;;; long as the legalities remain in tact.
;;;
;;; End of Legalities
;;;
;;;--- Created on 7/18/02
;;;

;;;--- Main application
(defun C:CXF()

;;;--- Turn the command echo off
(setvar "cmdecho" 0)

;;;--- Save some system variables
(setq origCmddia(getvar "cmddia"))
(setq origFiledia(getvar "filedia"))

;;;--- Set some system variables
(setvar "cmddia" 0)
(setvar "filedia" 0)

;;;--- Select an entity
(if (setq entselected(entsel "\n Select XRef or Block: "))
(progn

;;;--- Save the entity name
(setq en(car entselected))

;;;--- Save the point selected
(setq selectedPt(cadr entselected))

;;;--- Get entity's DXF group codes
(setq enlist(entget en))

;;;--- If it is a block
(if(= "INSERT" (cdr(assoc 0 enlist)))
(progn

;;;--- Get the dxf group codes for the first sub-entity
(setq enlist2(tblNext "block" en))

;;;--- Save the file name of the block
(setq shortFileName(cdr(assoc 2 enlist))) ;thanks to Günther Bittner for fix

;;;--- Set a mark for the undo command
(command "undo" "mark")

;;;--- Make the XREF part of the drawing temporarily
(command "-xref" "bind" shortFileName)

;;;--- Explode the block temporarily
(command "explode" en)

;;;--- Get the entity at the point selected originally if it exist
(if (setq eset(ssget selectedPt))
(progn

;;;--- Get the name of the entity selected
(setq en(ssname eset 0))

;;;--- Get the DXF group codes of the entity
(setq enlist(entget en))

;;;--- Make a wblock named "X2"
(if(findfile "x2.dwg")
(command "_wblock" "x2" "y" "" selectedPt en "")
(command "_wblock" "x2" "" selectedPt en "")
)

;;;--- Undo everything back to the marked position
(command "undo" "Back")

;;;--- Insert the X2 block
(setq pt1(getpoint selectedPt "\n Insertion Point: "))
(command "insert" "*x2" pt1 "" "")

)
(alert "*Error* - Select a sub-entity.")
)
)
(alert "*Error* - Select a block or an XREF.")
)
)
(alert "*Error* - Select a block or an XREF please.")
)

;;;--- Reset system variables
(setvar "cmddia" origCmddia)
(setvar "filedia" origFiledia)

;;;--- Turn command echo back on
(setvar "cmdecho" 1)

;;;--- Inform the user
(princ "\n ...CPYXREF.lsp Complete. ")
(princ "\n By: Jeffery P. Sanders 7/19/02 Copyright 2002-2004 by JefferyPSanders.com")

;;;--- Suppress last echo for a clean exit
(princ)
)

  • 0

#6 gia_bach

gia_bach

    biết lệnh adcenter

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 1431 Bài viết
Điểm đánh giá: 1425 (rất tốt)

Đã gửi 14 September 2009 - 09:54 AM

Em cá mơn Bác nhiều. Tiện thể đây Bác có thể chỉnh đoạn code cho nó không bị sửa biến hệ thống thành 0 khi chạy lisp mà nhấn Esc để thoát lệnh. Lisp này em down được trên trang JefferyPSanders.com, trong trang này có lệnh xoá line trùng rất hay mà nó không cho down, Bác có thể viết 1 lisp tương tự như vậy không? Nếu được thì hay quá vì khi em ghép nhiều tờ bản đồ với nhau thì thường xuyên bị trường hợp line trùng.
..............................

Chào xuandao0708
Theo tinh thần bài viết của bác phamthanhbinh Tham khảo
Thaistreetz : "Biết một chút về lisp sẽ rất chủ động trong công việc. Autolisp cũng là ngôn ngữ tương đối đơn giản, trực quan và dễ học."
Tui nghĩ bạn cũng nên bỏ 1 chút thời gian để nghiên cứu về LISP. Trong quá trình tìm hiểu có gì chưa thông, bạn cứ Post lên đây mọi nguời sẵn sàng giúp bạn.

1. Về lỗi biến hệ thống thành 0 khi chạy lisp mà nhấn Esc : bạn có thể xem bài viết về hàm *error* của bác Hoành và của bác Ssg
đọc kỹ 2 bài viết này bạn sẽ thốt lên giống như bạn CuongTk2 : "Bây giờ thì em đã hiểu Fugacar diệt trừ giun như thế nào".

2. lệnh xoá line trùng rất hay mà nó không cho down : trong Express Tool có lệnh Overkill chắc là hay hơn đấy.
  • 0