Đế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

#1721 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 08 September 2010 - 04:56 PM

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

#1722 duy782006

duy782006

    PHẠM QUỐC DUY

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

Đã gửi 08 September 2010 - 07:07 PM

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.
  • 0

Cứ ngỡ trần gian là cõi thật.Cho nên tất bật đến bây giờ.
Tạo hộp thoại bằng lisp My blog QUY ĐỊNH ĐẶT TÊN TOPIC TRONG CHUYÊN MỤC LISPD http://ktsduy.wordpress.com/
Để cám ơn chỉ cần nhấn rep_up.png
(Là nhấn vào nút đó phía bài viết của người ta í chứ đừng có nhè cái hình này mà nhấn miết đi nha :-D


#1723 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 08 September 2010 - 08:36 PM

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

#1724 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 09 September 2010 - 01:08 AM

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!!!!
  • 0

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


#1725 nhiemhan

nhiemhan

    Chưa sử dụng CAD

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

Đã gửi 09 September 2010 - 08:21 AM

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.
  • 0

#1726 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 09 September 2010 - 08:57 AM

BẠn tìm cái líp MPLOT cua bác NguyenHoanh ý. Đỡ phải đặt tên block
  • 0

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


#1727 phamngoctukts

phamngoctukts

    biết lệnh adcenter

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 1107 Bài viết
Điểm đánh giá: 696 (tốt)

Đã gửi 09 September 2010 - 10:50 AM

Cám ơn bác Duy và bác Bình. Nhờ ơn 2 bác mà lisp cua em chay ầm ầm.

(defun nhapsolieu ()
(initget 1)
(setq goc1 (getangle p01 "chon diem thu 2 theo huong hoac nhap goc: "))
(setq goc (/ (* goc1 180) pi))
(setq xulygoc (- 45 (/ goc 2)))
(setq gocra (/ (* pi xulygoc) 180))
(setq sina (sin gocra))
(setq cosa (sqrt (- 1 (expt sina 2))))
(setq tang (/ sina cosa))
(setq a (distance p2 p3))
(setq duongcheo (* a (sqrt 2)))
(setq b (/ duongcheo (* 2 tang)))
(setq anso (- b (/ duongcheo 2)))
(setq x (* anso 2))
(setq hs (+ (/ x duongcheo) 1))
)

(defun chondoituong ()
(princ "\nchon doi tuong: ")
(setq ssa (ssget))
(command ".copy" ssa "" "0,0" "0,0")
(setq ssb (ssget "l"))
(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))
)
)

(DEFUN stretchblock()
(batdau)
(chondoituong)
(setq P01 (getpoint "\nChon diem chen: "))
(delblock)
(command "-Block" "vkc_temp1" "0,0" ssb "")
(command "-insert" "vkc_temp1" "0,0" "" "" "")
(setq sstt1 (entlast))
(setq sstt (ssget "l"))
(blockrectang)
(nhapsolieu)
(command "_.explode" sstt1)
(setq ss0 (ssget "p"))
(command "-block" "vkc_temp1" "y" p1 ss0 "")
(command "line" p2 p1 "")
(setq re (ssget "l"))
(command "_.move" re "" p1 p01)
(command "_.rotate" re "" p01 "45")
(command "-insert" "vkc_temp1" "r" "45" p01 "" "")
(setq blgoc (entlast))
(Command "Explode" blgoc)
(setq bl (ssget "p"))
(command "-Block" "vkc_temp2" P01 re "")
(command "-Block" "vkc_temp3" P01 bl "")
(Command "-Insert" "vkc_temp3" P01 "" hs "")
(setq dt1 (entlast))
(Command "-Insert" "vkc_temp2" P01 "" hs "")
(Command "_.Explode" "l" "")
(setq dt2 (entlast))
(setq tt1 (entget dt2))
(setq tt1 (vl-remove-if '(lambda (x) (/= 10 (car x))) tt1))
(setq dinh11 (cdr (nth 0 tt1)))
(setq quay (- 90 (/ (* (angle p01 dinh11) 180) pi)))
(setq aa (distance p01 dinh11))
(setq bb (distance p1 p2))
(setq ab (/ bb aa))
(command "_.rotate" dt1 "" p01 quay)
(command ".scale" dt1 "" p01 ab)
(command "_.erase" dt2 "")
(command "_.explode" dt1)
(delblock)
(ketthuc)
(princ)
)

(defun c:stb ()
(stretchblock)
)

(defun batdau ()
(command "undo" "be")
(setvar "cmdecho" 0)
(setq
old_er *error*
*error* myerror
)
)

(defun myerror (errmsg)
(ketthuc)
(command "undo" "")
)

(defun ketthuc ()
(setq *error* old_er)
(setvar "cmdecho" 1)
(command "undo" "e")
)
(defun delblock ()
(Command "-Purge" "B" "vkc_temp1" "Y" "Y")
(Command "-Purge" "B" "vkc_temp2" "Y" "Y")
(Command "-Purge" "B" "vkc_temp3" "Y" "Y")
)

(defun blockrectang ()
(while (setq e (ssname sstt 0))
(setq sstt (ssdel e sstt)
tmp (vla-getboundingbox (vlax-ename->vla-object e) 'p1 'p3)
p1 (vlax-safearray->list p1)
p3 (vlax-safearray->list p3)
p1 (list (car p1) (cadr p1))
p3 (list (car p3) (cadr p3))
p2 (list (car p1) (cadr p3))
p4 (list (car p3) (cadr p1))
)
)
)

Gà như mình còn viết được code này mà bon nó bán tận 27$
http://www.rayburndr...AT.html?sno=298
  • 0
Tất cả vì sự phát triển của diễn đàn ...
Cám ơn đừng nói lời suông mà hãy nhấn Hình đã gửi!

#1728 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 09 September 2010 - 12:31 PM

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!!!!

Chào bạn nguyentuyen6,
Thực ra yêu cầu này của bạn không phải quá khó, nhất là khi bạn đã có cái lisp mình viết vừa rồi. Vấn đề của bạn khác với cái lisp vừa rồi chỉ ở mỗi cái phần lấy chiều cao text ở tập hợp nguồn mà thôi. Do đó thay vì các đoạn code lấy giá trị chiều cao text của các text và chiều cao text của các dim trong tập chọn
bạn sẽ điền vào các đoạn code lấy giá trị tỷ lệ scale của block theo các trục tùy ý bạn chọn.

Sau đó ở phần xừ lý các đối tượng trong tập đích thay vì các đoạn code lấy giá trị của chiều cao text mới, bạn điền vào các code để lấy chiều cao đó bằng giá trị của tỷ lệ scale mà bạn chọn và nhân với chiều cao của text hiện hành.

Đoạn code sau đây sẽ lấy giá trị của tỷ lệ scale theo trục x của một block được chọn:
(setq tlx (cdr (assoc 41 (entget (car (entsel "\n Chon block nguon"))))))

Mong bạn hãy cố gắng thử làm xem sao. Rất mong bạn thành công.
Trường hợp bạn không thể, hãy nói rõ bạn chưa hiểu chỗ nào, mình sẽ hướng dẫn thêm bạn 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.

#1729 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 09 September 2010 - 01:36 PM

Cám ơn bác Duy và bác Bình. Nhờ ơn 2 bác mà lisp cua em chay ầm ầm.

Gà như mình còn viết được code này mà bon nó bán tận 27$
http://www.rayburndr...AT.html?sno=298

Hề hề hề,
Vậy là bác này đủ xìn đi offline rùi, hê hê, có khi còn dư để bao thêm một ẻm nữa ấy chứ. Mà bác cũng nên tự thưởng cho mình một chầu offline chứ nhẩy. Hẹn gặp bác tại buổi offline nhé.....
Hề hề hề ,l lạc đề tí cho vui, các bác đừng giận nha.
  • 0
Chúc các quý Anh trên diễn đàn luôn khỏe, đẻ thêm được nhiều thứ để mót.

#1730 phamngoctukts

phamngoctukts

    biết lệnh adcenter

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 1107 Bài viết
Điểm đánh giá: 696 (tốt)

Đã gửi 09 September 2010 - 05:44 PM

Bác nào có bảng đầy đủ các mã DXF không cho em xin cái. Tìm trên diễn đàn mỏi mắt không thấy.
  • 0
Tất cả vì sự phát triển của diễn đàn ...
Cám ơn đừng nói lời suông mà hãy nhấn Hình đã gửi!

#1731 duy782006

duy782006

    PHẠM QUỐC DUY

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

Đã gửi 09 September 2010 - 08:31 PM

Bác nào có bảng đầy đủ các mã DXF không cho em xin cái. Tìm trên diễn đàn mỏi mắt không thấy.

Mua quách quyển sách dạy lisp mà tra bác ạ!
  • 0

Cứ ngỡ trần gian là cõi thật.Cho nên tất bật đến bây giờ.
Tạo hộp thoại bằng lisp My blog QUY ĐỊNH ĐẶT TÊN TOPIC TRONG CHUYÊN MỤC LISPD http://ktsduy.wordpress.com/
Để cám ơn chỉ cần nhấn rep_up.png
(Là nhấn vào nút đó phía bài viết của người ta í chứ đừng có nhè cái hình này mà nhấn miết đi nha :-D


#1732 phamngoctukts

phamngoctukts

    biết lệnh adcenter

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 1107 Bài viết
Điểm đánh giá: 696 (tốt)

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

Mua quách quyển sách dạy lisp mà tra bác ạ!

Em tìm được rồi bác ạ. Tiện thể up lên đây ai có cần thì lây
ma DXF
  • 1
Tất cả vì sự phát triển của diễn đàn ...
Cám ơn đừng nói lời suông mà hãy nhấn Hình đã gửi!

#1733 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 09 September 2010 - 10:19 PM

Chào bạn nguyentuyen6,
Thực ra yêu cầu này của bạn không phải quá khó, nhất là khi bạn đã có cái lisp mình viết vừa rồi. Vấn đề của bạn khác với cái lisp vừa rồi chỉ ở mỗi cái phần lấy chiều cao text ở tập hợp nguồn mà thôi. Do đó thay vì các đoạn code lấy giá trị chiều cao text của các text và chiều cao text của các dim trong tập chọn
bạn sẽ điền vào các đoạn code lấy giá trị tỷ lệ scale của block theo các trục tùy ý bạn chọn.

Sau đó ở phần xừ lý các đối tượng trong tập đích thay vì các đoạn code lấy giá trị của chiều cao text mới, bạn điền vào các code để lấy chiều cao đó bằng giá trị của tỷ lệ scale mà bạn chọn và nhân với chiều cao của text hiện hành.

Đoạn code sau đây sẽ lấy giá trị của tỷ lệ scale theo trục x của một block được chọn:
(setq tlx (cdr (assoc 41 (entget (car (entsel "\n Chon block nguon"))))))

Mong bạn hãy cố gắng thử làm xem sao. Rất mong bạn thành công.
Trường hợp bạn không thể, hãy nói rõ bạn chưa hiểu chỗ nào, mình sẽ hướng dẫn thêm bạn nhé.


  • 0

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


#1734 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 09 September 2010 - 10:34 PM

Chào bạn nguyentuyen6,
Thực ra yêu cầu này của bạn không phải quá khó, nhất là khi bạn đã có cái lisp mình viết vừa rồi. Vấn đề của bạn khác với cái lisp vừa rồi chỉ ở mỗi cái phần lấy chiều cao text ở tập hợp nguồn mà thôi. Do đó thay vì các đoạn code lấy giá trị chiều cao text của các text và chiều cao text của các dim trong tập chọn
bạn sẽ điền vào các đoạn code lấy giá trị tỷ lệ scale của block theo các trục tùy ý bạn chọn.

Sau đó ở phần xừ lý các đối tượng trong tập đích thay vì các đoạn code lấy giá trị của chiều cao text mới, bạn điền vào các code để lấy chiều cao đó bằng giá trị của tỷ lệ scale mà bạn chọn và nhân với chiều cao của text hiện hành.

Đoạn code sau đây sẽ lấy giá trị của tỷ lệ scale theo trục x của một block được chọn:
(setq tlx (cdr (assoc 41 (entget (car (entsel "\n Chon block nguon"))))))

Mong bạn hãy cố gắng thử làm xem sao. Rất mong bạn thành công.
Trường hợp bạn không thể, hãy nói rõ bạn chưa hiểu chỗ nào, mình sẽ hướng dẫn thêm bạn nhé.


Thank bác Tbình nhiều.
Hixx. E bây h mới bắt đầu tìm hiểu về líp. bây h nhìn luôn vào code của bác thực sự em thấy hoa hết cả mắt. Em cũng đã thu? sửa lại code của bác mà không hiểu đc gì nhiều. Tự nhiên tiếp xúc với bao nhiêu hàm mà không hiểu gì về nó nhiều. đọng đến cái gì cũng phải giở HELP cả. Chưa hiểu được bản chất của hàm nên việc đọc - hiểu cũng đá khó khăn lắm rùi. Về hàm:
(setq tlx (cdr (assoc 41 (entget (car (entsel "\n Chon block nguon")))))) thực ra e cũng đã xào nấu lại được trước khi hỏi bác rùi nhưng ko thể sửa dc. Ví dụ như khi dùng hàm ssg để lấy thông tin DFX của OBJ thì lại kô biết làm sao để MODIFIY nó. E tìm hiểu thì hình như dùng hàm "entmod" gì đó. Hix. Mong bác giúp e.......
  • 0

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


#1735 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 09 September 2010 - 10:38 PM

Em tìm được rồi bác ạ. Tiện thể up lên đây ai có cần thì lây
ma DXF

mình mới chập chững nghiên cứu, ko biết cái mã DXF này dùng để làm gì?? :undecided: :bigsmile:
  • 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


#1736 bachngoctung

bachngoctung

    biết lệnh copy

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

Đã gửi 10 September 2010 - 01:21 AM

- Anh em quên bài này à http://www.cadviet.c...o...st&p=106697
- Xem giúp mình với :undecided:
  • 0

#1737 TRUNGNGAMY

TRUNGNGAMY

    biết lệnh block

  • Members
  • PipPipPipPipPipPip
  • 401 Bài viết
Điểm đánh giá: 91 (tàm tạm)

Đã gửi 10 September 2010 - 01:49 AM

- Anh em quên bài này à http://www.cadviet.c...o...st&p=106697
- Xem giúp mình với :undecided:

Kg hiểu sao mình kg down đc bv của bạn nhỉ
  • 0

#1738 nhiemhan

nhiemhan

    Chưa sử dụng CAD

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

Đã gửi 10 September 2010 - 10:15 AM

BẠn tìm cái líp MPLOT cua bác NguyenHoanh ý. Đỡ phải đặt tên block

Chào bạn nguyentuyen6!
Cảm ơn bạn đã chỉ mình tìm MPlot nhưng mình vẫn chưa sử dụng được .Mình muốn có cách in giống như in bên word được không bạn?Tức là chọn trang nào in trang đó.Bạn thấy có thể thực hiện không?Hi..Mong các bạn giúp đỡ!Mình cảm ơn rất nhiều.
  • 0

#1739 thiep

thiep

    biết dimbaseline

  • Members
  • PipPipPipPipPip
  • 369 Bài viết
Điểm đánh giá: 260 (khá)

Đã gửi 10 September 2010 - 10:19 AM

- Anh em quên bài này à http://www.cadviet.c...o...st&p=106697
- Xem giúp mình với :undecided:

Chào bạn bachngoctung, có phải bạn muốn các Text cao độ có vị trí gióng (Alignment) trùng với vị trí chèn điểm phải không?
Thiep xem bản vẽ của bạn có 2 hệ thống text:
- 1 hệ thống text có độ cao là 1.0, có 2 số lẻ, đây có phải là text cao độ?
- 1 hệ thống text có độ cao là 0.8, là số tự nhiên, đây có phải là text STT điểm? mà sao nó không cùng góc quay với Text cao độ?
Sao bạn không tách thành 2 lớp cho dễ làm?
  • 0

#1740 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 10 September 2010 - 11:01 AM

Bác nào có bảng đầy đủ các mã DXF không cho em xin cái. Tìm trên diễn đàn mỏi mắt không thấy.

Bác vào Developer Help của CAD sẽ có dủ mà.
  • 0
Chúc các quý Anh trên diễn đàn luôn khỏe, đẻ thêm được nhiều thứ để mót.