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

[Giúp đỡ ]Nhờ sửa hộ lisp ghi toạ độ cọc

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

Các anh ơi , e có 1 lisp cắm cọc Lệnh " TD " sau khi thực hiện lệnh , cad chèn 1 ATT block ghi số hiệu và tọa độ X , Y . Em muốn nhờ các anh sửa hộ lisp khi ghi tọa độ cọc thì bỏ phần số hiệu và hình tròn bên ngoài chỉ còn tọa độ X và Y của cọc . Cám ơn các anh trước . Link lisp :

http://www.mediafire.com/?94gowcqaw9tl1dl

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ác anh ơi , e có 1 lisp cắm cọc Lệnh " TD " sau khi thực hiện lệnh , cad chèn 1 ATT block ghi số hiệu và tọa độ X , Y . Em muốn nhờ các anh sửa hộ lisp khi ghi tọa độ cọc thì bỏ phần số hiệu và hình tròn bên ngoài chỉ còn tọa độ X và Y của cọc . Cám ơn các anh trước . Link lisp :

http://www.mediafire.com/?94gowcqaw9tl1dl

Hề hề hề,

Giá mà bạn nhón tay gửi thêm cho cái bản vẽ có chứa ATT Block gì đó của bạn và cái kết quả bạn muốn thì hay quá. Có nhõn cái lisp thế ni thì biết sửa ra răng hè???? Bỏ attribute SH và vòng tròn, thế có bỏ cả cái khung chữ nhật chứa cái vòng tròn đó không hỉ???

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

Trong khi chờ mọi người tìm cách giải quyết vấn đề của chính bạn và kêu giời, hãy chịu khó giải quyết nó bằng các cách có thể đi đã. Mình tạm thời nghĩ bạn hoàn toàn có thể thử dùng ReplaceBlock của Express để thay thế Block mới vào Block cũ, với ATT tương ứng vòng tròn ở chế độ Invisible

  • 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

Em đã thử sửa block khi xuất ra tọa độ , nhưng phương án đó không khả thi .Em vào trong lisp sửa đoạn mã bỏ đi đoạn chèn ATT số hiệu và vòng tròn đi nhưng khi load lisp thì không xuất ra được tọ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

Em đã thử sửa block khi xuất ra tọa độ , nhưng phương án đó không khả thi .Em vào trong lisp sửa đoạn mã bỏ đi đoạn chèn ATT số hiệu và vòng tròn đi nhưng khi load lisp thì không xuất ra được tọa độ .

Không khả thi làn ntn bạn nhỉ :mellow:

Không xuất tọa độ thì máy nó báo ntn bạn nhỉ :huh:

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ác anh ơi , e có 1 lisp cắm cọc Lệnh " TD " sau khi thực hiện lệnh , cad chèn 1 ATT block ghi số hiệu và tọa độ X , Y . Em muốn nhờ các anh sửa hộ lisp khi ghi tọa độ cọc thì bỏ phần số hiệu và hình tròn bên ngoài chỉ còn tọa độ X và Y của cọc . Cám ơn các anh trước . Link lisp :

http://www.mediafire.com/?94gowcqaw9tl1dl

chưa kịp xem cái lisp nó ntn, gửi bạn cái này.

http://www.cadviet.com/upfiles/3/hdhyr.lsp

  • 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ưa kịp xem cái lisp nó ntn, gửi bạn cái này.

http://www.cadviet.com/upfiles/3/hdhyr.lsp

Hề hề hề,

Cái lisp này của bác có vẻ chưa ổn vì:

1/- Trong trường hợp cái block "BANGTOADO" đã có rồi và nó hổng giống cái bác muốn thì sao hè???

2/- Cái block do bác tạo ra khi chưa có block "BANGTOADO" hình như thừa ra một ô chữ nhật trống do cái PLine

(command "PLINE" '(0 0) '(14.5 0) '(14.5 5) '(0 5) "c")

Có nhẽ bác nên sửa thành:

(command "PLINE" '(3.5 0) '(14.5 0) '(14.5 5) '(3.5 5) "")

3/- Cái vòng lặp While của bác có vẻ như không muốn dừng lại. Nó sẽ chạy tít mù cho coi.

Hơn nữa cái hàm progn đặt thêm vô làm chi cho nó..... xấu lisp

  • 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

Hề hề hề,

Cái lisp này của bác có vẻ chưa ổn vì:

1/- Trong trường hợp cái block "BANGTOADO" đã có rồi và nó hổng giống cái bác muốn thì sao hè???

2/- Cái block do bác tạo ra khi chưa có block "BANGTOADO" hình như thừa ra một ô chữ nhật trống do cái PLine

(command "PLINE" '(0 0) '(14.5 0) '(14.5 5) '(0 5) "c")

Có nhẽ bác nên sửa thành:

(command "PLINE" '(3.5 0) '(14.5 0) '(14.5 5) '(3.5 5) "")

3/- Cái vòng lặp While của bác có vẻ như không muốn dừng lại. Nó sẽ chạy tít mù cho coi.

Hơn nữa cái hàm progn đặt thêm vô làm chi cho nó..... xấu lisp

Hề hề hề, cái này em sửa vội. Với lại họ yêu cầu là bỏ số hiệu và vòng tròn đi nên em làm thế. Chứ ngon thì còn vài thứ nữa, xét xem có block BANGTOADO chưa nữa chứ... Hề hề hề. Chạy tít mù tắp thì khi nào ESC thì thôi ko chọn cọc nữa. Hiii. Cảm ơn bác Bình góp ý. Hii

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

Gửi anh bản vẽ có chứa bảng tọa độ cọc trước và sau khi sửa ạ. Cám ơn anh ạ, chúc anh sức khỏe và gặp nhiều may mắn.

http://www.mediafire.com/?hcgvq0cbfwhq9ds

Hề hề hề,

Bạn xài thử cái đồ đi mót này coi có ưng cái bụng không hè. Cái ni mình mót của bác thanhduan2407 về sửa chữa lại và bổ sung tí ti cho nó ra cái bạn cần. Việc sửa từ cái lisp bạn gửi e hơi lâu và có vẻ quá sức của mình do nó hơi rắc rối đổi kẹo. Chỉ nguyên cái việc dò theo các hàm con cũng toe oe oét hết cả mắt rùi. Vốn dĩ lười nên vớ luôn cái của bác Thanhduăn2407 để mần cho nó lẹ. Hề hề hề. bạn nhớ cám ơn bác ấy nghen.

(DEFUN C:TD( / os cst cmda atd ent i enlst ac ans toadoX toadoY )
                 (vl-load-com)
                 (command "undo" "be")
(setq os (getvar "OSMODE"))
;;;;;;; (command "UNDO" "G")
(setq cst (getvar "TEXTSTYLE"))
(command "STYLE" "VNARIALNARROW" ".VNARIAL NARROW" "" "" "" "" "")
(setvar "DIMASZ" 2)
(setvar "DIMTXT" 20)
(setvar "DIMTAD" 0)
                 (setq CMDA (getvar "cmdactive"))
                 ;;;;; (setvar  "cmdactive" 1)
                 (setq atd (getvar "attdia"))
                 (setvar "attdia" 0)
                 ;;;;; (setvar  "cmddia" 0)
(if (not (tblsearch "BLOCK" "BANGTOADO"))
   (matblk)
                    (progn
                                  (alert "\n Block BANGTOADO da co, hay kiem tra cac thuoc tinh cua block nay")
                                  (setq ent (cdr (assoc  -2 (tblsearch "block" "BANGTOADO"))))
                                  (setq i 1)
                                  (setq enlst (list))
                                  (while ent
                                           (if (/= (cdr (assoc 0 (entget ent))) "ATTDEF")
                                               (setq enlst (append enlst (list (cdr (assoc 0 (entget ent))))))
                                               (setq enlst (append enlst (list (cdr (assoc 3 (entget ent))))))
                                           )
                                           (setq ent (entnext ent))
                                  )
                                  (setq ac "")
                                  (foreach a enlst 
                                             (setq ac (strcat ac " " a))
                                  )
                                  (alert  (strcat "\n Cac doi tuong trong block la: " ac ))
                                  (setq ans (getstring t "\n Ban muon insert block Bangtoado <y or n>: "))
                                  (if (/= (strcase ans) "Y")
                                      (progn
                                             (command "rename" "b" "BANGTOADO" (getstring t "\n Nhap ten block moi khac: "))
                                             (matblk)
                                              ;;;;;;(setq loop nil)
                                       )
                                   )
                   )
)
(setq loop T)

(while  loop
    (While  (setq p1 (getpoint "\nChon vi tri coc: "))
    	;;;;;;;;;;;(setvar "OSMODE" "ON")

	(setq toadoX (cadr p1))
	(setq toadoY (car p1))
    	(setq p2 (getpoint "\nDat tai:   "))
	(setvar "OSMODE" 0)
	(command "LEADER" p1 p2  "" "" "n")
                                   (command "insert" "BANGTOADO" p2 1 1 0 (rtos toadoX 2 3) (rtos toadoY 2 3) )
    	(setq p1 nil)
    	(setq p2 nil)
   )
                   ;;;;;;;(setq ans (getstring t "\n Ban muon tiep tuc <y or n>: "))
                   ;;;;;;;(if (/= (strcase ans) "Y")
                    (setq loop nil)
                   ;;;;;;;;)
)
                 ;;;;;;;;(setvar "cmddia" 1)
                 ;;;;;;; (setvar "cmdactive" cmda)
                 (setvar "attdia" atd)
                 (command "undo" "e")
                 (princ)
)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(defun Matblk ()
(setvar "OSMODE" 0)
(setq cla (getvar "CLAYER") cec (getvar "CECOLOR"))
(setvar "CLAYER" "0")
(setvar "CECOLOR" "BYBLOCK")
(setq ssline (ssadd))
(command "PLINE" '(3.5 0) '(14.5 0) '(14.5 5) '(3.5 5) "")
(ssadd (entlast) ssline)
(command "LINE" '(3.5 0) '(3.5 5) "")
(ssadd (entlast) ssline)
(command "LINE" '(3.5 2.5) '(14.5 2.5) "")
(ssadd (entlast) ssline)
(command "ATTDEF" "" "YYYYYY.YYYY" "To¹ ®é Y" "" '(4 3) 1.5 0)
(setq ssatt_yy (ssadd))(ssadd (entlast) ssatt_yy)
(command "ATTDEF" "" "XXXXXX.XXXX" "To¹ ®é X" "" '(4 0.5) 1.5 0)
(setq ssatt_xx (ssadd))(ssadd (entlast) ssatt_xx)
(command "BLOCK" "BANGTOADO" '(3.5 0) ssline  ssatt_yy ssatt_xx "")
(setvar "CLAYER" cla)(setvar "CECOLOR" cec)
(princ)
)

 

Hề hề hề,

Khi dùng lisp này bạn chú ý mấy điểm hơi chuối như sau:

1/- Khi chạy lisp (lệnh vưỡn là TD) nếu trên bản vẽ chửa có block Bangtoado thì nó sẽ tự tạo ra cái block này thỏa mãn yêu cầu của bạn và bạn chỉ cần chọn các vị trí cọc cũng như điểm chèn của block là nó sẽ chèn vô cho bạn. Tới khi nào bạn mỏi tay hay ngán không thích chèn nữa thì đừng pick chọn điểm nữa mà cứ chí cho thằng enter một phát là lisp sẽ ngừng chạy.

2/- khi trong bản vẽ đã có block mang tên Bangtoado, lisp sẽ thông bào cho bạn biết và bạn phải nhấn enter để lisp tiếp tục chỉ cho bạn biết trong cái block mang ten bangtoado đó có những đối tượng và thuộc tính nào. bạn chịu khó dòm ky kỹ cái bảng thông báo để quyết định câu trả lời cho câu hỏi hiện ra sau khi bạn enter phát nữa. Nếu bạn thấy cái block đó đúng là cái bạn cần thì khi trả lời cho câu hỏi mà lisp đưa ra, bạn chọn "y" (yes). Khi đó lisp sẽ tiếp tục chạy và chèn cái block này vào các vị trí cọc như trên.

Còn nếu như bạn thấy nó có các đối tượng và thuộc tính không giống cái bạn cần,(giả tỷ như nó có nhiều thuộc tính hơn hay nhiều đối tượng hơn..... ) thì bạn sẽ trả lời là n hoặc chả thèm trả lời nữa, cứ chí đại thằng enter phát nữa thì lisp sẽ đổi tên cái thằng block này thành một tên khác do bạn chọn để tạo ra một block mang tên Bangtoado mới có các đặc tính mà bạn cần và tiếp tục cho bạn chọn vị trí cọc cũng như điểm chèn block theo con mắt nhà nghề của bạn.

3/- Theo cái ngu ý của mình thì khi bạn không chắc chắn rằng cái block có sẵn đúng với cái bạn cần thì cứ nhấn đại enter khi lisp hỏi "Ban muon insert block Bangtoado <y or n>: ". Tuy nhiên bạn phải nhớ các cái tên block đã có sẵn kẻo mà bạn nhập cái tên block mới trùng với 1 trong các tên này thì lisp sẽ báo lỗi đó. Thực ra mình có thể làm thêm bước kiểm tra cái tên mới nhập này, song do lười nên bạn thông cảm. Nếu thực sự cần, mình sẽ bổ sung sau.

 

Hãy thử xem nhé và cho phản hồi để mình còn biết đường mà mò mẫm hỉ.

Chúc bạn vui

  • 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

Bác PhamThanhBinh thật là con người chịu khó, cần mẫn, nhiệt tình và đặc biệt là rất thích mót. Hề hề hề. Biết bao giờ mót được nhiều như bác ấy nhở. Mình lại mót lại của bác ây đấy mà. Hii. Cũng dựa vào của bác Bình em thêm cho bạn ấy cái xuất tọa độ vừa đánh dấu cọc cho bạn đấy này. Hiii

(defun c:XTDA(/  ent i obj pos ss str Stt tmp z zero) ;;;;Xuat toa do Attribute voi ten BANGTOADO
 (vl-load-com)
 (princ "\nChon doi tuong can xuat thuoc tinh :" )
 (if (and
(setq ss (ssget (list (cons 0 "INSERT")(cons 2 "BANGTOADO"))))
(setq tmp (getfiled "Ten file xuat toa do" (getvar "dwgprefix") "CSV" 1))  )
   (progn
     (setq tmp (open tmp "a") i -1)
     (while (setq ent (ssname ss (setq i (1+ i))))
(setq obj (vlax-ename->vla-object ent))
(foreach att (vlax-invoke obj 'GetAttributes)
  (cond
    ( (= (vla-get-TagString att) "YYYYYY.YYYY")
      (setq Y (vla-get-TextString att)) )
    ( (= (vla-get-TagString att) "XXXXXX.XXXX")
      (setq X (vla-get-TextString att)) ))  )
(write-line (strcat Y "," X) tmp))
     (close tmp)) )
 (princ)
)

P/s: Bác Bình xem lại lúc chọn cọc thì ta nên để chế độ bắt điểm chứ. Vị trí đặt bảng tọa độ mới tắt đi mà. hii

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ác PhamThanhBinh thật là con người chịu khó, cần mẫn, nhiệt tình và đặc biệt là rất thích mót. Hề hề hề. Biết bao giờ mót được nhiều như bác ấy nhở. Mình lại mót lại của bác ây đấy mà. Hii. Cũng dựa vào của bác Bình em thêm cho bạn ấy cái xuất tọa độ vừa đánh dấu cọc cho bạn đấy này. Hiii

 

P/s: Bác Bình xem lại lúc chọn cọc thì ta nên để chế độ bắt điểm chứ. Vị trí đặt bảng tọa độ mới tắt đi mà. hii

Hề hề hề,

Bật tắt chế độ bắt điểm hổng phải dùng (setvar "osmode" "on") hay (setvar "osmode" "off" ) đâu nhé. hàm (setvar "osmode" .... ) đòi hỏi tham số đi kèm là một integer cơ mà. Và cũng có cả điều kiện cho cái integer đó đấy chứ chả phải khoái thằng nào thì cho thằng ấy đâu.

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

nhờ các bác sửa hộ em cái lisp xuất tọa độ,các bác sửa giúp em đưa chiều cao text về 4 và chữ số làm tròn sau dấu chấm là 2 thôi chứ không phải 4 nữa, cái vòng tròn và khung hình chữ nhật vẫn giữ nguyên ạ.Em cảm ơn mọi người rất nhiều. http://www.cadviet.com/upfiles/3/61260_toado_1.lsp

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ờ các bác sửa hộ em cái lisp xuất tọa độ,các bác sửa giúp em đưa chiều cao text về 4 và chữ số làm tròn sau dấu chấm là 2 thôi chứ không phải 4 nữa, cái vòng tròn và khung hình chữ nhật vẫn giữ nguyên ạ.Em cảm ơn mọi người rất nhiều. http://www.cadviet.c...260_toado_1.lsp

1). Sửa số 1.5 trong các dòng (command "ATTDEF...) thành 4.

2). Chương trình đã có cho bạn chọn số số lẻ, bạn xem lại 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ái chiều cao text em đã sửa được nhưng cái chỗ chọn số lẻ sau thập phân chỉnh mãi không đc bác ạ, phiền bác giúp em được ko ạ, em cảm ơn bác 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

 

cái chiều cao text em đã sửa được nhưng cái chỗ chọn số lẻ sau thập phân chỉnh mãi không đc bác ạ, phiền bác giúp em được ko ạ, em cảm ơn bác nhiều

Hề hề hề,

Bạn lưu ý đoạn code sau đây:

 

(if (not sle)

(setq sle 4)

);if

 

(setq sle0 (getint (strcat "\nSè ch÷ sè thËp ph©n (Tèi ®a=4; tèi thiÓu=0) <" (itoa sle) ">: ")))

(if sle0

(progn

(if (< sle0 0)(setq sle0 0))

(if (> sle0 4)(setq sle0 4))

(setq sle sle0)

);progn

);if

Đây là những đoạn code có liên quan tới sô chữ số thập phân đứng sau dấu ngắt thập phạn. Trong đó cái biến sle0 là do bạn nhập vào. Khi bạn d9a4 nhập giá trị của sle0 thì chương trình sẽ chộn đây là số chữ số lẻ mà bạn muốn.

Tuy nhiên nếu bạn chỉ nhập ở đây thì các trường hợp khác của hàm điều kiện (cond ....) nó vẫn có thể nhận giá trị của biến sle là 4 đã được gán phía trên.

Vì thế bạn còn phải sửa cả dòng code (setq sle 4) này thành giá trị số số lẻ mà bạn muốn mới được (tỷ như (setq sle 2)).Và bạn cũng cần lưu ý thêm là trong trường hợp bạn đặt biến sle >4 thì nó sẽ chỉ có tác dụng với các điều kiện khác của hàm (cond ...) ngoại trừ điều kiện ((= mark "L")....) bạn nhé.

Chúc bạn thành cô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

cái chiều cao text em đã sửa được nhưng cái chỗ chọn số lẻ sau thập phân chỉnh mãi không đc bác ạ, phiền bác giúp em được ko ạ, em cảm ơn bác nhiều

Trong lisp có 1 dòng nhắc có tuỳ chọn số số lẻ 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

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

×