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

Viết lisp theo yêu cầu [phần 2]

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

Cho mình hỏi có lisp nào như thế này ko?mình đã search rồi mà ko thấy!

ví dụ mình có bản vẽ có 100 bóng đèn, đã bị explode ra rồi, vậy giờ có cách nào quét chọn lại hết các bóng đèn đó thì nó trở lại thành block ko?(mỗi bóng đèn là một 1 block, tất cả các block cùng 1 tên,tên block do mình đặt!)

Thankss!

có ai giúp mình 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
Cho mình hỏi có lisp nào như thế này ko?mình đã search rồi mà ko thấy!

ví dụ mình có bản vẽ có 100 bóng đèn, đã bị explode ra rồi, vậy giờ có cách nào quét chọn lại hết các bóng đèn đó thì nó trở lại thành block ko?(mỗi bóng đèn là một 1 block, tất cả các block cùng 1 tên,tên block do mình đặt!)

Thankss!

Căng quá nhỉ? Vụ này rất khó xử. Thường thì dựa vào 1 điểm chung nào đó thì mới khôi phục được. Truongthanh hãy upload file có bóng đèn đó bị explode và có cái block bóng đèn đó lên đây 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
có ai giúp mình với!

Bạn phải gửi file lên thì mới biết cái block của bạn có những gì chớ. Cái yêu cầu của bạn khá oái oăm, nếu là mới lỡ tay thì bạn thử dùng undo xem sao. Còn nếu đã chọc ngoáy nó chán chê thì ...... toi.

Hề hề hề,....

  • 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ăng quá nhỉ? Vụ này rất khó xử. Thường thì dựa vào 1 điểm chung nào đó thì mới khôi phục được. Truongthanh hãy upload file có bóng đèn đó bị explode và có cái block bóng đèn đó lên đây nhé.

Hix cảm ơn bác Bình và bác TUE_NV, em nghe 2 bác nói vậy là em biết impossible!

thanks 2 bác đã quan tâm đền em!

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
Hix cảm ơn bác Bình và bác TUE_NV, em nghe 2 bác nói vậy là em biết impossible!

thanks 2 bác đã quan tâm đền em!

Truongthanh cứ gửi file lên biết đâu được tìm ra giải pháp.

Hoặc giả dụ như không tìm ra giải pháp thì chí ít cũng tìm ra cách để bạn xử lý nó 1 cách nhanh hơn, công việc đỡ vất vả hơn. Tuy nhiên, nếu có giải quyết được thì cũng không......

Truongthanh gửi file lên đây 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
@ nguyentuyen6: Bạn có thể xài cái này cho trường hợp của bạn. Nếu bạn không thể hãy post lên nhé.

 

Bac làm giúp mình cai multi nứa đc ko ? e loay hoay 1 lúc thì tắc tịt.

 

Nghĩa là chọn 1 vùng (Có thể có block hoặc không) >>>> lọc dim (nếu có block thì lấy lấy cả dim trong block luôn)

rồi áp dụng lệnh này với các dim vừa lọc xong ý. Cảm ơn bác.. hehe

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
Truongthanh cứ gửi file lên biết đâu được tìm ra giải pháp.

Hoặc giả dụ như không tìm ra giải pháp thì chí ít cũng tìm ra cách để bạn xử lý nó 1 cách nhanh hơn, công việc đỡ vất vả hơn. Tuy nhiên, nếu có giải quyết được thì cũng không......

Truongthanh gửi file lên đây nhé.

Nhờ TUE_NV xem dùm mình nhé!

http://www.cadviet.com/upfiles/3/den.dwg

Thanks TUE_NV nhiề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
@nguyên tiêu : Lisp như điều bạn muốn đã có trên diễn đàn rồi. Bạn chịu khó Tìm kiếm vậy.

 

Bác Tue_VN ơi, e đã thử với các từ khóa như: "lisp gióng dim", "lisp dim thẳng hàng", đều ko tìm được lisp mong muốn. Bác có thể bớt chút thời gian chỉ e chỗ nào có lisp đó ko ạ?

 

E cảm ơn 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

cái này mình hay dùng

 

 

;**********************************************************************
*********
;* WRITTEN BY DAO NGUYEN THANG 94X3 - HANOI ARCHITECTURAL UNIVERSITY (VIETNAM) *
;*******************************************************************************

(defun myerror (s)                    ; If an error (such as CTRL-C) occurs
                                     ; while this command is active...
 (cond
   ((= s "quit / exit abort") (princ))
   ((/= s "Function cancelled") (princ (strcat "\nError: " s)))
 )
 (setvar "cmdecho" CMD)             ; Restore saved modes
 (setvar "osmode" OSM)
 (setq *error* OLDERR)               ; Restore old *error* handler
 (princ)
)
;*******************************************************************************

(DEFUN C:CD (/ CMD SS LTH DEM PT DS KDL N70 GOCX GOCY PT13 PT14 PTI PT13I PT14I
               PT13N PT14N O13 O14 N13 N14 OSM OLDERR PT10 PT11)
(SETQ CMD (GETVAR "CMDECHO"))
(SETQ OSM (GETVAR "OSMODE"))
(SETQ OLDERR *error*
     *error* myerror)
(PRINC "Chon doi tuong Dimension!")
(SETQ SS (SSGET))
(SETVAR "CMDECHO" 0)
(SETQ PT (GETPOINT "Diem cat Dimension:"))
(SETQ PT (TRANS PT 1 0))
(COMMAND "UCS" "W")
(SETQ LTH (SSLENGTH SS))
(SETQ DEM 0)
(WHILE (< DEM LTH)
   (PROGN
(SETQ DS (ENTGET (SSNAME SS DEM)))
(SETQ KDL (CDR (ASSOC 0 DS)))
(IF (= "DIMENSION" KDL)
   (PROGN
	(SETQ PT10 (CDR (ASSOC 10 DS)))
	(SETQ PT11 (CDR (ASSOC 11 DS)))
	(SETQ PT13 (CDR (ASSOC 13 DS)))
	(SETQ PT14 (CDR (ASSOC 14 DS)))
	(SETQ N70 (CDR (ASSOC 70 DS)))
	(IF (OR (= N70 32) (= N70 33) (= N70 160) (= N70 161))
	   (PROGN
		(SETQ GOCY (ANGLE PT10 PT14))
		(SETQ GOCX (+ GOCY (/ PI 2)))
	   )
	)
	(SETVAR "OSMODE" 0)
	(SETQ PTI (POLAR PT GOCX 2))
	(SETQ PT13I (POLAR PT13 GOCY 2))
	(SETQ PT14I (POLAR PT14 GOCY 2))
	(SETQ PT13N (INTERS PT PTI PT13 PT13I NIL))
	(SETQ PT14N (INTERS PT PTI PT14 PT14I NIL))
	(SETQ O13 (ASSOC 13 DS))
	(SETQ O14 (ASSOC 14 DS))
	(SETQ N13 (CONS 13 PT13N))
	(SETQ N14 (CONS 14 PT14N))
	(SETQ DS (SUBST N13 O13 DS))
	(SETQ DS (SUBST N14 O14 DS))
	(ENTMOD DS)
   )
)
(SETQ DEM (+ DEM 1))
   )
)
(COMMAND "UCS" "P")
(SETVAR "CMDECHO" CMD)
(SETVAR "OSMODE" OSM)
(setq *error* OLDERR)               ; Restore old *error* handler
(PRINC)
)
;******************************************************************************

(DEFUN C:BD (/ CMD SS LTH DEM PT DS KDL N70 GOCX GOCY PT13 PT14 PTI
               PT10 PT10I PT10N O10 N10 PT11 PT11N O11 N11 KC OSM OLDERR)
(SETQ CMD (GETVAR "CMDECHO"))
(SETQ OSM (GETVAR "OSMODE"))
(SETQ OLDERR *error*
     *error* myerror)
(PRINC "Chon doi tuong dimension!")
(SETQ SS (SSGET))
(SETVAR "CMDECHO" 0)
(SETQ PT (GETPOINT "Diem di chuyen den:"))
(SETQ PT (TRANS PT 1 0))
(COMMAND "UCS" "W")
(SETQ LTH (SSLENGTH SS))
(SETQ DEM 0)
(WHILE (< DEM LTH)
   (PROGN
(SETQ DS (ENTGET (SSNAME SS DEM)))
(SETQ KDL (CDR (ASSOC 0 DS)))
(IF (= "DIMENSION" KDL)
   (PROGN
	(SETQ PT13 (CDR (ASSOC 13 DS)))
	(SETQ PT14 (CDR (ASSOC 14 DS)))
	(SETQ PT10 (CDR (ASSOC 10 DS)))
	(SETQ PT11 (CDR (ASSOC 11 DS)))
	(SETQ N70 (CDR (ASSOC 70 DS)))
	(IF (OR (= N70 32) (= N70 33) (= N70 160) (= N70 161))
	   (PROGN
		(SETQ GOCY (ANGLE PT10 PT14))
		(SETQ GOCX (+ GOCY (/ PI 2)))
	   )
	)
	(SETVAR "OSMODE" 0)
	(SETQ PTI (POLAR PT GOCX 2))
	(SETQ PT10I (POLAR PT10 GOCY 2))
	(SETQ PT10N (INTERS PT PTI PT10 PT10I NIL))
	(SETQ KC (DISTANCE PT10 PT10N))
	(SETQ O10 (ASSOC 10 DS))
	(SETQ N10 (CONS 10 PT10N))
	(SETQ DS (SUBST N10 O10 DS))
	(SETQ PT11N (POLAR PT11 (ANGLE PT10 PT10N) KC))
	(SETQ O11 (ASSOC 11 DS))
	(SETQ N11 (CONS 11 PT11N))
	(SETQ DS (SUBST N11 O11 DS))
	(ENTMOD DS)
   )
)
(SETQ DEM (+ DEM 1))
   )
)
(COMMAND "UCS" "P")
(SETVAR "CMDECHO" CMD)
(SETVAR "OSMODE" OSM)
(setq *error* OLDERR)
(PRINC)
)

  • 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
Chào bạn hdg2318,

Hề hề hề, cứ thế có phải dễ người dễ ta không hỉ.

Đây là cái tớ xào nấu ra từ cái bạn gửi. Bạn coi có dùng được không, có cần thêm mắm muối chi nữa thì bạn cứ thêm cho vừa miệng hỉ.

Bạn lưu ý rằng việc nhập text theo bảng của bạn phải nhập cho đàng hoàng, hàng ra hàng mà cột ra cột chớ có lèm nhèm thò ra thụt vô, nhấp lên nhỏm xuống là lisp nó chê đó. Khoảng rộng cột cần nhập ở đây chính là cái khoảng cách từ cốt thứ hai đến cột kết quả. Mình để cho bạn tùy nhập cho sướng, muốn chỗ mô cũng được . Hề hề hề.

Còn cái lisp bạn gửi là lisp chia chớ nhân cái chi đâu. Cái đó cũng không đúng với cái yêu cầu bạn post lắm vì nó chèn đúng vào chỗ số nhân chớ không cho ra cột kết quả khác như bạn post trên hình. Tuy nhiên với trình độ của bạn thì việc sửa nó chả khó gì mình để bạn tự làm nha.

(defun c:nhantxt (/ ss1 ss2 lsn1 lsn2 lsn wid y y1 k m as h g l p pt kq num num1)
(command "undo" "be")
(alert "\n Chon cot text thu nhat")
(setq ss1 (ssget (list (cons 0 "TEXT"))))
(txt2n ss1)
(setq lsn1 lsn)
(alert "\n Chon cot text thu hai")
(setq ss2 (ssget (list (cons 0 "TEXT"))))
(txt2n ss2)
(setq lsn2 lsn
       wid (getreal "\n Nhap khoang rong cot can nhap: ")
)
(foreach num lsn1
(setq y (caddr (assoc 10 (entget (car num))))
        k (cadr num)
)
(foreach num1 lsn2
(setq y1 (caddr (assoc 10 (entget (car num1))))
       m (cadr num1)
)
(if (= y1 y)
  (progn
   (setq kq (* m k)
           as (entget (car num1))
           h (cdr (assoc 40 as))
           g (cdr (assoc 50 as))
           l (cdr (assoc 8 as))
           p (assoc 10 as)
           pt (list (+ wid (cadr p)) y1 (cadddr p))
   )
   (entmake (list (cons 0 "TEXT") (cons 1 (rtos kq 2 1)) (cons 10 pt) (cons 40 h) (cons 50 g) (cons 8 l)))
   )
)
)
)
(command "undo" "e")
(princ)
)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(defun txt2n (ss / n i num e el ) 
(setq n (sslength ss )
       i 0
       lsn (list)
)
(While (< i n)
      (setq e (ssname ss i)
              el (entget e)
              num (atof (cdr (assoc 1 el)))
              lsn (append lsn (list (list e num)))
              i (1+ i)
      )
)
lsn
)

Hề hề hề

chúc bạn vui.

 

hề hề, cám ơn bác, thực chất mình chỉ cần làm việc với text thôi, ko cần gì đến bề rộng cột, khoảng cách cột cả.

biết rằng dùng Table của CAD sẽ hữu ích hơn rất nhiều, nhưng c.ty không dùng bảng của CAD bao giờ, với lại forrm của khung tên bản vẽ không cho phép dùng :bigsmile:

Thanks các bác đã giúp đỡ. :undecided: :bigsmile:

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
Nhờ TUE_NV xem dùm mình nhé!

http://www.cadviet.com/upfiles/3/den.dwg

Thanks TUE_NV nhiều!

truongthanh thử cái này nhé :

(defun c:rbl(/ ov vl ss i j eL expss ent_blk disb dise ent dd dc);restore block
 (command "undo" "be")
(IF (acet-util-ver)
(PROGN
 (defun *error* (msg)
   (if ov (mapcar 'setvar vl ov)); reset Sys Vars
   (if (not(wcmatch (strcase msg) "*BREAK,*EXIT*,*CANCEL*"))
     (princ (strcat "\n** Error: " msg " **")))
   (princ))
   (setq vl '("osmode" "cmdecho") 
  ov (mapcar 'getvar vl))  
(mapcar 'setvar vl '(0 0) )
 (setq ss (ssget '((0 . "LWPOLYLINE") (8 . "dien") (70 . 0))) i -1 j -1)
 (if (vl-cmdf "insert" "den" '(0 0 0) "1" "1" "0")
   (progn
     	(setq eL (entlast))
   	(Repeat (sslength (setq expss (acet-explode eL)))
  	(setq ent_blk (ssname expss (setq i (1+ i))))
     		(if (and (= (acet-dxf 0 (entget ent_blk)) "LWPOLYLINE" )
		 (= (acet-dxf 70 (entget ent_blk)) 0)
		 (= (acet-dxf 8 (entget ent_blk)) "dien")
	    )
	  (setq disb (distance (vlax-curve-getstartpoint ent_blk)
			       (vlax-curve-getendpoint ent_blk)
		     )
	  )
	)
  	(entdel ent_blk)
)
    )
 )
 (iF ss
 (while (setq ent (ssname ss (setq j (1+ j))))
   (setq dd (vlax-curve-getstartpoint ent))
   (setq dc (vlax-curve-getendpoint ent))
   (setq dise (distance dd dc) ang (/ (* 180 (- (angle dd dc) (/ pi 2))) pi))
   (vl-cmdf "erase" (ssget "f" (list dd dc)) "")
   (vl-cmdf "insert" "den" dd (/ dise disb) (/ dise disb) ang)
 )
 );iF
)
(alert "Chua cai Express")
);PROGN_IF
 (mapcar 'setvar vl ov)
 (command "undo" "end")
 (princ)
)

:undecided:

  • 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

- MÌnh có vấn đề này mong các bạn giúp đỡ (xem hình ảnh nhé)

- Bản vẽ của mình các đối tượng text đã bị dịch chuyển khỏii hướng ban đầu tức các giá trị Text alignment X, Text alignment Y, Text alignment Z, khác không . Chính vì thế nên mình không sử dụng được lisp nội suy cao độ giữa 3 điểm , do khi sử dụng thì giá trị nội suy nó bịn nhảy về vị trí mà

tại dó Text alignment X=0, Text alignment Y=0, Text alignment Z =0 . Mình đã thử khắc phục bằng cách move về đúng hướng text ban đầu NHUNG khổ nỗi mỗi giá trị text trong bản vẽ nó bị lệch khỏi hướng ban đầu là khác nhau NÊN ko thể làm thủ công được. Mong các bạn nghiên cứu giúp mình với . Cám on nhiều :undecided:

- Ðây là hình ảnh và file minh họa+ lisp nội suy(tên lệnh ns) (file sannen.vlx )

- File cad và lisp nếu cần có thể down tại đây:

http://www.cadviet.com/upfiles/3/text_alignment.dwg

http://www.cadviet.com/upfiles/3/sannen.rar

untitled.jpg

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
truongthanh thử cái này nhé :

(defun c:rbl(/ ov vl ss i j eL expss ent_blk disb dise ent dd dc);restore block
 (command "undo" "be")
(IF (acet-util-ver)
(PROGN
 (defun *error* (msg)
   (if ov (mapcar 'setvar vl ov)); reset Sys Vars
   (if (not(wcmatch (strcase msg) "*BREAK,*EXIT*,*CANCEL*"))
     (princ (strcat "\n** Error: " msg " **")))
   (princ))
   (setq vl '("osmode" "cmdecho") 
  ov (mapcar 'getvar vl))  
(mapcar 'setvar vl '(0 0) )
 (setq ss (ssget '((0 . "LWPOLYLINE") (8 . "dien") (70 . 0))) i -1 j -1)
 (if (vl-cmdf "insert" "den" '(0 0 0) "1" "1" "0")
   (progn
     	(setq eL (entlast))
   	(Repeat (sslength (setq expss (acet-explode eL)))
  	(setq ent_blk (ssname expss (setq i (1+ i))))
     		(if (and (= (acet-dxf 0 (entget ent_blk)) "LWPOLYLINE" )
		 (= (acet-dxf 70 (entget ent_blk)) 0)
		 (= (acet-dxf 8 (entget ent_blk)) "dien")
	    )
	  (setq disb (distance (vlax-curve-getstartpoint ent_blk)
			       (vlax-curve-getendpoint ent_blk)
		     )
	  )
	)
  	(entdel ent_blk)
)
    )
 )
 (iF ss
 (while (setq ent (ssname ss (setq j (1+ j))))
   (setq dd (vlax-curve-getstartpoint ent))
   (setq dc (vlax-curve-getendpoint ent))
   (setq dise (distance dd dc) ang (/ (* 180 (- (angle dd dc) (/ pi 2))) pi))
   (vl-cmdf "erase" (ssget "f" (list dd dc)) "")
   (vl-cmdf "insert" "den" dd (/ dise disb) (/ dise disb) ang)
 )
 );iF
)
(alert "Chua cai Express")
);PROGN_IF
 (mapcar 'setvar vl ov)
 (command "undo" "end")
 (princ)
)

:undecided:

chỉ biết nói 2 từ cảm ơn tuyệt vời!

Lisp này đúng với file CAD mình gửi!

Nhưng cho mình hỏi sao mình dùng với 1 block hình dạng khác (ví dụ block hình tròn hoặc hình vuông) cũng tên DEN luôn thì khi select object thì báo 0 found là sao vậy TUE_NV?hay là lisp này chỉ đúng với file CAD mình gửi thôi?

Thanks TUE rất nhiề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
Hề hề hề,

Vậy là bạn biết rồi, xin lỗi vì mình cầm đèn chạy trước ô tô. Hề hề hề.

Cái ý của bạn như vậy bạn có thể làm như sau:

1/- Chọn tập hợp gồm tất cả các đối tượng bạn muốn kiểm tra.

2/- Dùng vòng lặp while lặp qua tất cả các đối tượng có trong tập hợp đối tượng đã được chọn.

3/-trong quá trình lặp này bạn dùng hàm if để kiểm tra xem đối tượng có phải là block không, nếu đúng bạn explode nó ra, còn nếu không thì mặc xác nó bơ vơ.

4/- kết thúc vòng lặp.

 

Do bạn cũng đã có khả năng viết được nên bạn hãy thử viết theo hướng như tren xem sao. Nếu gặp khó khăn hãy post lên mọi nhười sẽ giúp bạn nhé.

Cám ơn bạn phamthanhbinh đã chỉ giáo

mình viết code thế này có đúng không vậy bạn

(defun c:exbl ()
(setq ssb (ssget))
(setq n (sslength ssb))
(setq i 0)
(while (< i n)
(setq n (sslength ssb))
(setq ent (ssname ssb i))
(setq name (cadr (entget ent)))
(if (equal name '(0 . "INSERT"))
(progn
(command "explode" ent)
(setq ssc (ssget "p"))
(setq n1 (sslength ssc))
(setq i1 0)
(while (< i1 n1)
(setq ent1 (ssname ssc i1))
(setq ssb (ssadd ent1 ssb))
(setq i1 (1+ i1))
)
)
)
(setq i (1+ i))
(setq n (sslength ssb))
)
)

Bạn cũng cho mình hỏi thêm phát

làm thế nào để explode thằng block đã scale théo trục x,y mà trong thằng đó có block.

Có code nào thay thế lệnh align không. code của mình viết nó toàn báo lỗi khi sử dụng 4 lần lệnh align.

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
chỉ biết nói 2 từ cảm ơn tuyệt vời!

Lisp này đúng với file CAD mình gửi!

Nhưng cho mình hỏi sao mình dùng với 1 block hình dạng khác (ví dụ block hình tròn hoặc hình vuông) cũng tên DEN luôn thì khi select object thì báo 0 found là sao vậy TUE_NV?hay là lisp này chỉ đúng với file CAD mình gửi thôi?

Thanks TUE rất nhiều!

Lisp chỉ đúng với file CAD bạn gửi thôi. Tue_NV đã nói rồi : Cái vụ Khôi phục Block này rất khó xử. Tùy từng trường hợp mà xử lý nó vậy. Bạn upload file có block đèn hình tròn hoặc hình vuông lên đây để khôi phục nó 1 luôn nhé. Không biết xử lý nó được không nữa, có những trường hợp bó tay.com <_>

 

Truong thanh chú ý rằng Lisp có thể áp dụng với Block Explode đã bị scale nữa đó nhé. Tuy nhiên, với trường hợp Block Explode bị scale theo 2 phương X và Y là khác nhau thì không còn đúng 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
Cám ơn bạn phamthanhbinh đã chỉ giáo

mình viết code thế này có đúng không vậy bạn

(defun c:exbl ()
(setq ssb (ssget))
(setq n (sslength ssb))
(setq i 0)
(while (< i n)
(setq n (sslength ssb))
(setq ent (ssname ssb i))
(setq name (cadr (entget ent)))
(if (equal name '(0 . "INSERT"))
(progn
(command "explode" ent)
(setq ssc (ssget "p"))
(setq n1 (sslength ssc))
(setq i1 0)
(while (< i1 n1)
(setq ent1 (ssname ssc i1))
(setq ssb (ssadd ent1 ssb))
(setq i1 (1+ i1))
)
)
)
(setq i (1+ i))
(setq n (sslength ssb))
)
)

 

Bạn thử cái này xem nhé:

(defun c:exbl ()

(setq ss (ssget '((0 . "INSERT"))))

(command ".explode" ss "")

(princ)

)

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
Lisp chỉ đúng với file CAD bạn gửi thôi. Tue_NV đã nói rồi : Cái vụ Khôi phục Block này rất khó xử. Tùy từng trường hợp mà xử lý nó vậy. Bạn upload file có block đèn hình tròn hoặc hình vuông lên đây để khôi phục nó 1 luôn nhé. Không biết xử lý nó được không nữa, có những trường hợp bó tay.com <_<

 

Truong thanh chú ý rằng Lisp có thể áp dụng với Block Explode đã bị scale nữa đó nhé. Tuy nhiên, với trường hợp Block Explode bị scale theo 2 phương X và Y là khác nhau thì không còn đúng nữa.

cảm ơn TUE nhiều!cái vụ block hình tròn hoặc hình vuông là mình test thử thôi!chứ tạm thời là bản vẽ của mình dùng mấy block đèn thì đã làm được rồi!sau này nếu mình gặp phải những dạng block khác thì chắc phải làm phiền đến TUE nữa rồi!(mình thấy khi thực hiện lệnh lisp thì select object là nó chọn cái Pline đúng ko?)

Thanks TUE nhiều và chúc sức khỏe TUE!

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
Bạn thử cái này xem nhé:

(defun c:exbl ()

(setq ss (ssget '((0 . "INSERT"))))

(command ".explode" ss "")

(princ)

)

Cám ơn bạn đã quan tâm.

Vấn đề của mình là nhóm đối tượng ssb của mình không có block nào trong đó. nếu có thì explode nó ra và thêm các phần tử đã explode vào nhóm đối tượng ssb. Vấn đề này mình đã giải quyết được như lisp trên rồi. Bởi vì mình dùng biến ssb vào mục đích khác nữa.

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 bạn phamthanhbinh đã chỉ giáo

mình viết code thế này có đúng không vậy bạn

(defun c:exbl ()
(setq ssb (ssget))
(setq n (sslength ssb))
(setq i 0)
(while ((setq n (sslength ssb))
(setq ent (ssname ssb i))
(setq name (cadr (entget ent)))
(if (equal name '(0 . "INSERT"))
(progn
(command "explode" ent)
(setq ssc (ssget "p"))
(setq n1 (sslength ssc))
(setq i1 0)
(while ((setq ent1 (ssname ssc i1))
(setq ssb (ssadd ent1 ssb))
(setq i1 (1+ i1))
)
)
)
(setq i (1+ i))
(setq n (sslength ssb))
)
)

Bạn cũng cho mình hỏi thêm phát

làm thế nào để explode thằng block đã scale théo trục x,y mà trong thằng đó có block.

Có code nào thay thế lệnh align không. code của mình viết nó toàn báo lỗi khi sử dụng 4 lần lệnh align.

Chào bạn Phamngoctukts,

1/ Về cái đoạn lisp bạn đã viết xin có vài góp ý như sau:

- Trong vòng lặp while, cái đoạn code (setq n (sslength ssb)) là không cần thiết nữa vì nó đã có ở trên và lisp đã xác định được n là gì rồi.

- Đoạn code (setq name (cadr (entget ent))) nên thay là (setq name (assoc 0 (entget ent))) vì hàm cadr là lấy phần tử thứ hai trong lít các mã dxf của đối tượng. Có một số đối tượng thì cái tên của nó không nằm ở vị trí thứ hai. Bạn cũng có thể dùng chi tiết hơn là (setq name (cdr(assoc 0 (entget ent)))) nhưng khi đó trong hàm điều kiện if bạn phải đổi lại là (if (= name "INSERT").....

- Việc bạn thêm hàm (setq n (sslength ssb)) vào cuối chương trình sẽ làm cho chương trình chạy lâu hơn mức cần thiết rất nhiều do sau mỗi bước lặp bạn lại gán thêm các đối tượng vừa được explode vào tập chọn ssb ở code sau: (setq ssb (ssadd ent1 ssb)). Việc làm này mình chưa rõ mục đích của bạn song theo cách suy nghĩ của mình thì có vẻ như là thừa bạn ạ vì cái tập chọn ssb chả cần thiết phải dính líu tới các đối tượng vừa explode ra để làm gì. Nếu bạn muốn trừng phạt chúng thì nhét nó vào một tập chọn khác sẽ tiện hơn.

2/- Việc xử lý các block nằm trong block với cùng một cách xử lý thì bạn có thể dùng phép đệ qui mà bác Tue_NV và các bác khác trên diễn đàn đã chỉ. Nó cũng nằm ngay trong topic này bạn ạ

http://www.cadviet.com/forum/index.php?sho...203&st=1640

3/- Code để thay thế lệnh align theo mình là có thể có được, xong bạn phải căn cứ vào từng trường hợp cụ thể của các đối tượng, các đặc trưng riêng của đối tượng mà viết lisp bạn ạ. Nhưng nó có hay hơn , tốt hơn lệnh align không thì mình không dám chắc.... Bởi vì lệnh này là do các cao thủ có sừng có mỏ cả làm ra chứ chả phải cái giống amateur như mình đâu. Hề hề hề, Còn tại sao nó chỉ cho bạn xài có 4 lần thì mình chưa rõ vì mình cũng chưa gặp như vậy. Có thể trong các biến hệ thống của bạn có thằng mô đó nó chọc ngoáy thằng align này. hề hề hề, ấy là mình cứ đoán mò vậy. Trúng trật gì sẽ có cao thủ khác chỉ dạy thêm...

Chúc bạn vui.

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
Chào bạn Phamngoctukts,

1/ Về cái đoạn lisp bạn đã viết xin có vài góp ý như sau:

- Trong vòng lặp while, cái đoạn code (setq n (sslength ssb)) là không cần thiết nữa vì nó đã có ở trên và lisp đã xác định được n là gì rồi.

- Đoạn code (setq name (cadr (entget ent))) nên thay là (setq name (assoc 0 (entget ent))) vì hàm cadr là lấy phần tử thứ hai trong lít các mã dxf của đối tượng. Có một số đối tượng thì cái tên của nó không nằm ở vị trí thứ hai. Bạn cũng có thể dùng chi tiết hơn là (setq name (cdr(assoc 0 (entget ent)))) nhưng khi đó trong hàm điều kiện if bạn phải đổi lại là (if (= name "INSERT").....

- Việc bạn thêm hàm (setq n (sslength ssb)) vào cuối chương trình sẽ làm cho chương trình chạy lâu hơn mức cần thiết rất nhiều do sau mỗi bước lặp bạn lại gán thêm các đối tượng vừa được explode vào tập chọn ssb ở code sau: (setq ssb (ssadd ent1 ssb)). Việc làm này mình chưa rõ mục đích của bạn song theo cách suy nghĩ của mình thì có vẻ như là thừa bạn ạ vì cái tập chọn ssb chả cần thiết phải dính líu tới các đối tượng vừa explode ra để làm gì. Nếu bạn muốn trừng phạt chúng thì nhét nó vào một tập chọn khác sẽ tiện hơn.

2/- Việc xử lý các block nằm trong block với cùng một cách xử lý thì bạn có thể dùng phép đệ qui mà bác Tue_NV và các bác khác trên diễn đàn đã chỉ. Nó cũng nằm ngay trong topic này bạn ạ

http://www.cadviet.com/forum/index.php?sho...203&st=1640

3/- Code để thay thế lệnh align theo mình là có thể có được, xong bạn phải căn cứ vào từng trường hợp cụ thể của các đối tượng, các đặc trưng riêng của đối tượng mà viết lisp bạn ạ. Nhưng nó có hay hơn , tốt hơn lệnh align không thì mình không dám chắc.... Bởi vì lệnh này là do các cao thủ có sừng có mỏ cả làm ra chứ chả phải cái giống amateur như mình đâu. Hề hề hề, Còn tại sao nó chỉ cho bạn xài có 4 lần thì mình chưa rõ vì mình cũng chưa gặp như vậy. Có thể trong các biến hệ thống của bạn có thằng mô đó nó chọc ngoáy thằng align này. hề hề hề, ấy là mình cứ đoán mò vậy. Trúng trật gì sẽ có cao thủ khác chỉ dạy thêm...

Chúc bạn vui.

Chào bạn phamthanhbinh

1. đầu tiên mình cũng nghĩ như bạn là tống cái lũ đỗi tượng đã explode vào một tập chọn khác. Nhưng trong đống đó có thằng vẫn là block thì sao nhỉ.

Vậy là mình tống tất cả lũ chúng nó vào trong tậo chon ssb ban đầu để vòng lặp tiếp tục kiểm tra xem còn thằng block nào không. Nếu có thi explode ra bao giờ không còn thằng nào thì thôi.

2. Ý của bạn có phải là explode thằng block trong thằng block không?.

3. Mình cũng trả hiểu sao nữa cái code ở trên mình viết cứ sư dụng đến lần thứ tư là báo lỗi "fatal error: Commands may not be nested more than 4 deep" theo mình thì nó lỗi ở lệnh align.

Cám ơn bạn đã quan tâm!

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
Chào bạn phamthanhbinh

1. đầu tiên mình cũng nghĩ như bạn là tống cái lũ đỗi tượng đã explode vào một tập chọn khác. Nhưng trong đống đó có thằng vẫn là block thì sao nhỉ.

Vậy là mình tống tất cả lũ chúng nó vào trong tậo chon ssb ban đầu để vòng lặp tiếp tục kiểm tra xem còn thằng block nào không. Nếu có thi explode ra bao giờ không còn thằng nào thì thôi.

2. Ý của bạn có phải là explode thằng block trong thằng block không?.

3. Mình cũng trả hiểu sao nữa cái code ở trên mình viết cứ sư dụng đến lần thứ tư là báo lỗi "fatal error: Commands may not be nested more than 4 deep" theo mình thì nó lỗi ở lệnh align.

Cám ơn bạn đã quan tâm!

Chào bạn Phamngoctukts,

1/- Nếu ý bạn muốn vậy thì bạn nên làm thêm một bước chọn nữa sau khi explode là nếu thằng nào là block mới nhét nó vào tập chọn ssb.

2/- Bạn đọc kỹ mấy bài của các bác khác trong topic này về cái phép đệ qui, nó không chỉ phá các block trong block được mà tất cả những gì bạn làm với block mẹ bạn cũng sẽ làm được vậy với các block con bạn ạ. Cái này mình cũng chỉ mới mót được thôi. Chương trình mẫu như bác Tue_NV đã viết... Ngoài ra phép đệ quy còn nhiều ứng dụng khác nữa bạn ạ. Tùy vào khả năng của bạn để lựa chọn mà thôi.

3/- Cái vụ thông báo lỗi như vậy của bạn tức là CAD nó bảo là các lệnh giống nhau không được tổ hợp quá bốn bước bạn ạ. Tỷ như khi bạn muốn lấy phần tử thứ 5 của một list chẳng hạn, nếu bạn viết (setq a (cadddr lst)) thì nó sẽ báo lỗi nhưng nếu bạn viết (setq a (car (cddddr lst))) thì nó lại chạy phe phé bạn ạ. Cái này mình cũng mới vỡ ra trong quá trình viết lisp bạn ạ.

 

Hề hề hề, chúc bạn vui nhé.

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ó code nào thay thế lệnh align không. code của mình viết nó toàn báo lỗi khi sử dụng 4 lần lệnh align.

Để viết lisp thay thế align thì:

-Chọn đối tượng.

-Chọn điểm xuất phát 1 (a), điểm đến 1 (b).

-Chọn điểm xuất phát 2 ©, điểm đến 2 (d).

-Lấy góc ac, dài ac.

-Lấy góc bd, dài bd.

Move đối tượng từ a đến b, rotate góc bằng góc bd-ac, scale tỉ lệ dài bd/ac.

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
Bac làm giúp mình cai multi nứa đc ko ? e loay hoay 1 lúc thì tắc tịt.

 

Nghĩa là chọn 1 vùng (Có thể có block hoặc không) >>>> lọc dim (nếu có block thì lấy lấy cả dim trong block luôn)

rồi áp dụng lệnh này với các dim vừa lọc xong ý. Cảm ơn bác.. hehe

Chào bạn nguyentuyen6,

Bạn xài thử xem còn gì chưa ổn không nhé.

(defun c:chsize ( / bng ebl stlst htlst sdlst hdlst bln ent els stl ht bld sd ent1
                         els1 std hd sdlst hdlst sst n i et el st bl e1 s1 el1 e2 e3 k m pt)
(vl-load-com)
(command "undo" "be")
(setq bng (car (entsel " \n Chon doi tuong block nguon "))
       stlst (list)
       htlst (list)
       sdlst (list)
       hdlst (list)
)
(while bng
(setq ebl (entget bng))
(if (= (cdr (assoc 0 ebl)) "INSERT")       
   (progn
            (setq  bln (cdr (assoc 2 ebl))
                     ent (cdr (assoc -2 (tblsearch "block"  bln)))         
             )
    )
   (progn
          (alert "\n Doi tuong chon khong phai la block, hay chon lai block chua cac doi tuong nguon")
          (setq bng (car (entsel "\n Chon block chua cac doi tuong nguon")))
    )
)
(setq bng nil)
)
(while ent
        (setq els (entget ent))
        (if  (= (cdr (assoc 0 els)) "TEXT" )
            (progn
                    (setq stl (cdr (assoc 7 els))
                            ht (cdr (assoc 40 els))
                            stlst (append stlst (list stl))
                            htlst (append htlst (list(append stlst (list ht))))
                            stlst (list)
                    )
              )
         )
         (if (= (cdr (assoc 0 els )) "DIMENSION")
            (progn 
                   (setq bld (cdr (assoc 2 els))
                           sd (cdr (assoc 3 els))
                           ent1 (cdr (assoc -2 (tblsearch "block" bld)))
                   )
                   (while ent1
                            (setq els1 (entget ent1))
                            (if (= (cdr (assoc 0 els1)) "MTEXT")
                                (progn
                                      (setq std (cdr (assoc 7 els1))
                                              hd (cdr(assoc 40 els1))
                                              sdlst (append sdlst (list sd))
                                              sdlst (append sdlst (list std))
                                              hdlst (append hdlst (list (append sdlst (list hd))))
                                              sdlst (list)
                                       )
                                   )
                               )
                               (setq ent1 (entnext ent1))
                    )
              )
           )

         (setq ent (entnext ent))
)

(alert "\n Chon tap doi tuong dich")
(setq sst (ssget (list (cons 0 "TEXT,MTEXT,DIMENSION,INSERT")))
       n (sslength sst)
       i 0
)
(while (         (setq et (ssname sst i)
                el (entget et)
        )
        (if (or (= (cdr (assoc 0 el)) "TEXT") (= (cdr (assoc 0 el)) "MTEXT"))
            (progn
                (setq  st (cdr (assoc 7 el)))
                (foreach ls htlst
                      (if (= (car ls) st)
                         (setq el (subst (cons 40 (cadr ls)) (assoc 40 el) el))
                      ) 
                      (entmod el)
                )
             )
         )

         (If (= (cdr(assoc 0 el)) "DIMENSION")
             (progn
                   (setq bl (cdr (assoc 2 el))
                           s1 (cdr (assoc 3 el))
                           e1 (cdr (assoc -2 (tblsearch "block" bl)))
                           e2 (entnext (entnext e1))
                           e3 (entnext e2)
                   )
                   (foreach ls1 hdlst
                           (if (= (car ls1) s1)
                               (progn
                                      (setq di (vlax-ename->vla-object et))
                                      (vla-put-textheight di (caddr ls1))
                                )
                             )
                     )
                     (command "regen")
               )
            )
            (if (= (cdr (assoc 0 el)) "INSERT")
                (upwb et htlst hdlst)
            )

         (setq i (1+ i))
)


(command "undo" "e")
(princ)

)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(defun UPWB (blk lst1 lst2 / e el s st bl e1 s1 el1 k m pt )
(setq s (cdr (assoc 2 (entget blk))))
(setq e (cdr (assoc -2 (tblsearch "BLOCK" s))))
(while e
(setq el (entget e))
(if (wcmatch (cdr (assoc 0 el)) "INSERT")
(UPWB e)
)
(if (or (= (cdr (assoc 0 el)) "TEXT") (= (cdr (assoc 0 el)) "MTEXT"))
            (progn
                (setq  st (cdr (assoc 7 el)))
                (foreach ls lst1
                      (if (= (car ls) st)
                         (setq el (subst (cons 40 (cadr ls)) (assoc 40 el) el))
                      ) 
                      (entmod el)
                )
             )
         )

(If (= (cdr(assoc 0 el)) "DIMENSION")
   (progn
           (setq bl (cdr (assoc 2 el))
                   s1 (cdr (assoc 3 el))
                   e1 (cdr (assoc -2 (tblsearch "block" bl)))
           )
           (foreach ls1 lst2
                   (if (= (car ls1) s1)
                       (progn
                               (setq di (vlax-ename->vla-object e))
                               (vla-put-textheight di (caddr ls1))
                        )
                    )
           )
           (command "regen")

    )
)

(setq e (entnext e))
)
)        

 

Việc sửa lại lisp không khó lắm đâu, chỉ cần bạn thích và kiên trì là sẽ được, với kiến thức của bạn nên tập dần việc sửa này để dần dần có thể làm chủ được công việc của mình, chả phải sợ thằng Tây nào cả bạn ạ.

Thực ra trong cái lisp này còn khá nhiều đoạn thừa, không cần thiết do quá trình viết lần trước mình lựa chọn nhiều hướng đi mà không được, nhưng vì mình lười nên cứ kệ nó đấy để viết tiếp và sửa lại. Nếu bạn rảnh hãy cố gắng tìm các chỗ đó, sửa đi sẽ được cái lisp ngon lành hơn bạn ạ. Thông cảm cho cái tính lười cố hữu của mình.

Chúc bạn vui.

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
Chào bạn nguyentuyen6,

Bạn xài thử xem còn gì chưa ổn không nhé.

(defun c:chsize ( / bng ebl stlst htlst sdlst hdlst bln ent els stl ht bld sd ent1
                         els1 std hd sdlst hdlst sst n i et el st bl e1 s1 el1 e2 e3 k m pt)
(vl-load-com)
(command "undo" "be")
(setq bng (car (entsel " \n Chon doi tuong block nguon "))
       stlst (list)
       htlst (list)
       sdlst (list)
       hdlst (list)
)
(while bng
(setq ebl (entget bng))
(if (= (cdr (assoc 0 ebl)) "INSERT")       
   (progn
            (setq  bln (cdr (assoc 2 ebl))
                     ent (cdr (assoc -2 (tblsearch "block"  bln)))         
             )
    )
   (progn
          (alert "\n Doi tuong chon khong phai la block, hay chon lai block chua cac doi tuong nguon")
          (setq bng (car (entsel "\n Chon block chua cac doi tuong nguon")))
    )
)
(setq bng nil)
)
(while ent
        (setq els (entget ent))
        (if  (= (cdr (assoc 0 els)) "TEXT" )
            (progn
                    (setq stl (cdr (assoc 7 els))
                            ht (cdr (assoc 40 els))
                            stlst (append stlst (list stl))
                            htlst (append htlst (list(append stlst (list ht))))
                            stlst (list)
                    )
              )
         )
         (if (= (cdr (assoc 0 els )) "DIMENSION")
            (progn 
                   (setq bld (cdr (assoc 2 els))
                           sd (cdr (assoc 3 els))
                           ent1 (cdr (assoc -2 (tblsearch "block" bld)))
                   )
                   (while ent1
                            (setq els1 (entget ent1))
                            (if (= (cdr (assoc 0 els1)) "MTEXT")
                                (progn
                                      (setq std (cdr (assoc 7 els1))
                                              hd (cdr(assoc 40 els1))
                                              sdlst (append sdlst (list sd))
                                              sdlst (append sdlst (list std))
                                              hdlst (append hdlst (list (append sdlst (list hd))))
                                              sdlst (list)
                                       )
                                   )
                               )
                               (setq ent1 (entnext ent1))
                    )
              )
           )

         (setq ent (entnext ent))
)

(alert "\n Chon tap doi tuong dich")
(setq sst (ssget (list (cons 0 "TEXT,MTEXT,DIMENSION,INSERT")))
       n (sslength sst)
       i 0
)
(while (< i n)
        (setq et (ssname sst i)
                el (entget et)
        )
        (if (or (= (cdr (assoc 0 el)) "TEXT") (= (cdr (assoc 0 el)) "MTEXT"))
            (progn
                (setq  st (cdr (assoc 7 el)))
                (foreach ls htlst
                      (if (= (car ls) st)
                         (setq el (subst (cons 40 (cadr ls)) (assoc 40 el) el))
                      ) 
                      (entmod el)
                )
             )
         )

         (If (= (cdr(assoc 0 el)) "DIMENSION")
             (progn
                   (setq bl (cdr (assoc 2 el))
                           s1 (cdr (assoc 3 el))
                           e1 (cdr (assoc -2 (tblsearch "block" bl)))
                           e2 (entnext (entnext e1))
                           e3 (entnext e2)
                   )
                   (foreach ls1 hdlst
                           (if (= (car ls1) s1)
                               (progn
                                      (setq di (vlax-ename->vla-object et))
                                      (vla-put-textheight di (caddr ls1))
                                )
                             )
                     )
                     (command "regen")
               )
            )
            (if (= (cdr (assoc 0 el)) "INSERT")
                (upwb et htlst hdlst)
            )

         (setq i (1+ i))
)
(command "undo" "e")
(princ)

)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(defun UPWB (blk lst1 lst2 / e el s st bl e1 s1 el1 k m pt )
(setq s (cdr (assoc 2 (entget blk))))
(setq e (cdr (assoc -2 (tblsearch "BLOCK" s))))
(while e
(setq el (entget e))
(if (wcmatch (cdr (assoc 0 el)) "INSERT")
(UPWB e)
)
(if (or (= (cdr (assoc 0 el)) "TEXT") (= (cdr (assoc 0 el)) "MTEXT"))
            (progn
                (setq  st (cdr (assoc 7 el)))
                (foreach ls lst1
                      (if (= (car ls) st)
                         (setq el (subst (cons 40 (cadr ls)) (assoc 40 el) el))
                      ) 
                      (entmod el)
                )
             )
         )

(If (= (cdr(assoc 0 el)) "DIMENSION")
   (progn
           (setq bl (cdr (assoc 2 el))
                   s1 (cdr (assoc 3 el))
                   e1 (cdr (assoc -2 (tblsearch "block" bl)))
           )
           (foreach ls1 lst2
                   (if (= (car ls1) s1)
                       (progn
                               (setq di (vlax-ename->vla-object e))
                               (vla-put-textheight di (caddr ls1))
                        )
                    )
           )
           (command "regen")

    )
)

(setq e (entnext e))
)
)        

 

Việc sửa lại lisp không khó lắm đâu, chỉ cần bạn thích và kiên trì là sẽ được, với kiến thức của bạn nên tập dần việc sửa này để dần dần có thể làm chủ được công việc của mình, chả phải sợ thằng Tây nào cả bạn ạ.

Thực ra trong cái lisp này còn khá nhiều đoạn thừa, không cần thiết do quá trình viết lần trước mình lựa chọn nhiều hướng đi mà không được, nhưng vì mình lười nên cứ kệ nó đấy để viết tiếp và sửa lại. Nếu bạn rảnh hãy cố gắng tìm các chỗ đó, sửa đi sẽ được cái lisp ngon lành hơn bạn ạ. Thông cảm cho cái tính lười cố hữu của mình.

Chúc bạn vui.

 

Cảm ơn bác tbinh rất nhiều!

Em vừa mới tìm hiểu líp nên chưa đâu vào đâu cả. hjx. Bác giúp e nốt cái này với nhé, nó như viên gạch chốt của vòm xây = gạch ý, ko có nó thì ko dùng đc:

 

Khi chọn block nguồn đó thì sẽ lấy giá trị scale của block đó ( theo trục X hay Y hay Z ( 1 trong 3 cái đó thôi) để nhân lên chiều cao của text và đim đích.

Ví Dụ: Giả sử Block nguồn bị scale lên 2 lần thì thì chiều cao của TEXT và TEXT_dim trong đối tượng đích được nhân lên 2 lần.

----------------Block nguồn bị scale lên 3 lần thì thì chiều cao của TEXT và TEXT_dim trong đối tượng đích được nhân lên 3 lần.

 

 

....................................

 

 

Yêu cầu trên của em là bởi vì: Khi scale cái block nguồn thì chièu cao của text và đim bên trong blok sẽ ko đổi >>>> mà tỷ lệ block nguồn với block khung tên là không đổi>>>> khi scale khung tên+block nguồn bao nhiêu đi nữa thì chiều cao text và đim khi dùng líp này trong bản vẽ ở bất kỳ tỷ lệ block nguồn nào cũng đều = nhau

PS: Sry Bác vì e đã ko lường hết được các trường hợp nên khi bác viết xong mới có thêm yêu cầu như vậy. Hjx

 

Thank Bác rất nhiề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

Ban phamthanhbinh ơi!Mình nhờ bạn chỉ giúp dùm nha! Mình có 1 file có nhiều bản vẽ, mình muốn viết lsp in nhiều bản vẽ theo ý muốn, như sau:\

- mình sẽ đặt 1 bvẽ là 1block tên 1,2,..

- Mình muốn khi in sẽ xuất hiện hộp thoại mình chọn tên block thì sẽ in ra bản vẽ đó.

nhập tên bản vẽ:1,2 thì sẽ in ra 2 bản vẽ .Bạn thấy có khả thi không ạ?Cảm ơn bạn nhiều lắm!Mong bạn nào biết chỉ cho mình với.Mình cũng mới bắt đầu học lisp 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
Khách
Chủ đề này bây giờ đã bị đóng lại để trả lời thêm.

×