Đến nội dung


Hình ảnh
* * * - - 8 Bình chọn

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


  • Chủ đề bị khóa Chủ đề bị khóa
3783 replies to this topic

#1661 phamthanhbinh

phamthanhbinh

    biết lệnh adcenter

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

Đã gửi 02 September 2010 - 02:20 PM

:D Trước hết E xin cảm ơn bác thanhbinh nhiều lắm.

E cũng vừa test thử líp bác vừa viết và có một vài chỗ mong bác hoàn thiện hộ E với nhé.

1. KHi thực hiện lísp. Đối với các text nếu có thể bác thêm hộ em với cả cái Mtext với nhé. ^^! (lúc em yêu cầu chưa có cái này, hehee, mới phát sinh )
2. Về đường Dim:
- Em thường để cái text dim nằm trên đường dim, nên cái khoảng hở của đường dim sẽ không có ( hjx, tại em vẽ cai file minh họa láu quá, nếu bác không sửa cái này cũng đã quá tốt cho em rồi).
- Khi tỉ lệ cái TEXT của dim nguồn và dim đích quá chênh lệch nhau thì cái điểm gốc của text nó vẫn bị giữ nguyên
......VD: Khi text của dim đích to gấp khoảng 10 hoặc 20 lần text của dim nguồn thì khi chạy lệnh xong, vị trí TEXT của dim đích là rất xa đường dim. Và ngược lại nếu TEXT của dim đích quá nhỏ so với TEXT của dim nguồn thì nó sẽ đè lên đường đim ( mong bác fix lại cho khoảng cách của TEXTđường đim luôn nằm trong khoảng 1/3 chiều cao của TEXT).
3. Bác giúp em bỏ cái alert đi được không, tại nó làm mình phải thêm 1 thao tác bấm OK ( he, em lười quá, nhưng khi làm với nhiều bản vẽ cũng khá mệt )

EM cảm ơn bác rất nhiều !!! *****

:D Chúc mọi ngươi một quốc khánh vui vẻ :D

Chào bạn nguyentuyen6,
Bạn xài thử cái này, đã bổ sung đối với Mtext và với các đối tượng block.
Tuy nhiên yêu cầu 2 của bạn cũng tương tự như vấn đề mình nêu ở bài trước mình vẫn chưa giải quyết được . Thực ra với mình điều này cũng rất không ưng nhưng vì dốt nên đành chịu bó tay bạn ạ.
Việc bạn muốn bỏ đi cái alert theo mình là không nên vì đó là cái cảnh báo để người dùng không bị nhầm lẫn giữa việc chọn nguồn và đích. Tuy nhiên theo yêu cầu của bạn mình đã bỏ, nhưng nếu bạn muốn phục hồi chỉ cần xóa đi các dấu chấm phẩy (:D phía trước dòng code này.
rất mong bạn thông cảm với cái sự dốt của mình và chờ thêm ít nữa, có thể có người sẽ có cách giải quyết khác để giúp bạn.
Chúc bạn vui.

(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)
(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
(while e1
(setq el1 (entget e1))
(if (= (cdr (assoc 0 el1)) "MTEXT")
(setq el1 (subst (cons 40 (caddr ls1)) (assoc 40 el1) el1))
)
(entmod el1)
(entupd e1)
(setq e1 (entnext e1))
;;;;;;;;;; (command "scale" e2 "" (cdr (assoc 10 (entget e2))) (/ (cdr (assoc 40 el1)) (caddr ls1)))
;;;;;;;;;; (command "scale" e3 "" (cdr (assoc 10 (entget e3))) (/ (cdr (assoc 40 el1)) (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 )
(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
(while e1
(setq el1 (entget e1))
(if (= (cdr (assoc 0 el1)) "MTEXT")
(setq el1 (subst (cons 40 (caddr ls1)) (assoc 40 el1) el1))
)
(entmod el1)
(entupd e1)
(setq e1 (entnext e1))
)
)
)
)
(command "regen")

)
)

(setq e (entnext e))
)
)

  • 1
Chúc các quý Anh trên diễn đàn luôn khỏe, đẻ thêm được nhiều thứ để mót.

#1662 phamthanhbinh

phamthanhbinh

    biết lệnh adcenter

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

Đã gửi 02 September 2010 - 02:39 PM

Sau khi tham khảo ý kiến của bác Vbao, mình post lên đây cái lisp đã viết giúp bác Vbao, hy vọng có thể sẽ có người cần dùng.


Nhờ anh Bình viết hộ cái lisp theo file đính kèm dưới đây. Chân thành cảm ơn anh.

http://www.cadviet.c...files/3/t2e.dwg

Chào bác VBao,
Gửi bác cái củ sâm này, hy vọng nó chữa được cái bệnh của bác. Cái này sau khi mót lại của bác ndtvn trên diễn đàn, mình chế lại một chút cộng với cái lisp t2e.lsp và cho nó ra đời.
Cái này khắc phục được cái vụ explode ờ lisp trước và tránh được sự nhầm lẫn nếu như trong vùng chọn của bác có thằng cu Mtext nào lạc vào đó. Và do đó nó túm được chính xác hơn cái bác cần. Cũng nhờ nó mà mình bỏ luôn được mấy thằng undo cho đỡ rối bác ạ.
Chúc bác luôn khỏe và vui.


(defun c:xt2ex ( / p1 p2 ss0 ss1 i n m dtlist dtlst1 j ent pt dt ent1 ss2 mt len dt1)
(vl-load-com)
(setq p1 (getpoint "\n Chon diem thu nhat cua vung chon")
p2 (getcorner p1 "\n Chon diem thu hai cua vung chon")
ss0 (ssget "w" p1 p2 (list (cons 0 "text")))
ss1 (ssget "w" p1 p2 (list (cons 0 "dimension")))
i 0
n (sslength ss0)
m (sslength ss1)
dtlist (list)
dtlst1 (list)
)
(While (< i n)
(setq ent (ssname ss0 i)
pt (cdr (assoc 10 (entget ent)))
dt (cdr (assoc 1 (entget ent)))
dtlist (append dtlist (list (list pt dt)))
i (1+ i)
)
)
(setq dtlist (vl-sort dtlist '(lambda (e1 e2) (< (car (car e1)) (car (car e2))))))

(setq j 0)
(while (< j m)
;;;;;;(command "undo" "be")
(setq ent (ssname ss1 j)
p1 (car (ACET-GEOM-SS-EXTENTS-FAST (ssadd ent)))
p2 (cadr (ACET-GEOM-SS-EXTENTS-FAST (ssadd ent)))
els (entget ent)
bln (cdr (assoc 2 els))
ent1 (cdr (assoc -2 (tblsearch "block" bln)))
els1 (entget ent1)
)
;;;;;; (command "explode" ent "")
;;;;;; (setq ss2 (ssget "w" p1 p2 (list (cons 0 "Mtext")))
;;;;;;; ent1 (ssname ss2 0)
;;;;;; mt (cdr (assoc 1 (entget ent1)))
;;;;;; len (strlen mt)
;;;;;; dt1 (substr mt (- len 3) 4)
;;;;;; )
(while ent1
(setq els1 (entget ent1))
(if (= (cdr (assoc 0 els1)) "MTEXT")
(progn
(setq mt (cdr (assoc 1 els1))
len (strlen mt)
dt1 (substr mt (- len 3) 4)
)
)
)
(setq ent1 (entnext ent1))
)
;;;;;;;;; (command "undo" "e")
(setq dtlst1 (append dtlst1 (list (list p1 dt1))))
(setq j (1+ j))
)
;;;;;;;;(command "undo" j)
(setq dtlst1 (vl-sort dtlst1 '(lambda (e1 e2) (< (car (car e1)) (car (car e2)))))
dtlst1 (append (list (list "0" "0")) dtlst1)
)
(WriteToExcel dtlist dtlst1)
)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;


;;;;;;;;;;;;;
(defun WriteToExcel (lst_data1 lst_data2 / col row x xlApp xlCells)
(setq xlApp (vlax-get-or-create-object "Excel.Application")
xlCells (vlax-get-property
(vlax-get-property
(vlax-get-property
(vlax-invoke-method
(vlax-get-property xlApp "Workbooks")
"Add")
"Sheets")
"Item" 1)
"Cells"))
(setq row (getint "\n Chon hang nhap du lieu: "))
(setq col 3)
(foreach dt lst_data1
(vlax-put-property xlCells 'Item row col (cadr dt))
(setq col (1+ col)))
(setq row (1+ row)
col 3)
(foreach dt lst_data2
(vlax-put-property xlCells 'Item row col (cadr dt))
(setq col (1+ col)))
(vla-put-visible xlApp :vlax-true)
(mapcar
(function (lambda (x)
(vl-catch-all-apply
(function (lambda ()(if x (vlax-release-object x)))))))
(list xlCells xlApp))
(gc) (gc) )


Bravo bác Bình, đúng là củ sâm tốt hơn củ chuối hột, lisp chạy tốc độ hơn. Vâng bác cứ post lên diễn đàn (lisp này dùng trích số liệu trắc dọc để nộp bài cho cơ quan). Thanks bác
  • 0
Chúc các quý Anh trên diễn đàn luôn khỏe, đẻ thêm được nhiều thứ để mót.

#1663 nguyentuyen6

nguyentuyen6

    biết lệnh chamfer

  • Advance Member
  • PipPipPipPip
  • 213 Bài viết
Điểm đánh giá: 124 (tàm tạm)

Đã gửi 02 September 2010 - 04:10 PM

Cảm ơn bác thanhbinh rất nhiều về cái lisp e đã yêu cầu. E cũng mong được dốt như bác đấy.hehe,
E cũng vừa tét xong và thấy rằng, khi chạy lệnh xong thì: TEXT của dim đích có thay đổi lại thật, nhưng nó chỉ là hiển thị thôi, chứ bản chất thì CAD vẫn hiểu nó là TEXT có chiều cao y nguyên lúc chưa dùng lệnh. Bằng chứng là chỉ cần di chuyển cái TEXT đó là nó lại bị quay về chiều cao ban đầu. hoặc là sau khi chạy líp, bật Ctrl+1 thì cái TEXT HIGHT của dim vẫn chả thay đổi so với ban đầu cả. Vậy theo em nghĩ chỉ cần làm sao thay đổi được TEXT HIGHT = cách giống như bật Ctrl+1 lên rồi đổi là không bị lỗi như thế nữa ( đổi tận gốc ). Hix em nói là nói vậy thôi chứ về líp thì em hoàn toàn mù tịt. Mong các bác sớm khắc phục được giúp e . Cảm ơn bạn tbinh và mọi người nhiều
  • 1

Lisp In bản vẽ hàng loạt:
http://www.cadviet.c...ndpost&p=139860


#1664 phamthanhbinh

phamthanhbinh

    biết lệnh adcenter

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

Đã gửi 02 September 2010 - 04:42 PM

:D Trước hết E xin cảm ơn bác thanhbinh nhiều lắm.

E cũng vừa test thử líp bác vừa viết và có một vài chỗ mong bác hoàn thiện hộ E với nhé.

1. KHi thực hiện lísp. Đối với các text nếu có thể bác thêm hộ em với cả cái Mtext với nhé. ^^! (lúc em yêu cầu chưa có cái này, hehee, mới phát sinh )
2. Về đường Dim:
- Em thường để cái text dim nằm trên đường dim, nên cái khoảng hở của đường dim sẽ không có ( hjx, tại em vẽ cai file minh họa láu quá, nếu bác không sửa cái này cũng đã quá tốt cho em rồi).
- Khi tỉ lệ cái TEXT của dim nguồn và dim đích quá chênh lệch nhau thì cái điểm gốc của text nó vẫn bị giữ nguyên
......VD: Khi text của dim đích to gấp khoảng 10 hoặc 20 lần text của dim nguồn thì khi chạy lệnh xong, vị trí TEXT của dim đích là rất xa đường dim. Và ngược lại nếu TEXT của dim đích quá nhỏ so với TEXT của dim nguồn thì nó sẽ đè lên đường đim ( mong bác fix lại cho khoảng cách của TEXTđường đim luôn nằm trong khoảng 1/3 chiều cao của TEXT).
3. Bác giúp em bỏ cái alert đi được không, tại nó làm mình phải thêm 1 thao tác bấm OK ( he, em lười quá, nhưng khi làm với nhiều bản vẽ cũng khá mệt )

EM cảm ơn bác rất nhiều !!! *****

:D Chúc mọi ngươi một quốc khánh vui vẻ :D

Chào bạn nguyentuyen6,
Đây là lisp mình bổ sung đoạn chỉnh sửa khoảng cách giữa đường kích thước và text kích thước. Do dimension có cấu tạo rất phức tạp mà mình chưa đủ khả năng giải quyết nên lisp này chỉ có tác dụng với cái dim style mà bạn đã post nhưng trước khi chạy lisp bạn phải modìy nó thành dạng text above đường kích thước.
Bạn có thể so sánh sự khác nhau giữa hai đoạn lisp trước và sau khi sửa để thấy rõ cách làm của mình. Từ đó bạn có thể tùy chỉnh lisp cho các dim style khác của bạn.
Do trình độ có hạn nên chưa thể giải quyết triệt để vấn đề của bạn, mong bạn thông cảm.

(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)
(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
(while e1
(setq el1 (entget e1))
(if (= (cdr (assoc 0 el1)) "MTEXT")
(progn
(setq k (cdr (assoc 40 el1))
m (caddr ls1)
pt (cdr (assoc 10 el1))
pt (list (car pt) (+ (- (cadr pt) (/ k 2)) m ) (caddr pt))
el1 (subst (cons 10 pt) (assoc 10 el1) el1)
el1 (subst (cons 40 (caddr ls1)) (assoc 40 el1) el1)
)
)
)
(entmod el1)
(entupd e1)
(setq e1 (entnext e1))
;;;;;;;;;; (command "scale" e2 "" (cdr (assoc 10 (entget e2))) (/ (cdr (assoc 40 el1)) (caddr ls1)))
;;;;;;;;;; (command "scale" e3 "" (cdr (assoc 10 (entget e3))) (/ (cdr (assoc 40 el1)) (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
(while e1
(setq el1 (entget e1))
(if (= (cdr (assoc 0 el1)) "MTEXT")
(progn
(setq k (cdr (assoc 40 el1))
m (caddr ls1)
pt (cdr (assoc 10 el1))
pt (list (car pt) (+ (- (cadr pt) (/ k 2)) m ) (caddr pt))
el1 (subst (cons 10 pt) (assoc 10 el1) el1)
el1 (subst (cons 40 (caddr ls1)) (assoc 40 el1) el1)
)
)
)
(entmod el1)
(entupd e1)
(setq e1 (entnext e1))
)
)
)
)
(command "regen")

)
)

(setq e (entnext e))
)
)

  • 1
Chúc các quý Anh trên diễn đàn luôn khỏe, đẻ thêm được nhiều thứ để mót.

#1665 nguyentuyen6

nguyentuyen6

    biết lệnh chamfer

  • Advance Member
  • PipPipPipPip
  • 213 Bài viết
Điểm đánh giá: 124 (tàm tạm)

Đã gửi 02 September 2010 - 05:32 PM

hi.e Cảm ơn bác Tbinh nhiều nhiều :D
  • 0

Lisp In bản vẽ hàng loạt:
http://www.cadviet.c...ndpost&p=139860


#1666 nguyentuyen6

nguyentuyen6

    biết lệnh chamfer

  • Advance Member
  • PipPipPipPip
  • 213 Bài viết
Điểm đánh giá: 124 (tàm tạm)

Đã gửi 02 September 2010 - 05:55 PM

Hi`. em đã xoá hết các dòng co liên quan đến Dim thì được cái này. (chỉ dùng cho text)


;; free lisp from cadviet.com

(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)
(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)
)
)
)


(setq ent (entnext ent))
)

;;;;;; (alert "\n Chon tap doi tuong dich")
(setq sst (ssget (list (cons 0 "TEXT,MTEXT,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)) "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)
)
)
)



(setq e (entnext e))
)
)



Tuy nhiên khi chọn block nguồn thì phải chọn 2 lần, chọn 1 lần không được. bác tbinh sửa giúp em với,he.
àh còn về phần dim thì em đã ko nghĩ ký để bác phải suy nghĩ nhiều. hjx. Ý em định là khi scale khung tên mỗi khung tên sẽ có 1 block nguồn. Tuy nhiên e đã quên mà không nghĩ ra rằng: dùng lệnh scale đối với dim thì tet hight không thay đổi. Vì cái nguồn của em ở đây nó là block nên khi scale nó lên thì nó cũng chỉ là hiển thị thôi, chứ nếu vào blockeditor thì thấy ngay được là text hight không đổi. Có lẽ đây chính là vấn đề..he
  • 0

Lisp In bản vẽ hàng loạt:
http://www.cadviet.c...ndpost&p=139860


#1667 phamthanhbinh

phamthanhbinh

    biết lệnh adcenter

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

Đã gửi 02 September 2010 - 10:16 PM

Hi`. em đã xoá hết các dòng co liên quan đến Dim thì được cái này. (chỉ dùng cho text)

;; free lisp from cadviet.com

(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)
(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)
)
)
)


(setq ent (entnext ent))
)

;;;;;; (alert "\n Chon tap doi tuong dich")
(setq sst (ssget (list (cons 0 "TEXT,MTEXT,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)) "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)
)
)
)

(setq e (entnext e))
)
)

Tuy nhiên khi chọn block nguồn thì phải chọn 2 lần, chọn 1 lần không được. bác tbinh sửa giúp em với,he.
àh còn về phần dim thì em đã ko nghĩ ký để bác phải suy nghĩ nhiều. hjx. Ý em định là khi scale khung tên mỗi khung tên sẽ có 1 block nguồn. Tuy nhiên e đã quên mà không nghĩ ra rằng: dùng lệnh scale đối với dim thì tet hight không thay đổi. Vì cái nguồn của em ở đây nó là block nên khi scale nó lên thì nó cũng chỉ là hiển thị thôi, chứ nếu vào blockeditor thì thấy ngay được là text hight không đổi. Có lẽ đây chính là vấn đề..he

Chào bạn nguyentuyen6,
Việc bạn phải chọn hai lần là do lần đầu tiên bạn chọn vào đối tượng không phải là block, có thể là do khi chọn bạn không chú ý. Thực chất đó là do mình đã cẩn thận đề phòng bằng một bước kiểm tra xem đối tượng chọn có phải là block hay không. Việc này là do bạn có yêu cầu là các text nguồn và dim nguồn đều nằm trong block.
Bạn hãy cẩn thận làm lại thử xem nhé chứ đoạn lisp đó không có sai sót gì đâu.
Chúc bạn vui.
  • 1
Chúc các quý Anh trên diễn đàn luôn khỏe, đẻ thêm được nhiều thứ để mót.

#1668 congdung04

congdung04

    biết vẽ line

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

Đã gửi 03 September 2010 - 08:47 AM

Em có việc này nhờ các cao thủ, em đã search trên diễn đàn và biết được bác NguyenHoanh có viết một đoạn code mà khi pick chọn một DIM sẽ xuất ra text các thông số của DIM đó, ví dụ DIMSCALE........... nhưng giờ em muốn thay vì xuất ra text như thế các bác có thể viết giúp em một lisp mà sau khi pick chọn DIM đó sẽ ra một dòng nhắc người dùng các giá trị hiện tại (cụ thể em chỉ cần giá trị Dim scale overal) và yêu cầu nhập giá trị mới cần thay đổi. sau khi người dùng nhập thì sẽ áp dụng giá trị đó cho DIM.
Cảm ơn các bác rât nhiều.
  • 0

#1669 nguyentuyen6

nguyentuyen6

    biết lệnh chamfer

  • Advance Member
  • PipPipPipPip
  • 213 Bài viết
Điểm đánh giá: 124 (tàm tạm)

Đã gửi 03 September 2010 - 12:39 PM

Em có việc này nhờ các cao thủ, em đã search trên diễn đàn và biết được bác NguyenHoanh có viết một đoạn code mà khi pick chọn một DIM sẽ xuất ra text các thông số của DIM đó, ví dụ DIMSCALE........... nhưng giờ em muốn thay vì xuất ra text như thế các bác có thể viết giúp em một lisp mà sau khi pick chọn DIM đó sẽ ra một dòng nhắc người dùng các giá trị hiện tại (cụ thể em chỉ cần giá trị Dim scale overal) và yêu cầu nhập giá trị mới cần thay đổi. sau khi người dùng nhập thì sẽ áp dụng giá trị đó cho DIM.
Cảm ơn các bác rât nhiều.


Cái líp đó ở đây. http://www.cadviet.c...?showtopic=2423

Trong đó cái text hight dc quy đinh mã là :140. Qua líp này không biết bac thanhbinh có thể giúp em nốt cái líp kia không?. chỉ áp dụng cho dim. Chỉ khác tý là nguồn của dim bây h là 1 DTEXT (Có style giống style textdim và khác style của các TEXT nguồn )để khi scale thì text hight cũng thay đổi theo. Cảm ơn bác nhiêu. Hy vọng là em nghĩ đúng
  • 0

Lisp In bản vẽ hàng loạt:
http://www.cadviet.c...ndpost&p=139860


#1670 hdg2318

hdg2318

    biết lệnh mirror

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

Đã gửi 03 September 2010 - 12:57 PM

có 1 mong muốn nho nhỏ, mong các bác giúp đỡ.
- em có 3 cột text toàn là số, các bac giúp em nhân 2 cột đó với nhau, kết quả được xuất ra cột thứ 3, với 1 số sau dấu phẩy.
- em muốn nhân nhiều số với 1 số, kết quả trả lại đúng vị trí của text cấn nhân.
  • 0

Có 2 cách để nhìn đời:
1 là : coi như chẳng có gì là huyền diệu
2 là : coi như mọi điều đều huyền diệu


Click here


#1671 congdung04

congdung04

    biết vẽ line

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

Đã gửi 03 September 2010 - 01:23 PM

tất nhiên là em biết nó ở đâu nhưng nó mới chỉ xuất ra được giá trị Dim scale overal ra dạng text thôi, ở đây em muốn lisp có thể thay đổi và áp dụng giá trị Dim scale overal mới cho Dim đó mà. các cao thủ giúp em chỉnh sửa đi nào., Thanks
  • 0

#1672 phamthanhbinh

phamthanhbinh

    biết lệnh adcenter

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

Đã gửi 04 September 2010 - 03:18 PM

Cái líp đó ở đây. http://www.cadviet.c...?showtopic=2423

Trong đó cái text hight dc quy đinh mã là :140. Qua líp này không biết bac thanhbinh có thể giúp em nốt cái líp kia không?. chỉ áp dụng cho dim. Chỉ khác tý là nguồn của dim bây h là 1 DTEXT (Có style giống style textdim và khác style của các TEXT nguồn )để khi scale thì text hight cũng thay đổi theo. Cảm ơn bác nhiêu. Hy vọng là em nghĩ đúng

Bạn hãy gửi một bản vẽ có chứa Dtext và các dimension cần thay đổi nhé. Thực sự mình chưa hiểu lắm về cái đối tượng Dtext mà bạn nói, nó có nằm trong block như lần trước bạn yêu cầu hay không hay nó là một đối tượng độc lập trên bản vẽ. Vấn đề thay đổi chiều cao của text trong dimesion theo mình nghĩ là có thể, song còn cái vụ thay đổi khoảng cách giữa text và đường kích thước nữa bạn ạ. Mình chưa biết Cad quản lý cái này ra sao, chắc chắn là trong dímtyle nhưng còn nó là biến nào thì còn đang mò mẫm bạn ạ. Rất mong bạn thông cảm nhé. Bạn cứ gửi file mẫu lên, mình sẽ ngâm cứu thử coi sao. Có thể qua đây mình sẽ vỡ ra nhiều điều hay hơn về đối tượng dimesion này.
Chúc bạn vui.
PS; Mình cũng đả mò tới các biến trong dimension Style rồi nhưng nó rậm như rừng chả biết xoay xở ra sao nên mới đành làm cái cách củ chuối như bạn đã biết. Nghĩa là đổi kích cỡ của text trong thể hiện để mà in ra thôi chứ còn chưa đổi được trong dímtyle bạn ạ. Với gợi ý của bạn có thể mình sẽ mò thêm được chút gì chăng, Cám ơn bạn trước nhé.
  • 0
Chúc các quý Anh trên diễn đàn luôn khỏe, đẻ thêm được nhiều thứ để mót.

#1673 phamthanhbinh

phamthanhbinh

    biết lệnh adcenter

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

Đã gửi 04 September 2010 - 05:02 PM

có 1 mong muốn nho nhỏ, mong các bác giúp đỡ.
- em có 3 cột text toàn là số, các bac giúp em nhân 2 cột đó với nhau, kết quả được xuất ra cột thứ 3, với 1 số sau dấu phẩy.
- em muốn nhân nhiều số với 1 số, kết quả trả lại đúng vị trí của text cấn nhân.

Chào bạn hdg2318,
Hình như bạn cũng là một thành viên có hạng của Cadviet rồi mà. Sao bạn không post một file mẫu cái bạn có và một file mẫu cái bạn cần lên cho mọi người dễ hình dung nhỉ???? Còn cách nói của bạn thì khó hình dung quá, đã có 3 cột rồi lại còn xuất kết quả vào cột thứ 3 là sao nhỉ????
Rồi muốn nhân nhiều số với 1 số, trả kết quả về đúng vị trí của text cần nhân là text nào vậy bạn.....
Đừng nghĩ rằng là ma cũ thì nói sao mọi người cũng phải hiểu, mà ngược lại nên cẩn trọng trong cách trình bày vấn đề bạn nhé.
Hề hề hề....
  • 0
Chúc các quý Anh trên diễn đàn luôn khỏe, đẻ thêm được nhiều thứ để mót.

#1674 phamthanhbinh

phamthanhbinh

    biết lệnh adcenter

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

Đã gửi 04 September 2010 - 05:46 PM

Cái líp đó ở đây. http://www.cadviet.c...?showtopic=2423

Trong đó cái text hight dc quy đinh mã là :140. Qua líp này không biết bac thanhbinh có thể giúp em nốt cái líp kia không?. chỉ áp dụng cho dim. Chỉ khác tý là nguồn của dim bây h là 1 DTEXT (Có style giống style textdim và khác style của các TEXT nguồn )để khi scale thì text hight cũng thay đổi theo. Cảm ơn bác nhiêu. Hy vọng là em nghĩ đúng

Hề hề hề,
Loay hoay cả buổi chiều mà chả ăn thua gì, cái thằng Dímtyle này khó chơi quá, dùng lisp vật nó mãi chả được > nó chỉ chịu phép cái thằng CAD thôi. Mà mình định dùng lệnh CAD trong lisp nó cũng không cho. Tệ quá. Chắc là phải dùng tới VBA để xử nó mà mình thì mít đặc về VBA.
Ấy là mình cũng đoán vậy chứ chả biết có được không nữa. Thôi thì bạn đành chịu khó chờ các cao thủ khác giở võ ra vậy. chớ với cái lá mít rách của mình thì thua nó rồi bạn ạ.
Hề hề hề. Thực tế thì khi modìy nó bằng lisp nó toàn trả về nil không à, nghĩa là nó bảo đếch thèm chơi với lisp bạn ạ. khổ thế.
  • 1
Chúc các quý Anh trên diễn đàn luôn khỏe, đẻ thêm được nhiều thứ để mót.

#1675 nguyentuyen6

nguyentuyen6

    biết lệnh chamfer

  • Advance Member
  • PipPipPipPip
  • 213 Bài viết
Điểm đánh giá: 124 (tàm tạm)

Đã gửi 04 September 2010 - 10:57 PM

Hì, cảm ơn Bác Tbinh nhiều, vì em mà bác vất vả nhiều quá. hjx. E chỉ biết nói cảm ơn tới bác rất nhiều thôi . heheee. CHúc bác s khỏe, thành đạt để ae cadviet còn nhờ bác nhiều :undecided:
  • 0

Lisp In bản vẽ hàng loạt:
http://www.cadviet.c...ndpost&p=139860


#1676 hdg2318

hdg2318

    biết lệnh mirror

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

Đã gửi 05 September 2010 - 04:57 PM

Chào bạn hdg2318,
Hình như bạn cũng là một thành viên có hạng của Cadviet rồi mà. Sao bạn không post một file mẫu cái bạn có và một file mẫu cái bạn cần lên cho mọi người dễ hình dung nhỉ???? Còn cách nói của bạn thì khó hình dung quá, đã có 3 cột rồi lại còn xuất kết quả vào cột thứ 3 là sao nhỉ????
Rồi muốn nhân nhiều số với 1 số, trả kết quả về đúng vị trí của text cần nhân là text nào vậy bạn.....
Đừng nghĩ rằng là ma cũ thì nói sao mọi người cũng phải hiểu, mà ngược lại nên cẩn trọng trong cách trình bày vấn đề bạn nhé.
Hề hề hề....

hề hề, làm gì mà bác nóng tính thế. em up cái hình lên đây, hy vọng biểu đạt được ý nguyện của mình
Hình đã gửi
thực ra mình cũng đã viết 1 lisp để làm công việc nhân nhiều số với 1 số, nhưng nó vẫn còn 1 số hạn chế :
chưa áp dụng được cho số thực ( mình cũng đã chỉnh lại kiểu dữ liệu nhập vào là với số thực, nhưng chẳng hiểu sao lúc được lúc không, lúc lại cho ra KQ ko đúng)
nếu tích số nhận xong là số nguyên, nó không có ".0"

(defun c:tichso()
(setq i (getint "\n Enter number to calculate :"))
(prompt "Select objects:")
(setq ss (ssget))
(setq cnt 0)
(progn
(repeat (sslength ss)
(setq ent (entget (ssname ss cnt)))
(setq nd1 (cdr (assoc 1 ent)))
(setq nd2 (distof nd1))
(setq nd3 (/ nd2 i))
(setq nd4 (rtos nd3 2 1))
(setq nd nd4)
(setq ent (subst (cons 1 (strcat nd)) (assoc 1 ent) ent))
(entmod ent)
(setq cnt (1+ cnt))
)
)
)

  • 0

Có 2 cách để nhìn đời:
1 là : coi như chẳng có gì là huyền diệu
2 là : coi như mọi điều đều huyền diệu


Click here


#1677 master_worse

master_worse

    biết lệnh offset

  • Advance Member
  • PipPipPip
  • 170 Bài viết
Điểm đánh giá: 87 (tàm tạm)

Đã gửi 05 September 2010 - 05:40 PM

thực ra mình cũng đã viết 1 lisp để làm công việc nhân nhiều số với 1 số, nhưng nó vẫn còn 1 số hạn chế :
chưa áp dụng được cho số thực ( mình cũng đã chỉnh lại kiểu dữ liệu nhập vào là với số thực, nhưng chẳng hiểu sao lúc được lúc không, lúc lại cho ra KQ ko đúng)
nếu tích số nhận xong là số nguyên, nó không có ".0"

Bạn tìm hiểu các biến hệ thống sau: dimzin, luprec và lunits có thể giải quyết vấn đề này
  • 0

Ngu dốt không đáng thẹn bằng thiếu ý chí học hỏi


Tri thức làm người ta khiêm tốn, ngu si làm người ta kiêu ngạo (Ngạn ngữ Anh)


#1678 Tue_NV

Tue_NV

    KS Võ Quang Tuệ

  • Moderator
  • PipPipPipPipPipPipPip
  • 4296 Bài viết
Điểm đánh giá: 3804 (đỉnh cao)

Đã gửi 05 September 2010 - 08:30 PM

hề hề, làm gì mà bác nóng tính thế. em up cái hình lên đây, hy vọng biểu đạt được ý nguyện của mình
thực ra mình cũng đã viết 1 lisp để làm công việc nhân nhiều số với 1 số, nhưng nó vẫn còn 1 số hạn chế :
chưa áp dụng được cho số thực ( mình cũng đã chỉnh lại kiểu dữ liệu nhập vào là với số thực, nhưng chẳng hiểu sao lúc được lúc không, lúc lại cho ra KQ ko đúng)
nếu tích số nhận xong là số nguyên, nó không có ".0"

(defun c:tichso()
(setq i (getint "\n Enter number to calculate :"))
(prompt "Select objects:")
(setq ss (ssget))
(setq cnt 0)
(progn
(repeat (sslength ss)
(setq ent (entget (ssname ss cnt)))
(setq nd1 (cdr (assoc 1 ent)))
(setq nd2 (distof nd1))
(setq nd3 (/ nd2 i))
(setq nd4 (rtos nd3 2 1))
(setq nd nd4)
(setq ent (subst (cons 1 (strcat nd)) (assoc 1 ent) ent))
(entmod ent)
(setq cnt (1+ cnt))
)
)
)

1. Bạn đã thử chức năng tìm kiếm của diễn đàn chưa? Hãy Tìm kiếm với từ khoá Nhan 2 cot so
->> nên sử dụng Table của CAD hơn là phải sử dụng Text như thế. Mình chỉ sử dụng Lisp này để kiểm tra lại mấy anh sử dụng Text để thống kê, chứ tuyệt đối không dùng Text để nhân 2 cột số vì nó không ưu điểm bằng Table của ACAD

2. Theo ý của bạn master_worse. hoặc sử dụng Lisp này của Tue_NV :
Chương trình tính toán Cộng trừ Nhân Chia giá trị của Block Attribute; Text với 1 số hoặc 1 biểu thức
Chương trình cũng có tính năng làm tròn số tới một số nào đó do User định trước
  • 1

#1679 phamthanhbinh

phamthanhbinh

    biết lệnh adcenter

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

Đã gửi 05 September 2010 - 08:57 PM

hề hề, làm gì mà bác nóng tính thế. em up cái hình lên đây, hy vọng biểu đạt được ý nguyện của mình
Hình đã gửi
thực ra mình cũng đã viết 1 lisp để làm công việc nhân nhiều số với 1 số, nhưng nó vẫn còn 1 số hạn chế :
chưa áp dụng được cho số thực ( mình cũng đã chỉnh lại kiểu dữ liệu nhập vào là với số thực, nhưng chẳng hiểu sao lúc được lúc không, lúc lại cho ra KQ ko đúng)
nếu tích số nhận xong là số nguyên, nó không có ".0"

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.
  • 1
Chúc các quý Anh trên diễn đàn luôn khỏe, đẻ thêm được nhiều thứ để mót.

#1680 nguyentieu

nguyentieu

    biết vẽ circle

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

Đã gửi 05 September 2010 - 11:22 PM

Em đang tìm lisp thực hiện việc gióng các đường dim cho thẳng hàng (đứng và ngang). Lệnh này khi e dùng SpeedCad của anh Ghost thì nó có lệnh tắt là VD. Em tìm trên diển đàn nhưng ko thấy?? Mong các ACE giúp đỡ.

Thanks!!
  • 0