Đến nội dung


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

Viết Lisp theo yêu cầu


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

#2321 truongthanh

truongthanh

    biết lệnh text

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

Đã gửi 09 July 2009 - 10:42 AM

chào các bác
em tham gia diễn đàn mới được 1 thời gian nên chưa có điều kiện đọc hết các mục
nay em bị mắc 1 việc mà làm mãi không xong, mạo muội nhờ các bác giúp em chút
(em chưa tìm hết trên diễn đàn, nếu đã có rồi thì các bác bỏ quá cho em nhé)
Yêu cầu công việc của em như thế này:
- có 1 cánh đồng đánh số các thửa đất từ 1 đến 100 nhưng thuộc 2 xóm
- có 1 file excel chứa số thứ tự các thửa đất đó và tương ứng thuộc xóm nào
giờ em muốn 1 lisp nào đó tích hợp từ cel vào cad hiển thị cho em (có thể là đổi màu)
các thửa đất theo 2 xóm khác nhau đó
(phần việc của em nặng hơn nhìu :s_big: nhưng em chỉ lấy VD như trên cho dễ hiểu)
mong các bác bỏ chút thời gian đọc và giúp em

theo ý mình thì bạn dùng EXCELLINK là tốt nhất!
  • 0

#2322 lon ton

lon ton

    biết zoom

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

Đã gửi 09 July 2009 - 10:47 AM

theo ý mình thì bạn dùng EXCELLINK là tốt nhất!

bác có thể chỉ rõ giúp em được không?
em là beginer mà :s_big:
  • 0

#2323 q288

q288

    biết lệnh fillet

  • Members
  • PipPipPipPip
  • 209 Bài viết
Điểm đánh giá: 164 (tàm tạm)

Đã gửi 09 July 2009 - 11:17 AM

cảm ơn bạn nhé!nhưng sao mình dùng cái này ko giống với ý mình!nó hiện ra 1 dãy số gì đó dài nhằng và nó nằm 1 góc 1 độ chứ nó ko có xoay theo Pline!bạn coi lại giúp mình nhé!


Chắc text của bạn là mtext tiếng Việt pko? cho nên nó mới xảy ra hiện tượng như vậy, mình sửa lại như sau, bây giờ thì nó move text về pline chứ ko tạo text mới.

(defun c:ist(/ chu os obj ndai p1 p2 pm ang)
(vl-load-com)
(setq chu (vlax-ename->vla-object (car (entsel "\nChon text :")))
os (getvar "OSMODE")
obj (vlax-ename->vla-object (car (entsel "\nChon duong de chen :")))
ndai (/ (vlax-curve-getDistAtParam obj (vlax-curve-getEndParam obj)) 2)
pr (vlax-curve-getParamAtDist obj ndai)
p1 (vlax-curve-getPointAtParam obj (- pr 0.1))
p2 (vlax-curve-getPointAtParam obj (+ pr 0.1))
pm (vlax-curve-getPointAtParam obj pr)
ang (if (< (car p1) (car p2)) (angle p1 p2) (angle p2 p1))
)
(setvar "OSMODE" 0)
(vla-put-Rotation chu ang)
(vla-put-InsertionPoint chu (vlax-3d-Point pm))
(setvar "OSMODE" os)
)

  • 1

#2324 truongthanh

truongthanh

    biết lệnh text

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

Đã gửi 09 July 2009 - 11:19 AM

bác có thể chỉ rõ giúp em được không?
em là beginer mà :s_big:

bạn lên mạng SEARCH phần mềm tên EXCELLINK về rồi dùng!nó có thể xuất đối tượng block attribute trong CAD qua bên excel và ngược lại!bạn có thể chỉnh sửa bên excel xong sau đó import lại qua bên CAD!
  • 1

#2325 truongthanh

truongthanh

    biết lệnh text

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

Đã gửi 09 July 2009 - 11:27 AM

Chắc text của bạn là mtext tiếng Việt pko? cho nên nó mới xảy ra hiện tượng như vậy, mình sửa lại như sau, bây giờ thì nó move text về pline chứ ko tạo text mới.


(defun c:ist(/ chu os obj ndai p1 p2 pm ang)
(vl-load-com)
(setq chu (vlax-ename->vla-object (car (entsel "\nChon text :")))
os (getvar "OSMODE")
obj (vlax-ename->vla-object (car (entsel "\nChon duong de chen :")))
ndai (/ (vlax-curve-getDistAtParam obj (vlax-curve-getEndParam obj)) 2)
pr (vlax-curve-getParamAtDist obj ndai)
p1 (vlax-curve-getPointAtParam obj (- pr 0.1))
p2 (vlax-curve-getPointAtParam obj (+ pr 0.1))
pm (vlax-curve-getPointAtParam obj pr)
ang (if (< (car p1) (car p2)) (angle p1 p2) (angle p2 p1))
)
(setvar "OSMODE" 0)
(vla-put-Rotation chu ang)
(vla-put-InsertionPoint chu (vlax-3d-Point pm))
(setvar "OSMODE" os)
)

cảm ơn bạn nhé!cái này nó gần đúng với ý mình rồi!khoảng được 50%!bạn có thể chỉnh sửa lại thêm được nữa ko?mình muốn sau khi quét xong cái TEXT nó sẽ MOVE vào nằm dưới MIDDLE CENTER đường PLINE và cách PLINE 1 khoảng bằng chiều cao của TEXT (hoặc là khoảng cách này mình tự nhập vào thì càng tốt)! (hiên nay nó chỉ đúng với MTEXT và nằm sát với PLINE, còn DTEXT thì nó chỉ xoay thôi và nằm yên,ko MOVE về PLINE)cảm ơn sự tận tình của bạn rất nhiều!
  • 0

#2326 xuandao0708

xuandao0708

    biết lệnh scale

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

Đã gửi 09 July 2009 - 12:16 PM

Nhờ các Bác viết dùng em 1 lisp dùng để chạy kích thước và ghi text khoảng cách song song và nằm giữa với đường line hoặc pline được chọn. Lisp sẽ tạo layer kthuoc nếu bản vẽ chưa có layer kthuoc. Khi chọn hàng loạt đường line hoặc pline thì cho người sử dụng được chọn có vẽ mũi tên hay không vẽ mũi tên. Thank các Bác nhiều. :s_big:
File cad mẫu.
http://www.cadviet.c...files/mau_5.dwg
  • 0

#2327 xuandao0708

xuandao0708

    biết lệnh scale

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

Đã gửi 09 July 2009 - 12:43 PM

Hix. em quên nữa. Bác có thể cho người sử dụng được chọn chiều cao text, khoảng cách từ text đến đường line hoặc pline cho người sử dụng được nhập. Khoảng cách kích thước được tính theo tỉ lệ 1/500(tỉ lệ thực trên bản vẽ 1/1) hay 1/200 ( tương đương tỉ lệ 5/2), 1/1000( tương đương tỷ lệ 5/10).
Em up lại file mẫu bản vẽ.
http://www.cadviet.c...files/mau_6.dwg
  • 0

#2328 q288

q288

    biết lệnh fillet

  • Members
  • PipPipPipPip
  • 209 Bài viết
Điểm đánh giá: 164 (tàm tạm)

Đã gửi 09 July 2009 - 02:24 PM

cảm ơn bạn nhé!cái này nó gần đúng với ý mình rồi!khoảng được 50%!bạn có thể chỉnh sửa lại thêm được nữa ko?mình muốn sau khi quét xong cái TEXT nó sẽ MOVE vào nằm dưới MIDDLE CENTER đường PLINE và cách PLINE 1 khoảng bằng chiều cao của TEXT (hoặc là khoảng cách này mình tự nhập vào thì càng tốt)! (hiên nay nó chỉ đúng với MTEXT và nằm sát với PLINE, còn DTEXT thì nó chỉ xoay thôi và nằm yên,ko MOVE về PLINE)cảm ơn sự tận tình của bạn rất nhiều!


Yêu cầu càng lúc càng nhiều hỉ :s_big: . Sửa thêm lần nữa.

(defun c:ist(/ chu os obj ndai p1 p2 pm ang)
(vl-load-com)
(if (not kc) (setq kc 1))
(setq kc1 (getreal (strcat "\nKhoang cach tu text den duong <" (rtos kc) ">:")))
(if kc1 (setq kc kc1))

(setq chu (vlax-ename->vla-object (car (entsel "\nChon text :")))
os (getvar "OSMODE")
obj (vlax-ename->vla-object (car (entsel "\nChon duong de chen :")))
ndai (/ (vlax-curve-getDistAtParam obj (vlax-curve-getEndParam obj)) 2)
pr (vlax-curve-getParamAtDist obj ndai)
p1 (vlax-curve-getPointAtParam obj (- pr 0.1))
p2 (vlax-curve-getPointAtParam obj (+ pr 0.1))
pm (vlax-curve-getPointAtParam obj pr)
ang (if (< (car p1) (car p2)) (angle p1 p2) (angle p2 p1))
pd (polar pm (- ang (* 0.5 pi)) kc)
)
(setvar "OSMODE" 0)
(vla-put-Rotation chu ang)
(cond ((= "AcDbText" (vla-get-ObjectName chu))
(vla-put-Alignment chu 10)
(vla-put-TextAlignmentPoint chu (vlax-3d-Point pd)))

((= "AcDbMText" (vla-get-ObjectName chu))
(vla-put-AttachmentPoint chu 5)
(vla-put-InsertionPoint chu (vlax-3d-Point pd)))
)
(setvar "OSMODE" os)
)

  • 2

#2329 truongthanh

truongthanh

    biết lệnh text

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

Đã gửi 09 July 2009 - 02:33 PM

Yêu cầu càng lúc càng nhiều hỉ :s_big: . Sửa thêm lần nữa.


(defun c:ist(/ chu os obj ndai p1 p2 pm ang)
(vl-load-com)
(if (not kc) (setq kc 1))
(setq kc1 (getreal (strcat "\nKhoang cach tu text den duong <" (rtos kc) ">:")))
(if kc1 (setq kc kc1))

(setq chu (vlax-ename->vla-object (car (entsel "\nChon text :")))
os (getvar "OSMODE")
obj (vlax-ename->vla-object (car (entsel "\nChon duong de chen :")))
ndai (/ (vlax-curve-getDistAtParam obj (vlax-curve-getEndParam obj)) 2)
pr (vlax-curve-getParamAtDist obj ndai)
p1 (vlax-curve-getPointAtParam obj (- pr 0.1))
p2 (vlax-curve-getPointAtParam obj (+ pr 0.1))
pm (vlax-curve-getPointAtParam obj pr)
ang (if (< (car p1) (car p2)) (angle p1 p2) (angle p2 p1))
pd (polar pm (- ang (* 0.5 pi)) kc)
)
(setvar "OSMODE" 0)
(vla-put-Rotation chu ang)
(cond ((= "AcDbText" (vla-get-ObjectName chu))
(vla-put-Alignment chu 10)
(vla-put-TextAlignmentPoint chu (vlax-3d-Point pd)))

((= "AcDbMText" (vla-get-ObjectName chu))
(vla-put-AttachmentPoint chu 5)
(vla-put-InsertionPoint chu (vlax-3d-Point pd)))
)
(setvar "OSMODE" os)
)

hix hix!lần này là lần cuối cùng rồi!xin chân thành cảm ơn bạn rất nhiều!lần này là đúng với ý mình rồi!
  • 0

#2330 gia_bach

gia_bach

    biết lệnh adcenter

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

Đã gửi 09 July 2009 - 02:59 PM

.................
nếu như mình muốn chuyển các Text này thành lại các Attributes mà không phải dùng lệnh ATT thì liệu Lisp có thể thực hiện được yêu cầu này không vậy?
...........

Chào Phiphi
Bạn chạy thử Lisp chuyển Text sang Attributes
điểm hạn chế : các điểm căn lề của Text không giữ nguyên vị trí ban đầu.
(defun dxf (id data /)  (cdr (assoc id data)))

(defun c:T2A (/ *error* ActDoc TxtData);T2A -> Text to Att
(defun *error* (msg)
(princ msg)
(vla-EndUndoMark ActDoc)
)

;;;ham thay khoang trang bang _
(defun space2_ (str / pos l r str)
(setq pos (vl-string-position (ascii " ") str))
(while pos
(setq l (substr str 1 pos)
r (substr str (+ 2 pos) )
str (strcat l "_" r))
(setq pos (vl-string-position (ascii " ") str))
)
str
);defun space2_

(defun make-att (en / str )
(setq str (dxf 1 en))
(entmake
(list '(0 . "ATTDEF")
'(100 . "AcDbEntity")
'(67 . 0)
(cons 8 (dxf 8 en))
'(100 . "AcDbText")
(cons 10 (dxf 10 en))
(cons 40 (dxf 40 en))
(cons 41 (dxf 41 en))
(cons 50 (dxf 50 en))
(cons 1 str)
(cons 7 (dxf 7 en))
'(100 . "AcDbAttributeDefinition")
(cons 3 "Nhap gia tri")
(cons 2 (space2_ str))
'(70 . 0)
)
)
(princ (strcat "\n Da chuyen Text <" str "> sang Attribute."))
);defun make-att

(setq ActDoc (vla-get-ActiveDocument (vlax-get-Acad-Object)))
(vla-StartUndoMark ActDoc)
(if (and
(setq TxtData (car (entsel "\nChon Text de chuyen sang Attribute :")))
(= (cdr (assoc 0 (entget TxtData))) "TEXT")
)
(progn
(make-att (entget TxtData))
(entdel TxtData)
)
(princ (strcat "\n Doi tuong da chon khong phai Text."))
)
(vla-EndUndoMark ActDoc)
(princ)
)

  • 3

#2331 xuandao0708

xuandao0708

    biết lệnh scale

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

Đã gửi 09 July 2009 - 03:28 PM

Yêu cầu càng lúc càng nhiều hỉ :s_big: . Sửa thêm lần nữa.
Hix, phải chi em biết viết Lisp thì em đã phụ được các Bác rồi, em cũng đang nghiên cứu nhưng không biết chừng nào mới viết được 1 líp hoàn chỉnh. Hiện giờ em chỉ làm được 1 việc là nhân nút thank thôi. Mong các bác thông cảm cho. :blink:
  • 0

#2332 truongthanh

truongthanh

    biết lệnh text

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

Đã gửi 09 July 2009 - 04:08 PM

Chào Phiphi
Bạn chạy thử Lisp chuyển Text sang Attributes
điểm hạn chế : các điểm căn lề của Text không giữ nguyên vị trí ban đầu.

(defun dxf (id data /)  (cdr (assoc id data)))

(defun c:T2A (/ *error* ActDoc TxtData);T2A -> Text to Att
(defun *error* (msg)
(princ msg)
(vla-EndUndoMark ActDoc)
)

;;;ham thay khoang trang bang _
(defun space2_ (str / pos l r str)
(setq pos (vl-string-position (ascii " ") str))
(while pos
(setq l (substr str 1 pos)
r (substr str (+ 2 pos) )
str (strcat l "_" r))
(setq pos (vl-string-position (ascii " ") str))
)
str
);defun space2_

(defun make-att (en / str )
(setq str (dxf 1 en))
(entmake
(list '(0 . "ATTDEF")
'(100 . "AcDbEntity")
'(67 . 0)
(cons 8 (dxf 8 en))
'(100 . "AcDbText")
(cons 10 (dxf 10 en))
(cons 40 (dxf 40 en))
(cons 41 (dxf 41 en))
(cons 50 (dxf 50 en))
(cons 1 str)
(cons 7 (dxf 7 en))
'(100 . "AcDbAttributeDefinition")
(cons 3 "Nhap gia tri")
(cons 2 (space2_ str))
'(70 . 0)
)
)
(princ (strcat "\n Da chuyen Text <" str "> sang Attribute."))
);defun make-att

(setq ActDoc (vla-get-ActiveDocument (vlax-get-Acad-Object)))
(vla-StartUndoMark ActDoc)
(if (and
(setq TxtData (car (entsel "\nChon Text de chuyen sang Attribute :")))
(= (cdr (assoc 0 (entget TxtData))) "TEXT")
)
(progn
(make-att (entget TxtData))
(entdel TxtData)
)
(princ (strcat "\n Doi tuong da chon khong phai Text."))
)
(vla-EndUndoMark ActDoc)
(princ)
)

cái này mình nâng cấp thành block att luôn được ko vậy bạn?nếu cái text nằm trong vòng tròn,mình dùng lisp quét thì cái vòng tròn và text thành blok att dc ko bạn?
  • 0

#2333 lon ton

lon ton

    biết zoom

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

Đã gửi 09 July 2009 - 04:37 PM

cái này mình nâng cấp thành block att luôn được ko vậy bạn?nếu cái text nằm trong vòng tròn,mình dùng lisp quét thì cái vòng tròn và text thành blok att dc ko bạn?

hiện giờ em thấy nếu muốn chuyển thành att thì phải pick chuột từng phát 1
nhưng em nghĩ là nếu quét chuột để chọn 1 loạt đối tượng thì sẽ tiện lợi hơn
bác nâng cấp jup em được không
thanks
  • 0

#2334 Phiphi-

Phiphi-

    biết lệnh minsert

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

Đã gửi 09 July 2009 - 06:18 PM

Chào Phiphi
Bạn chạy thử Lisp chuyển Text sang Attributes
điểm hạn chế : các điểm căn lề của Text không giữ nguyên vị trí ban đầu.

(defun dxf (id data /)  (cdr (assoc id data)))

(defun c:T2A (/ *error* ActDoc TxtData);T2A -> Text to Att
(defun *error* (msg)
(princ msg)
(vla-EndUndoMark ActDoc)
)

;;;ham thay khoang trang bang _
(defun space2_ (str / pos l r str)
(setq pos (vl-string-position (ascii " ") str))
(while pos
(setq l (substr str 1 pos)
r (substr str (+ 2 pos) )
str (strcat l "_" r))
(setq pos (vl-string-position (ascii " ") str))
)
str
);defun space2_

(defun make-att (en / str )
(setq str (dxf 1 en))
(entmake
(list '(0 . "ATTDEF")
'(100 . "AcDbEntity")
'(67 . 0)
(cons 8 (dxf 8 en))
'(100 . "AcDbText")
(cons 10 (dxf 10 en))
(cons 40 (dxf 40 en))
(cons 41 (dxf 41 en))
(cons 50 (dxf 50 en))
(cons 1 str)
(cons 7 (dxf 7 en))
'(100 . "AcDbAttributeDefinition")
(cons 3 "Nhap gia tri")
(cons 2 (space2_ str))
'(70 . 0)
)
)
(princ (strcat "\n Da chuyen Text <" str "> sang Attribute."))
);defun make-att

(setq ActDoc (vla-get-ActiveDocument (vlax-get-Acad-Object)))
(vla-StartUndoMark ActDoc)
(if (and
(setq TxtData (car (entsel "\nChon Text de chuyen sang Attribute :")))
(= (cdr (assoc 0 (entget TxtData))) "TEXT")
)
(progn
(make-att (entget TxtData))
(entdel TxtData)
)
(princ (strcat "\n Doi tuong da chon khong phai Text."))
)
(vla-EndUndoMark ActDoc)
(princ)
)

Cám ơn bác Gia_bach, nhưng nếu xài như vậy thì không thể được. Nếu như lệnh BURST chuyển các Text trong các Attributes thành các text mà vẩn giử được các đặc tính của các Text đó thì LISP sẽ phải làm công việc ngược lại - vẩn giử được các đặc tính của các Text theo quy tắc WYSIWYG.
PP post bản vẽ của 1 khung bản tên A3 có sẳn trong AutoCAD để bác test.
http://www.cadviet.c...te___Block_.zip
*WYSIWYG: What You See Is What You Get
  • 0

#2335 q288

q288

    biết lệnh fillet

  • Members
  • PipPipPipPip
  • 209 Bài viết
Điểm đánh giá: 164 (tàm tạm)

Đã gửi 09 July 2009 - 07:00 PM

Yêu cầu càng lúc càng nhiều hỉ :s_big: . Sửa thêm lần nữa.
Hix, phải chi em biết viết Lisp thì em đã phụ được các Bác rồi, em cũng đang nghiên cứu nhưng không biết chừng nào mới viết được 1 líp hoàn chỉnh. Hiện giờ em chỉ làm được 1 việc là nhân nút thank thôi. Mong các bác thông cảm cho. :blink:


Nói đùa cho vui thôi, chứ chẳng qua ko hiểu ý nhau nên phải sửa đi sửa lại. Vả lại 1 cái lisp hoàn chỉnh thì phải test nhiều lần mới lòi ra cái khiếm khuyết để sửa tiếp, bạn cứ ráng nghiên cứu đi, chẳng ai mới học mà đã giỏi ngay đc.
  • 0

#2336 HoangSon614

HoangSon614

    biết lệnh properties

  • Members
  • PipPipPipPip
  • 254 Bài viết
Điểm đánh giá: 66 (tàm tạm)

Đã gửi 09 July 2009 - 08:25 PM

[quote name='Tue_NV' date='Jul 6 2009, 8:48' post='66418']
Chào bạn Tue_NV! Mình nhờ bạn viết giúp mình lisp với nội dung sau (mình không biết viết nên nhờ bạn hoài ngại quá). Cảm ơn bạn đã nhiệt tình giúp đỡ
Lisp vẽ mặt cắt dầm (MCD)
B1: Nhập tên mặt cắt "1 - 1":
Chọn tỷ lệ vẽ 1/x (10, 20, 25, 50, 100); x= :
Nhập bề rộng tiết diện: do use nhập
Nhập chiều cao tiết diện: do use nhập
Click vị trí bắt đầu (use tự pick điểm bất kỳ trên màn hình)
(HÌNH MINH HOẠ 1)
B2: Nhập chiều dày sàn (nhập 0 để kết thúc): do use nhập
a. Nếu nhập chiều dày sàn thì lisp hỏi tiếp:
Vị trí bắt đầu của sàn >> điểm xác định hướng pháp tuyến của sàn >> điểm xác định hướng của sàn (do use nhập)
dùng vòng lặp while cho trường hợp a để nhập tiếp chiều dày sàn
b. Nếu không nhập chiều dày sàn tiếp thì: Nhập 0 (số không) để kết thúc
(HÌNH MINH HOẠ 2)
B3: Số lớp cốt thép ở nhịp >> số cây thép trong 1 lớp: (do use nhập)
Số lớp cốt thép ở gối >> số cây thép trong 1 lớp: (do use nhập)
Pick điểm thứ 1 >> điểm xác định vị trí
Pick điểm thứ 2 >> điểm xác định vị trí
(HÌNH MINH HOẠ 3)
B4: Điểm tiếp theo (Click vào vị trí cũ để kết thúc)
(HÌNH MINH HOẠ 4)
B5: Nhập số hiệu thép >> Quy cách cốt thép (do use nhập VD: 2 fi 16 thì nhập: (2%%c16))
(HÌNH MINH HOẠ 5 & 6)
B6: Lisp hỏi
Có tiếp tục không? (Y/N): >> chọn N >> Chọn điểm ghi ký hiệu thép đai (use pick điểm bất kỳ vào thép đai dầm) >> Nhập số hiệu thép đai >> Quy cách thép (do use nhập: %%c) >> nhấn Enter -> OK
(HÌNH MINH HOẠ 7)
Luu ý: Toàn bộ các lênh là lisp phải xử lý, use chỉ nhập giá trị
(Dim: Romans: 2.5; text ghi mặt cắt: Vni-Helve 4.5; text ghi ký hiệu: Vni-Helve 2.5)
Mình gửi bạn file Mẫu cắt dầm.dwg bạn tham khảo trình tự các hình trùng với các bước mình thể hiện ở trên. Có gì mình giải thích chưa rõ, thì bạn có thể trao đổi với mình, mình sẽ giải thích thêm.
Cố gắng giúp mình nha. Cảm ơn bạn nhiều...
File đây bạn: http://www.cadviet.c...Mau_cat_dam.dwg
  • 0

#2337 quygtvt

quygtvt

    biết vẽ circle

  • Members
  • PipPip
  • 30 Bài viết
Điểm đánh giá: 27 (tàm tạm)

Đã gửi 09 July 2009 - 11:27 PM

ý của em là muốn có 1 cái LISP mà cách dùng như lệnh MA trong CAD!nhưng dùng cho PLINE và TEXT!ví dụ PLINE nằm ngiêng 45 độ, còn TEXT nằm 0 độ!em dùng LISP quét vào PLINE sau đó quét vào TEXT thì cái TEXT nó sẽ song song với PLINE và nằm giữa PLINE đó!còn chiều của TEXT sẽ phụ thuộc vào chiều vẽ của PLINE (nghĩa là PLINE vẽ từ trái qua phải thì TEXT cũng vậy)mong các anh giúp đỡ!

Bạn có thể sử dụng lệnh "Torient" để xoay text (nếu đã cài đủ Express). Nếu không, bạn thử LISP này xem.
(defun c:qq4( / pline text vertex1 vertex2 vertexpoint1 vertexpoint2 angl)
(setq oscu (getvar "osmode"))
(command ".ucs" "w")
(setq pline (entget(car(entsel "\nSelect pline:"))))
(setq text (entget(car(entsel "\nSelect text:"))))
(setq vertex1 (assoc 10 pline))
(setq vertexpoint1 (cdr(assoc 10 pline)))
(setq pline (subst (list 12345 1 1 1) vertex1 pline))
(setq vertexpoint2 (cdr(assoc 10 pline)))
(setq angl (angle vertexpoint1 vertexpoint2))
(setq text (subst (cons '50 angl) (assoc 50 text) text))
(entmod text)
(princ)
)
Nếu muốn đưa text về giữa đoạn thẳng thì mất công thêm một chút. Vì chưa biết text của bạn căn thế nào (Center/left/right/....)
  • 0
Không thể nói trời không xanh hơn,
và mắt em không xanh khác ngày thường

Hình đã gửi


#2338 xuantran15

xuantran15

    biết lệnh ddedit

  • Members
  • PipPipPipPip
  • 295 Bài viết
Điểm đánh giá: 112 (tàm tạm)

Đã gửi 10 July 2009 - 12:23 AM

Mình có một đề nghị mong các bác giúp đỡ. Mong các bác giúp dùm cho mình một cái lisp công text như sau:
Lisp có chức năng tính tổng của các text (Viết bằng DText) và gán kết quả vào một text có sẵn, cụ thể như sau:
1/ Gọi lệnh và enter.
2/ Chọn text thứ nhất, thứ hai,....(Đây là các text có giá trị cần tính tổng.)
3/ pick chọn vào 1 text có sẵn để gán giá trị vừa tính được vào text này.-> kết thúc lệnh.
4/ Yêu cầu: không làm thay đổi các giá trị, thuộc tính text trong biểu thức tính tổng, và khi gán kết quả vào text có sẵn thì không làm thay đổi thuộc tính của nó (VD như: Góc xoay, layer, kích thước, text style...)
5/ Số chử số thập phân sau giá trị kết quả do người dùng nhập vào và tự động ghi nhớ nếu người dùng không cấn nhập lại.
6/ Khi sử dụng lisp không bị mất cá chế độ truy bắt điểm.

Mong được sự giúp đõ của các bác. Thanks các bác nhiều. :s_big:
  • 0
Hình đã gửi
Thu đi cho lá vàng bay
Lá rơi cho đám cưới về......

#2339 Tue_NV

Tue_NV

    KS Võ Quang Tuệ

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

Đã gửi 10 July 2009 - 05:33 AM

Cám ơn bác Gia_bach, nhưng nếu xài như vậy thì không thể được. Nếu như lệnh BURST chuyển các Text trong các Attributes thành các text mà vẩn giử được các đặc tính của các Text đó thì LISP sẽ phải làm công việc ngược lại - vẩn giử được các đặc tính của các Text theo quy tắc WYSIWYG.
PP post bản vẽ của 1 khung bản tên A3 có sẳn trong AutoCAD để bác test.
http://www.cadviet.c...te___Block_.zip
*WYSIWYG: What You See Is What You Get

Lisp ttoa mà Tue_NV viết cho Phi phi dựa trên tiêu chí WYSIWYG
Các bạn chạy thử xem và cho mình biết ý kiến nhé :

;copyright by Tue_NV
(defun c:ttoa(/ dt n i ss1 ent tval L kytunoi kytu j tname cao po10 po11 styl LA
mau dxf71 dxf72 dxf73 ang wid)
(command "undo" "be")
(setq dt (ssget '((0 . "TEXT"))) n (sslength dt) i 0 ss1 (ssadd))
(while (< i n)
(if dt
(progn
(setq ent (ssname dt i))
(setq tval (cdr(assoc 1 (entget ent))))

(setq L (strlen tval) j 1)
(setq kytunoi "")
(Repeat L
(setq kytu (substr tval j 1))
(if (= kytu " ")
(setq kytu "_")
(setq kytu (substr tval j 1))
)
(setq kytunoi (strcat kytunoi kytu))

(setq j (1+ j))
)

(setq tname kytunoi)
(setq cao (cdr(assoc 40 (entget ent))))
(setq po10 (cdr(assoc 10 (entget ent))))
(setq po11 (cdr(assoc 11 (entget ent))))
(setq styl (cdr(assoc 7 (entget ent))))
(setq LA (cdr(assoc 8 (entget ent))))
(if (= (cdr(assoc 62 (entget ent))) nil)
(setq mau (cdr(assoc 62 (tblsearch "layer" LA))))
(setq mau (cdr(assoc 62 (entget ent))))
)
(setq ang (cdr(assoc 50 (entget ent))))
(setq wid (cdr(assoc 41 (entget ent))))
(setq dxf71 (cdr(assoc 71 (entget ent))))
(setq dxf72 (cdr(assoc 72 (entget ent))))
(setq dxf73 (cdr(assoc 73 (entget ent))))

(watt tname tval po10 po11 dxf71 dxf72 dxf73 cao styl mau ang wid)
(setq ss1 (ssadd (entlast) ss1))
(entdel ent)
)
)
(setq i (1+ i))
)
(sssetfirst ss1 ss1)
(command "copybase" po10 ss1 "")
(Command "pasteblock" po10)
(Command "erase" ss1 "")
(command "undo" "end")
(princ)
)
;
;
;
(defun watt (tagname tagval p1 p2 d71 d72 d73 h sty col goc rong / promp)
(setq promp tagname)
(entmake (list (cons 0 "ATTDEF") (cons 7 sty) (cons 62 col) (cons 2 Tagname) (cons 3 promp)
(cons 1 tagval) (cons 71 d71) (cons 72 d72) (cons 74 d73) (cons 10 p1) (cons 11 p2) (cons 40 h)
(cons 50 goc) (cons 41 rong)
'(70 . 8)
)
)
)


@conghoan :
Lisp Vét bùn theo ý của bạn đã thực hiện xong. Bạn test thử nhé :
Tên lệnh VBUN
Đây : http://www.cadviet.c...pfiles/VBUN.vlx

@Xuantran : Lisp này đã có. Bạn tìm kiếm thử nhé

Bài viết đã được chỉnh sửa nội dung bởi Tue_NV: 10 July 2009 - 07:59 AM

  • 4

#2340 xuantran15

xuantran15

    biết lệnh ddedit

  • Members
  • PipPipPipPip
  • 295 Bài viết
Điểm đánh giá: 112 (tàm tạm)

Đã gửi 10 July 2009 - 08:00 AM

@Xuantran : Lisp này đã có. Bạn tìm kiếm thử nhé

Mình đã tìm và đã thấy tai đây, không hiểu sao hồi tối tìm không thấy nên mới yêu cầu các bác thế. hj các bác bỏ quá nhá. :blink:

Lisp ttoa mà Tue_NV viết cho Phi phi dựa trên tiêu chí WYSIWYG
Các bạn chạy thử xem và cho mình biết ý kiến nhé :

Cái lisp này chạy rất tốt nhưng bác có thể nâng cấp nó lên thành lệnh tạo block thuộc tính bao gồm các đối tượng có săn như text, line, circle, pl.... khi mình quét chọn các đối tượng này được không. :s_big:
  • 0
Hình đã gửi
Thu đi cho lá vàng bay
Lá rơi cho đám cưới về......