Đến nội dung


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

Hỏi về Lisp (thuật toán, ý tưởng, coding,...)


  • Please log in to reply
2848 replies to this topic

#601 Thaistreetz

Thaistreetz

    biết lệnh adcenter

  • Advance Member
  • PipPipPipPipPipPipPip
  • 903 Bài viết
Điểm đánh giá: 505 (tốt)

Đã gửi 21 November 2010 - 11:19 PM

Các bác ơi giờ muốn đóng gói đống lisp với menu và DCL thành một file cài đặt (ko biết diễn đạt đúng ko?) thì làm thế nào được ah. Em thấy nhìn cho nó có vẻ Pro hơn thôi ah
ah, mà cái phần viết DCL của Visual lisp Editor của Cad nó ko tự căn chỉnh như khi viết Lisp phải ko ah?

Muốn đóng gói LSP và DCL thì làm đuợc bằng cách gói chung chúng lại thành VLX. Hoặc có thể viết luôn code DCL vào chung 1 file LSP. Còn menu thì chẳng bao giờ mình dùng đến nó cả nên không bít <_<
Visual lisp Editor có hỗ trợ code DCL. khi tạo new file bạn hãy save nó với định dạng DCL trước khi viết code. Ngoài ra nó còn hỗ trợ xem preview các thành phàn của hộp thoại. Vào Tool -> Interface tool
  • 1

Hình đã gửi
IN HIM, I TRUST. THE TRUST IN MY GOD


#602 pfievxd

pfievxd

    biết vẽ spline

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

Đã gửi 21 November 2010 - 11:24 PM

Ý em là nó không hỗ trợ trình bày cơ, để mình dễ quản lý khi viết ấy mà, như lisp thì các lệnh cùng cấp xếp ngang nhau, các lệnh nằm trong 1 lệnh (while, if, ..)thì khi xuống dòng để viết nó tự động thụt lùi vào đầu dòng cho mình í
+ Ý em đóng góil là tạo được cái File .exe cơ
  • 0

#603 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 24 November 2010 - 09:24 PM

Ngại quá :leluoi: . Hôm nay em làm cái Líp chuyển tất cả các đối tượng trên bản vẽ về "bylayer" hết. Nhưng khổ nỗi loay hoay mãi không sao làm đc với các đối tuợng trong BLOCK. Em cũng thử mày mò bằng hàm con (UPWB) mà bác Tue hay bác thanhbinh dùng mà chả đc.

(defun moddxf (dxf chdxf ss) (entmod (subst (cons dxf chdxf) (assoc dxf (entget ss)) (entget ss))))
(defun c:bylayer (/ ss en el i)
(vl-load-com)
(princ "\nChuyen ve ByLayer")
(setq ss (ssget "x"))
( setq i 0)
(while (< i (sslength ss))
(setq en (ssname ss i))
(if (/= (cdr (assoc 62 (entget en))) nil)
(moddxf 62 256 en)
)
(setq el (vlax-ename->vla-object en))
(vlax-put-property el 'Linetype "ByLayer")
(vlax-put-property el 'Lineweight -1)
(setq i (1+ i))
)
)


Các bác sửa giúp em cho nó chạy đc luôn cả trong block với. Viết code theo kiểu của hàm (UPWB) ý nhé. để em ngâm cứu nó phát.

VD về hàm con (UPWB): http://www.cadviet.c...o...st&p=105502
  • 0

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


#604 phamngoctukts

phamngoctukts

    biết lệnh adcenter

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

Đã gửi 25 November 2010 - 12:17 AM

Ngại quá :leluoi: . Hôm nay em làm cái Líp chuyển tất cả các đối tượng trên bản vẽ về "bylayer" hết. Nhưng khổ nỗi loay hoay mãi không sao làm đc với các đối tuợng trong BLOCK. Em cũng thử mày mò bằng hàm con (UPWB) mà bác Tue hay bác thanhbinh dùng mà chả đc.

(defun moddxf (dxf chdxf ss) (entmod (subst (cons dxf chdxf) (assoc dxf (entget ss)) (entget ss))))
(defun c:bylayer (/ ss en el i)
(vl-load-com)
(princ "\nChuyen ve ByLayer")
(setq ss (ssget "x"))
( setq i 0)
(while (< i (sslength ss))
(setq en (ssname ss i))
(if (/= (cdr (assoc 62 (entget en))) nil)
(moddxf 62 256 en)
)
(setq el (vlax-ename->vla-object en))
(vlax-put-property el 'Linetype "ByLayer")
(vlax-put-property el 'Lineweight -1)
(setq i (1+ i))
)
)


Các bác sửa giúp em cho nó chạy đc luôn cả trong block với. Viết code theo kiểu của hàm (UPWB) ý nhé. để em ngâm cứu nó phát.

VD về hàm con (UPWB): http://www.cadviet.c...o...st&p=105502

Mình thì chưa biết dùng cái thuật đệ quy của bác Tue_VN bạn tham khảo thử cái code trong bài viết này xem http://www.cadviet.c...showtopic=27683 bài số #8
  • 2
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!

#605 phamthanhbinh

phamthanhbinh

    biết lệnh adcenter

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

Đã gửi 25 November 2010 - 11:18 AM

Ngại quá :leluoi: . Hôm nay em làm cái Líp chuyển tất cả các đối tượng trên bản vẽ về "bylayer" hết. Nhưng khổ nỗi loay hoay mãi không sao làm đc với các đối tuợng trong BLOCK. Em cũng thử mày mò bằng hàm con (UPWB) mà bác Tue hay bác thanhbinh dùng mà chả đc.

(defun moddxf (dxf chdxf ss) (entmod (subst (cons dxf chdxf) (assoc dxf (entget ss)) (entget ss))))
(defun c:bylayer (/ ss en el i)
(vl-load-com)
(princ "\nChuyen ve ByLayer")
(setq ss (ssget "x"))
( setq i 0)
(while (< i (sslength ss))
(setq en (ssname ss i))
(if (/= (cdr (assoc 62 (entget en))) nil)
(moddxf 62 256 en)
)
(setq el (vlax-ename->vla-object en))
(vlax-put-property el 'Linetype "ByLayer")
(vlax-put-property el 'Lineweight -1)
(setq i (1+ i))
)
)


Các bác sửa giúp em cho nó chạy đc luôn cả trong block với. Viết code theo kiểu của hàm (UPWB) ý nhé. để em ngâm cứu nó phát.

VD về hàm con (UPWB): http://www.cadviet.c...o...st&p=105502

Chào bạn nguyentuyen6
Bạn xài thử cái này xem nhé, mình chưa chạy thử, chỉ áp dụng cái bạn đã viết vào thuật toán đệ quy của bác Tue_NV cho các đối tượng block mà thôi. Hy vọng nó đúng ý bạn.

(defun moddxf (dxf chdxf ss) (entmod (subst (cons dxf chdxf) (assoc dxf (entget ss)) (entget ss))))
(defun c:bylayer (/ ss en el i)
(vl-load-com)
(princ "\nChuyen ve ByLayer")
(setq ss (ssget "x"))
( setq i 0)
(while (< i (sslength ss))
(setq en (ssname ss i))
(if (/= (cdr (assoc 0 en)) "INSERT")
(progn
(if (/= (cdr (assoc 62 (entget en))) nil)
(moddxf 62 256 en)
)
(setq el (vlax-ename->vla-object en))
(vlax-put-property el 'Linetype "ByLayer")
(vlax-put-property el 'Lineweight -1)
)
(upwblock en)
)

(setq i (1+ i))
)
)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(defun upwblock ( blk / s en els el)
(setq s (cdr (assoc 2 (entget blk))))
(setq en (cdr (assoc -2 (tblsearch "BLOCK" s))))
(while en
(setq els (entget en))
(if (wcmatch (cdr (assoc 0 els)) "INSERT")
(UPWBlock en)
(progn
(if (/= (cdr (assoc 62 (entget en))) nil)
(moddxf 62 256 en)
)
(setq el (vlax-ename->vla-object en))
(vlax-put-property el 'Linetype "ByLayer")
(vlax-put-property el 'Lineweight -1)
)
)
(setq en (entnext en))
)
)

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

#606 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 25 November 2010 - 10:22 PM

@phamngoctukts: Cảm ơn bác nhé. Hix. Em nhìn vào cái đoạn Líp của bác đưa mà hoa hết cả mắt...

@phamthanhbinh: Cảm ơn bác bình. Cái líp của bác chạy ngon rồi. Cái hàm (upwblock) em hiểu máy móc nó là thế này.

Kiểm tra có phải Block hay ko. Nếu là block thì chạy hàm (upwblock)

(defun upwblock ( blk / s en els el)
(setq s (cdr (assoc 2 (entget blk))))
(setq en (cdr (assoc -2 (tblsearch "BLOCK" s))))
(while en
(setq els (entget en))
(if (wcmatch (cdr (assoc 0 els)) "INSERT")
(UPWBlock en)

........Làm cái gì thì làm ở đây.........

(entupd en)
(setq en (entnext en))
)
)

  • 0

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


#607 khaosat2009

khaosat2009

    biết lệnh offset

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

Đã gửi 26 November 2010 - 09:35 AM

Mình có sưu tầm 1 lisp về đánh số tăng dần, không biết sao không chạy được. Mong được các anh sửa giúp :

;****************** COPY HANG LOAT TANG DAN ***************************************ok

(defun c:ct (/ ang x y ent tg tg1tg2 num_r num_c num_inc dis_r dis_c num top idnum
dx dy bottom inc tgnum attr attr_ent t_base b_base locat value
deci stnum loca1 loca2 tt count inctg inctg1 bpoint mx my nx ny bx by)
(setq idnum 0)
(while (/= idnum 1)
(setq ent (entsel "\nHay lua chon so ma ban muon copy : "))
(if ent
(progn
(setq e (car ent))
(setq tg (entget e))
(if (= (cdr (assoc 0 tg)) "TEXT") (setq idnum 1))

)
(princ)
)
)

(setq num_inc (getreal "\nHay nhap he so tang giam <1> : "))
(if (= num_inc nil) (setq num_inc 1))

(setq bpoint (getpoint "\nChon diem goc de copy : "))
(setq x (car bpoint))
(setq y (car(cdr bpoint)))

(if (and (= (cdr (assoc 72 tg)) 0) (= (cdr (assoc 73 tg)) 0))
(progn
(setq bx (car (cdr (assoc 10 tg))))
(setq by (car (cdr (cdr (assoc 10 tg)))))
)
(progn
(setq bx (car (cdr (assoc 11 tg))))
(setq by (car (cdr (cdr (assoc 11 tg)))))
)
)

(setq attr (cdr tg)) ;attr chua cac thuoc tinh cua Entity nguon
(setq tg (cdr (assoc 1 tg)))
(setq inc 0)
(setq tg1 "")
(setq t_base "")
(setq b_base "")
(setq idnum 0)
(setq top 0)
(setq bottom 0)
(setq stnum "")
(setq deci 0)
(repeat (strlen tg)
(if (or (and (> (ascii (setq tgnum (substr tg (- (strlen tg) inc) 1))) 47)
(< (ascii (setq tgnum (substr tg (- (strlen tg) inc) 1))) 58))
(= (ascii (setq tgnum (substr tg (- (strlen tg) inc) 1))) 32)
(= (ascii (setq tgnum (substr tg (- (strlen tg) inc) 1))) 46))
(progn
(if (= (ascii (setq tgnum (substr tg (- (strlen tg) inc) 1))) 46) (setq deci inc))
(if (= inc 0)
(progn
(setq idnum 1)
(if (= (ascii (setq tgnum (substr tg (- (strlen tg) inc) 1))) 46)
(setq b_base (strcat "." b_base)))
)
)
(if (= bottom 1) (progn (setq bottom 0) (setq idnum 1) (setq top 1)))
(if (and (= idnum 0) (= top 1)) (setq t_base (strcat tgnum t_base)))
(if (= idnum 1)
(progn
(if (and (= tgnum "0") (> inc 0)) (setq stnum (strcat stnum "0")) (setq stnum ""))
(setq tg1 (strcat tgnum tg1))
)
)
)
(if (= inc 0)
(progn
(setq b_base (strcat tgnum b_base))
(setq bottom 1)
)
(if (= bottom 1)
(setq b_base (strcat tgnum b_base))
(progn
(setq top 1)
(setq t_base (strcat tgnum t_base))
(if (= idnum 1) (setq idnum 0))
)
)
)
)
(setq inc (+ inc 1))
)
(if (= tg1 "") (exit))
(setq num (atof tg1))
(setq count 1)

(while (setq bpoint (getpoint "\nChon diem copy tiep theo : "))
(setq num (+ num num_inc))
(setq value (strcat t_base (strcat stnum (rtos num 2 deci)) b_base))
(setq nx (car bpoint))
(setq ny (car(cdr bpoint)))
(setq dx (- nx x))
(setq dy (- ny y))
(setq mx (car (getvar "ucsxdir")))
(setq my (car (cdr (getvar "ucsxdir"))))
(setq loca1 (+ bx (* mx dx)))
(setq loca2 (+ by (* my dx)))
(setq mx (car (getvar "ucsydir")))
(setq my (car (cdr (getvar "ucsydir"))))
(setq loca1 (+ loca1 (* mx dy)))
(setq loca2 (+ loca2 (* my dy)))
(setq attr_ent (subst (cons 1 value) (assoc 1 attr) attr))
(if (and (= (cdr (assoc 72 attr_ent)) 0) (= (cdr (assoc 73 attr_ent)) 0))
(setq attr_ent (subst (list 10 loca1 loca2 0) (assoc 10 attr_ent) attr_ent))
(setq attr_ent (subst (list 11 loca1 loca2 0) (assoc 11 attr_ent) attr_ent))
)
(entmake attr_ent)
(setq count (+ count 1))
) ;end while
(princ)
)

  • 0

#608 hochoaivandot

hochoaivandot

    biết dimradius

  • Members
  • PipPipPipPipPip
  • 310 Bài viết
Điểm đánh giá: 106 (tàm tạm)

Đã gửi 26 November 2010 - 10:08 AM

Mình có sưu tầm 1 lisp về đánh số tăng dần, không biết sao không chạy được. Mong được các anh sửa giúp :


;****************** COPY HANG LOAT TANG DAN ***************************************ok

(defun c:ct (/ ang x y ent tg tg1tg2 num_r num_c num_inc dis_r dis_c num top idnum
dx dy bottom inc tgnum attr attr_ent t_base b_base locat value
deci stnum loca1 loca2 tt count inctg inctg1 bpoint mx my nx ny bx by)
(setq idnum 0)
(while (/= idnum 1)
(setq ent (entsel "\nHay lua chon so ma ban muon copy : "))
(if ent
(progn
(setq e (car ent))
(setq tg (entget e))
(if (= (cdr (assoc 0 tg)) "TEXT") (setq idnum 1))
)
(princ)
)
)

(setq num_inc (getreal "\nHay nhap he so tang giam <1> : "))
(if (= num_inc nil) (setq num_inc 1))

(setq bpoint (getpoint "\nChon diem goc de copy : "))
(setq x (car bpoint))
(setq y (car(cdr bpoint)))

(if (and (= (cdr (assoc 72 tg)) 0) (= (cdr (assoc 73 tg)) 0))
(progn
(setq bx (car (cdr (assoc 10 tg))))
(setq by (car (cdr (cdr (assoc 10 tg)))))
)
(progn
(setq bx (car (cdr (assoc 11 tg))))
(setq by (car (cdr (cdr (assoc 11 tg)))))
)
)

(setq attr (cdr tg)) ;attr chua cac thuoc tinh cua Entity nguon
(setq tg (cdr (assoc 1 tg)))
(setq inc 0)
(setq tg1 "")
(setq t_base "")
(setq b_base "")
(setq idnum 0)
(setq top 0)
(setq bottom 0)
(setq stnum "")
(setq deci 0)
(repeat (strlen tg)
(if (or (and (> (ascii (setq tgnum (substr tg (- (strlen tg) inc) 1))) 47)
(< (ascii (setq tgnum (substr tg (- (strlen tg) inc) 1))) 58))
(= (ascii (setq tgnum (substr tg (- (strlen tg) inc) 1))) 32)
(= (ascii (setq tgnum (substr tg (- (strlen tg) inc) 1))) 46))
(progn
(if (= (ascii (setq tgnum (substr tg (- (strlen tg) inc) 1))) 46) (setq deci inc))
(if (= inc 0)
(progn
(setq idnum 1)
(if (= (ascii (setq tgnum (substr tg (- (strlen tg) inc) 1))) 46)
(setq b_base (strcat "." b_base)))
)
)
(if (= bottom 1) (progn (setq bottom 0) (setq idnum 1) (setq top 1)))
(if (and (= idnum 0) (= top 1)) (setq t_base (strcat tgnum t_base)))
(if (= idnum 1)
(progn
(if (and (= tgnum "0") (> inc 0)) (setq stnum (strcat stnum "0")) (setq stnum ""))
(setq tg1 (strcat tgnum tg1))
)
)
)
(if (= inc 0)
(progn
(setq b_base (strcat tgnum b_base))
(setq bottom 1)
)
(if (= bottom 1)
(setq b_base (strcat tgnum b_base))
(progn
(setq top 1)
(setq t_base (strcat tgnum t_base))
(if (= idnum 1) (setq idnum 0))
)
)
)
)
(setq inc (+ inc 1))
)
(if (= tg1 "") (exit))
(setq num (atof tg1))
(setq count 1)

(while (setq bpoint (getpoint "\nChon diem copy tiep theo : "))
(setq num (+ num num_inc))
(setq value (strcat t_base (strcat stnum (rtos num 2 deci)) b_base))
(setq nx (car bpoint))
(setq ny (car(cdr bpoint)))
(setq dx (- nx x))
(setq dy (- ny y))
(setq mx (car (getvar "ucsxdir")))
(setq my (car (cdr (getvar "ucsxdir"))))
(setq loca1 (+ bx (* mx dx)))
(setq loca2 (+ by (* my dx)))
(setq mx (car (getvar "ucsydir")))
(setq my (car (cdr (getvar "ucsydir"))))
(setq loca1 (+ loca1 (* mx dy)))
(setq loca2 (+ loca2 (* my dy)))
(setq attr_ent (subst (cons 1 value) (assoc 1 attr) attr))
(if (and (= (cdr (assoc 72 attr_ent)) 0) (= (cdr (assoc 73 attr_ent)) 0))
(setq attr_ent (subst (list 10 loca1 loca2 0) (assoc 10 attr_ent) attr_ent))
(setq attr_ent (subst (list 11 loca1 loca2 0) (assoc 11 attr_ent) attr_ent))
)
(entmake attr_ent)
(setq count (+ count 1))
) ;end while
(princ)
)


Lisp dùng bình thường mà khaosat2009, nhưng chỉ áp dụng được cho TEXT thôi chứ không hổ trợ MTEXT.
Bạn xem lại thử! Diễn đàn có thể bổ sung thêm để hổ trợ cho cả MTEXT không nhỉ!

Bài viết đã được chỉnh sửa nội dung bởi phamthanhbinh: 26 November 2010 - 11:54 AM

  • 0

Dương Bá Diệp

 

www.cadonline.duyxuyen.vn 

 

Thành viên nhóm CADMAGIC

 


#609 phamthanhbinh

phamthanhbinh

    biết lệnh adcenter

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

Đã gửi 26 November 2010 - 11:47 AM

@phamngoctukts: Cảm ơn bác nhé. Hix. Em nhìn vào cái đoạn Líp của bác đưa mà hoa hết cả mắt...

@phamthanhbinh: Cảm ơn bác bình. Cái líp của bác chạy ngon rồi. Cái hàm (upwblock) em hiểu máy móc nó là thế này.

Kiểm tra có phải Block hay ko. Nếu là block thì chạy hàm (upwblock)

(defun upwblock ( blk / s en els el)
(setq s (cdr (assoc 2 (entget blk))))
(setq en (cdr (assoc -2 (tblsearch "BLOCK" s))))
(while en
(setq els (entget en))
(if (wcmatch (cdr (assoc 0 els)) "INSERT")
(UPWBlock en)

........Làm cái gì thì làm ở đây.........

(entupd en)
(setq en (entnext en))
)
)

Chào bạn nguyentuyen6,
Đúng là làm cái gì thì làm ở đây, nhưng vấn đề là làm thế nào bạn ạ. Hàm nào trong lisp cũng tương tự như bạn hiểu thôi mà. Trong hàm upwblock, cái bạn cần lưu ý là việc sử dụng phép đệ quy để khi hàm gặp đối tượng block thì sẽ lặp lại chính nó. Việc này tuy đơn giản vậy nhưng bạn cũng nên tìm hiểu thêm chút chút về cái phép đệ quy này bạn ạ. Có nhiều thứ hay ra phết. Hề hề hề.
Trên diễn đàn đã có nói về vấn đề này, nhờ đó mình mới vỡ vạc được chút xíu, mình nhớ không nhầm thì hình như cũng nằm trong topic này thì phải. Bạn kiếm thử coi nhé. Các bác ấy chỉ hay lắm.....
Chúc bạn thành công.
  • 1
Chúc các quý Anh trên diễn đàn luôn khỏe, đẻ thêm được nhiều thứ để mót.

#610 phamthanhbinh

phamthanhbinh

    biết lệnh adcenter

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

Đã gửi 26 November 2010 - 12:27 PM

Lisp dùng bình thường mà khaosat2009, nhưng chỉ áp dụng được cho TEXT thôi chứ không hổ trợ MTEXT.
Bạn xem lại thử! Diễn đàn có thể bổ sung thêm để hổ trợ cho cả MTEXT không nhỉ!

Chào bạn Hochoaivandot,
Hề hề hề,
Mình đã xem cái lisp này, với cấu trúc lísp này việc bổ sung nó để có thể chạy được với Mtext là rất khó chịu ,vì lisp dựa trên việc xác định các ký tự trong chuỗi text được lấy từ mã DXF 1 của đối tượng. Với Mtext, chuỗi này còn bao gồm cả các mã về định dạng của Mtext như kiểu ,font, ..... mà việc dùng font và kiểu Mtext của người sử dụng lại khá đa dạng chứ không phải chỉ có một kiểu duy nhất. Do đó việc xác định đúng vị trí của các ký tự này là một vấn đề cần phải dựa vào từng bản vẽ cụ thể mới được bạn ạ.
Theo thiển ý của mình thì như vậy thà làm một lisp riêng sẽ tốt hơn, sau này người sử dụng sẽ căn cứ vào cái Mtext cụ thể để hiệu chỉnh lisp cho phù hợp là OK.
Muốn vậy bạn phải post một cái bản vẽ có Mtext và cái kết quả bạn cần bạn nhé.
Chúc bạn vui.

Bài viết đã được chỉnh sửa nội dung bởi phamthanhbinh: 26 November 2010 - 03:41 PM

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

#611 hochoaivandot

hochoaivandot

    biết dimradius

  • Members
  • PipPipPipPipPip
  • 310 Bài viết
Điểm đánh giá: 106 (tàm tạm)

Đã gửi 26 November 2010 - 02:04 PM

Chào bạn Hôchaivandot,
Hề hề hề,
Mình đã xem cái lisp này, với cấu trúc lísp này việc bổ sung nó để có thể chạy được với Mtext là rất khó chịu ,vì lisp dựa trên việc xác định các ký tự trong chuỗi text được lấy từ mã DXF 1 của đối tượng. Với Mtext, chuỗi này còn bao gồm cả các mã về định dạng của Mtext như kiểu ,font, ..... mà việc dùng font và kiểu Mtext của người sử dụng lại khá đa dạng chứ không phải chỉ có một kiểu duy nhất. Do đó việc xác định đúng vị trí của các ký tự này là một vấn đề cần phải dựa vào từng bản vẽ cụ thể mới được bạn ạ.
Theo thiển ý của mình thì như vậy thà làm một lisp riêng sẽ tốt hơn, sau này người sử dụng sẽ căn cứ vào cái Mtext cụ thể để hiệu chỉnh lisp cho phù hợp là OK.
Muốn vậy bạn phải post một cái bản vẽ có Mtext và cái kếp quả bạn cần bạn nhé.
Chúc bạn vui.


Chào anh phamthanhbình.
Em muốn có 1 lisp tổng quảt để có thể dùng cho mọi trường hợp.
Với trường hợp Mtext không định dạng thì mọi chuyện không phải bàn.
Với trường hợp Mtext có định dạng thì Khó khăn anh đã nêu ra đúng quá rồi.
Tuy nhiên em nghĩ các định dạng được đưa thêm vào mã dxf 1 của mtext tuy đa dạng nhưng đều có quy luật.
Sau đây là một số nội dung MTEXT lấy theo mã DXF1
(1 . "{\\fTimes New Roman|b0|i0|c0|p18;\\W1.3;\\T1.4;\\C2;STT : 2}")
(1 . "\\pi-3,l3,t3;{\\fTimes New Roman|b0|i0|c0|p18;\\T0.75;\\C1;STT : 2}")
Nội dung chính của MTEXT là STT : 2 được giới hạn từ dấu ; cuối cùng đến dấu } sau cùng
(Tấc nhiên trường hợp trong ndung chính của MTEXT có dâus ; thì quy luật này không đúng Ví dụ STT;=2 Tuy nhiên thợp này hiếm)
Không biết em test có thiều trường hợp nào không, chứ nếu quy luật là như vậy thì ta có thể làm được mục đích của lisp trên cho MTEXT.
Thân mến!
  • 0

Dương Bá Diệp

 

www.cadonline.duyxuyen.vn 

 

Thành viên nhóm CADMAGIC

 


#612 khaosat2009

khaosat2009

    biết lệnh offset

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

Đã gửi 27 November 2010 - 10:56 AM

Nhờ các anh giúp hổ trợ lisp đánh số tăng dần hoạt động với MTEXT.
Cám ơn
  • 0

#613 phamthanhbinh

phamthanhbinh

    biết lệnh adcenter

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

Đã gửi 27 November 2010 - 11:29 AM

Nhờ các anh giúp hổ trợ lisp đánh số tăng dần hoạt động với MTEXT.
Cám ơn

Chào bạn khaosat2009,
Bạn không đọc các bài póst trước hay sao??? Như đã nói với mtext do có nhiều kiểu định dạng khác nhau nên rất khó để làm một lisp cho mọi trường hợp, chỉ có thể làm cho một trường hợp cụ thể rồi từ đó các bạn tự hiệu chỉnh cho nó phù hợp với cái font, kiểu,,,, mtext mà các bạn sử dụng. Bạn muốn làm thì phải post một cái bản vẽ cụ thể lên chứ, nói chung chung vậy thì chịu chết. Nhớ là phải post đúng cái bạn đang cần để đỡ mất công chỉnh sửa lại lisp và ít nhất bạn cũng có cái dùng và có thời gian để ngâm cứu chỉnh sửa sau.
Mình nhắc lại là việc chỉnh sửa về sau thì tự các bạn phải cố gắng chứ đừng ỷ lại vì mọi người trên diễn đàn không phải lúc nào cũng giúp các bạn được ngay đâu, mà công việc của các bạn thì không ai làm hộ được. Nếu có gì khó khăn trong lúc chỉnh sửa hãy post lên mọi người có thể góp ý thôi, rồi các bạn tự làm, Có vậy các bạn mới chủ động được trong công việc của mình và mới đáp ứng được yêu cầu của công việc. Mong các bạn hãy cố gắng hơn.
  • 1
Chúc các quý Anh trên diễn đàn luôn khỏe, đẻ thêm được nhiều thứ để mót.

#614 Thaistreetz

Thaistreetz

    biết lệnh adcenter

  • Advance Member
  • PipPipPipPipPipPipPip
  • 903 Bài viết
Điểm đánh giá: 505 (tốt)

Đã gửi 27 November 2010 - 12:47 PM

Chào bạn khaosat2009,
Bạn không đọc các bài póst trước hay sao??? Như đã nói với mtext do có nhiều kiểu định dạng khác nhau nên rất khó để làm một lisp cho mọi trường hợp, chỉ có thể làm cho một trường hợp cụ thể rồi từ đó các bạn tự hiệu chỉnh cho nó phù hợp với cái font, kiểu,,,, mtext mà các bạn sử dụng. Bạn muốn làm thì phải post một cái bản vẽ cụ thể lên chứ, nói chung chung vậy thì chịu chết. Nhớ là phải post đúng cái bạn đang cần để đỡ mất công chỉnh sửa lại lisp và ít nhất bạn cũng có cái dùng và có thời gian để ngâm cứu chỉnh sửa sau.
Mình nhắc lại là việc chỉnh sửa về sau thì tự các bạn phải cố gắng chứ đừng ỷ lại vì mọi người trên diễn đàn không phải lúc nào cũng giúp các bạn được ngay đâu, mà công việc của các bạn thì không ai làm hộ được. Nếu có gì khó khăn trong lúc chỉnh sửa hãy post lên mọi người có thể góp ý thôi, rồi các bạn tự làm, Có vậy các bạn mới chủ động được trong công việc của mình và mới đáp ứng được yêu cầu của công việc. Mong các bạn hãy cố gắng hơn.

Bác nhắc lại với ông Khaosat2009 này làm chi cho mệt bác ơi. Từ hồi em chân uớt chân khô đến diễn đàn này đã đuợc gần 2 năm rồi mà ông ấy vẫn vậy. Vẫn cái thói ỷ lại ấy, vẫn những yêu cầu nghe nhiều đến fát nhàm ấy, cũng đã làm khối người mất hết kiên nhẫn rùi <_<
  • 1

Hình đã gửi
IN HIM, I TRUST. THE TRUST IN MY GOD


#615 vietha209

vietha209

    biết zoom

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

Đã gửi 02 December 2010 - 06:27 PM

Em muốn tạo file chứa Block E-CSB để thực hiện đoạn lisp này thì làm thế nào ah :
(Entmake (List(cons 0 "INSERT")(cons 2 "E-CSB")(cons 10 p51)))

Mọi người cho mình hỏi là tại sao mã dxf 0 mình đọc help thấy ghi là entity type, vậy thì tại sao block lại là "insert" như bạn pfievxd trên kia viết, và polyline có phải là (cons 0 "polyline") không? Xin lỗi nếu câu hỏi của mình là gà.
  • 0

#616 hochoaivandot

hochoaivandot

    biết dimradius

  • Members
  • PipPipPipPipPip
  • 310 Bài viết
Điểm đánh giá: 106 (tàm tạm)

Đã gửi 03 December 2010 - 09:37 AM

Chào bạn Hochoaivandot,
Hề hề hề,
Mình đã xem cái lisp này, với cấu trúc lísp này việc bổ sung nó để có thể chạy được với Mtext là rất khó chịu ,vì lisp dựa trên việc xác định các ký tự trong chuỗi text được lấy từ mã DXF 1 của đối tượng. Với Mtext, chuỗi này còn bao gồm cả các mã về định dạng của Mtext như kiểu ,font, ..... mà việc dùng font và kiểu Mtext của người sử dụng lại khá đa dạng chứ không phải chỉ có một kiểu duy nhất. Do đó việc xác định đúng vị trí của các ký tự này là một vấn đề cần phải dựa vào từng bản vẽ cụ thể mới được bạn ạ.
Theo thiển ý của mình thì như vậy thà làm một lisp riêng sẽ tốt hơn, sau này người sử dụng sẽ căn cứ vào cái Mtext cụ thể để hiệu chỉnh lisp cho phù hợp là OK.
Muốn vậy bạn phải post một cái bản vẽ có Mtext và cái kết quả bạn cần bạn nhé.
Chúc bạn vui.


Chào anh phamthanhbinh một lần nữa.
Mình có tìm được 1 lisp trên mạng liên quan đến định dạng của Mtext.
Lisp này tách lấy phần nội dung chính của Mtext. Nếu đem bổ sung cho lisp đánh số tăng dần mà khaosat2009 upload thì cơ bản giải quyết được chức năng cho Mtext.
Tuy nhiên mình thấy lisp của anh ssg tổng quát hơn cho yêu cầu đánh số tăng dần (tăng cho cả chữ và chọn cả bước tăng), Mình ghép với líp mình sưu tầm như sau:


;;;-------------------------------------------------
(defun dxf (code e) (cdr (assoc code (entget e))))
(defun etype (e);;;Entity Type
(cdr (assoc 0 (entget e)))
)
;;;-------------------------------------------------
(defun wtxt (txt p / sty d h);;;Write txt on graphic screen, defaul setting
(setq
sty (getvar "textstyle")
d (tblsearch "style" sty)
h (cdr (assoc 40 d))
)
(if (= h 0) (setq h (cdr (assoc 42 d))))
(entmake
(list (cons 0 "TEXT") (cons 7 sty) (cons 1 txt) (cons 10 p) (cons 40 h) (assoc 41 d))
)
)
(defun wtxtt (txt p h / sty d);;;Write txt on graphic screen, defaul setting
(setq
sty (getvar "textstyle")
d (tblsearch "style" sty)
)
(if (= h 0) (setq h (cdr (assoc 42 d))))
(entmake
(list (cons 0 "TEXT") (cons 7 sty) (cons 1 txt) (cons 10 p) (cons 40 h) (assoc 41 d))
)
)
;;;-------------------------------------------------
(defun incN (n dn / n2 i n1);;;Increase number n
(setq
n2 (itoa (+ dn (atoi n)))
i (- (strlen n) (strlen n2))
)
(if (> i 0) (setq n1 (substr n 1 i)) (setq n1 ""))
(strcat n1 n2)
)
;;;-------------------------------------------------
(defun incC (c / i c1 c2);;;Increase character c
(setq
i (strlen c)
c1 (substr c 1 (- i 1))
c2 (chr (1+ (ascii (substr c i 1))))
)
(if (or (= c2 "{") (= c2 "["))
(progn (command "erase" (entlast) "") (alert "Over character!") (exit))
(strcat c1 c2)
)
)
;;;-------------------------------------------------
(defun MTEXTCF0 (str / j len sub1 sig)
(setq sig "")
(setq j 1)
(setq len (strlen str))
(while (<= j len)
(setq sub1 (substr str j 1))
(if (= sub1 "\\")
(progn
(setq j (1+ j))
(setq sub1 (substr str j 1))
(if (or (= sub1 "{") (= sub1 "}") (= sub1 "\\") (= sub1 "P") (= sub1 "L"))
(setq sig (strcat sig "\\" sub1))
(progn
(while (and (/= sub1 ";") (<= j len))
(setq j (1+ j))
(setq sub1 (substr str j 1))
)
)
)
)
(if (and (/= sub1 "{") (/= sub1 "}"))
(setq sig (strcat sig sub1))
)
)
(setq j (1+ j))
)
sig
)
;;;-------------------------------------------------
(defun C:coi( / e dn p1 cn c n p2 dat)
(vl-load-com)
(setq
e (car (entsel "\nSelect template text:"))
dn (getint "\nIncrement <1>: ")
p1 (getpoint "\nBase point:")
cn (cdr (assoc 1 (entget e)))
cn1 (MTEXTCF0 cn) cn2 cn1
)
(if (not dn) (setq dn 1))
(if (= cn1 "") (setq cn1 "1"))
(setq
c (vl-string-right-trim "0 1 2 3 4 5 6 7 8 9" cn1)
n (vl-string-subst "" c cn1)
)
(while (setq p2 (getpoint p1 "\nNew point : "))
(command "copy" e "" p1 p2)
(if (= n "")
(setq cn1 (incC cn1))
(setq cn1 (strcat c (incN (vl-string-subst "" c cn1) dn)))
)
(setq dat (entget (entlast)))
(setq cn3 (vl-string-subst cn1 cn2 cn))
(setq dat (subst (cons 1 cn3) (assoc 1 dat) dat) )
(entmod dat)
)
(princ)
)

Trường hợp nội dung MTEXT ghi tiếng việt có dấu dùng font Unicode thì bị lỗi. Mong các anh nghiên cứu sửa lỗi này và phát hiện những lỗi khác để lisp tổng quát hơn.
  • 0

Dương Bá Diệp

 

www.cadonline.duyxuyen.vn 

 

Thành viên nhóm CADMAGIC

 


#617 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 December 2010 - 05:53 PM

Mình có lisp tao lớp , hatch, xin hỏi các dấu "" có ý nghỉa gì :
defun c:TaoL()
(command "layer" "m" "!chu" "c" "3" "" "")
(command "style" "!vnAvanH" ".VnAvantH" "" "" "" "" "")
(princ)
)

va hatch
(command "hatch" "p199a" "2" "0" "L" "100,-4.5" "")

Mong được hướng dẫn . Cám ơn

Dấu "" tức là kí tự trống là 1 lần enter đó bạn ạ.
  • 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!

#618 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 December 2010 - 08:44 PM

Trong lệnh tạo hatch các dấu trong "" là gì đó bạn

lệnh tạo hatch là (command "hatch" "p199a" "2" "0" "L" "100,-4.5" "")
p199a: là tên hatch
2: là tỉ lệ của hatch
0: là góc quay
L: là lúc select mà ở đây dùng l tức là last chọn đối tượng cuối cùng.
mình thấy thế là đủ và không hiểu "100,-4.5" "" là gì vì không cần đến.
Bạn muốn kiểm tra thì dùng lệnh -hatch hoặc (command "hatch")
  • 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!

#619 phamthanhbinh

phamthanhbinh

    biết lệnh adcenter

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

Đã gửi 10 December 2010 - 09:46 AM

Mọi người cho mình hỏi là tại sao mã dxf 0 mình đọc help thấy ghi là entity type, vậy thì tại sao block lại là "insert" như bạn pfievxd trên kia viết, và polyline có phải là (cons 0 "polyline") không? Xin lỗi nếu câu hỏi của mình là gà.

Hê hề hề,
Tại vì Cad nó bảo thế mà lị. Tất cả các block, kể cả block thuộc tính đều có entity type là insert bạn ạ. Còn các polyline thì có entity type là Polyline. Cái bạn viết (cons 0 "polyline") sẽ trả về một dot pair list là '(0 . "polyline") bạn ạ.
Muốn biết rõ hơn, bạn chịu khó tìm hiểu thêm trong help developer của CAD bạn nhé.
Hề hề hề...
  • 1
Chúc các quý Anh trên diễn đàn luôn khỏe, đẻ thêm được nhiều thứ để mót.

#620 phamngoctukts

phamngoctukts

    biết lệnh adcenter

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

Đã gửi 10 December 2010 - 10:58 AM

Hê hề hề,
Tại vì Cad nó bảo thế mà lị. Tất cả các block, kể cả block thuộc tính đều có entity type là insert bạn ạ. Còn các polyline thì có entity type là Polyline. Cái bạn viết (cons 0 "polyline") sẽ trả về một dot pair list là '(0 . "polyline") bạn ạ.
Muốn biết rõ hơn, bạn chịu khó tìm hiểu thêm trong help developer của CAD bạn nhé.
Hề hề hề...

Hê hê Bác Bình già nên lẫn rồi đường polyline entity type là LWPOLYLINE.
  • 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!