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

#2401 TokyoNhat

TokyoNhat

    biết vẽ spline

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

Đã gửi 29 October 2010 - 10:39 PM

Các anh ơi , em muốn nhờ các anh viết hộ 1 lisp .Từ dữ liệu đầu vào là file xcel cad sẽ vẽ cho 1 hình theo thứ từ các toạ độ (x,y) trong excel , giống như trong trắc địa để triền các điểm khống chế ta đo được vào bản vẽ với 1 khung bản vẽ cho sẵn giấy A0 hoặc A1 , A2 .Em đã tìm nhưng trên diễn đàn hình như là không có lisp phù hợp .Cám ơn các anh nhiều .
  • 0
  • Quá khứ là lịch sử, tương lai là màu nhiệm, còn hiện tại là món quà của cuộc sống...
  • Cuộc sống vốn không công bằng - Hãy tập quen dần với điều đó

#2402 phamngoctukts

phamngoctukts

    biết lệnh adcenter

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

Đã gửi 29 October 2010 - 11:40 PM

Chào bác Phamngoctukts,
Lisp của bác chưa giải quyêt vấn đề tạo boundary cho vùng hatch. Bản vẽ bạn Bachngoctung post lên hoàn toàn không có boundary của vùng hatch. Do vậy xài lisp của bác chưa được bác ạ.
Mặt khác như bạn ấy nói cái block của bạn ây đã được xác định, có tên hẳn hoi nên bác có thể xài luôn cái tên đó mà không cần kiểm tra mã DXF 66. Theo mình hiểu thì bạn ấy sẽ nhập vào block mới chứ không phải chỉnh sửa lại các block cũ bác ạ. Vậy nên bác có thể thay việc chọn block bằng việc insert block có tên do bạn ấy tự nhập thì hợp lý hơn.

Chào bác Bình! em làm đúng theo đầu bài của bạn đó cho mà Bác.
Đầu tiên là pick chọn hatch hoặc polyline kín
tiếp theo là chon pline để lấy chiều dài
cuối cùng là chọn vào block để ghi dữ liệu vào.
  • 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!

#2403 TokyoNhat

TokyoNhat

    biết vẽ spline

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

Đã gửi 30 October 2010 - 12:22 AM

Các anh viết hộ em với , e đang cần lisp gấp .
  • 0
  • Quá khứ là lịch sử, tương lai là màu nhiệm, còn hiện tại là món quà của cuộc sống...
  • Cuộc sống vốn không công bằng - Hãy tập quen dần với điều đó

#2404 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 30 October 2010 - 06:02 AM

Em đang ở quê và mới lên quán NET, không có CAD ở đây nên chưa upload hình vẽ cụ thể cho bác được
Bác xem ở trong hàm WCMATCH nhé. Nó có đầy đủ cả đấy
Em có đọc sơ qua Lisp của bác bổ sung thêm vào trong Lisp của Tue_NV.
Tue_NV nghĩ rằng bác cứ Copy Text gốc ra làm 3 cái tại đúng vị trí của nó
- Cái đầu thay nội dung của chuỗi C1
- Cái thứ 2 thay nội dung của chuỗi C2. Move cái thứ 2 : 1 đoạn = "chiều dài chuỗi C1"
- Cái thứ 3 thay nội dung của chuỗi C3. Move cái thứ 3 : 1 đoạn = "chiều dài chuỗi C1+C2"
- Xoá cái text gốc đi
=> Thế là được
(Hy vọng bác Bình hiểu cái ý của Tue_NV trong ý "chiều dài chuỗi C1"

@khaosat : Lisp trên là của Tue_NV viết. Nếu bạn chịu khó chờ, mình sẽ giúp cho bạn

Cám ơn bạn Tue_NV đã quan tâm, Mình sẻ chờ bạn giúp.
  • 0

#2405 duy782006

duy782006

    PHẠM QUỐC DUY

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

Đã gửi 30 October 2010 - 07:49 AM

- Cái thứ 2 thay nội dung của chuỗi C2. Move cái thứ 2 : 1 đoạn = "chiều dài chuỗi C1"
- Cái thứ 3 thay nội dung của chuỗi C3. Move cái thứ 3 : 1 đoạn = "chiều dài chuỗi C1+C2"

Chiều dài chuỗi này mình cũng đã từng thử (lúc viết cái lisp biến 1 đoạn text thành 1 đám bock). Gá trị này chỉ mang tính tương đối cho từng loại font mà trong một loại font bước nhảy của từng ký tự cũng khác nhau. Đó là trường hợp đơn giản bảng mã VNI.*** chứ gặp bảng mã .VN*** thì các dấu hắn cũng tính là 1 ký tự. Nên cái quả này chua chủ yếu tách ra rồi người dùng tự move vậy hé hé.
  • 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


#2406 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 30 October 2010 - 02:00 PM

Em đang ở quê và mới lên quán NET, không có CAD ở đây nên chưa upload hình vẽ cụ thể cho bác được
Bác xem ở trong hàm WCMATCH nhé. Nó có đầy đủ cả đấy
Em có đọc sơ qua Lisp của bác bổ sung thêm vào trong Lisp của Tue_NV.
Tue_NV nghĩ rằng bác cứ Copy Text gốc ra làm 3 cái tại đúng vị trí của nó
- Cái đầu thay nội dung của chuỗi C1
- Cái thứ 2 thay nội dung của chuỗi C2. Move cái thứ 2 : 1 đoạn = "chiều dài chuỗi C1"
- Cái thứ 3 thay nội dung của chuỗi C3. Move cái thứ 3 : 1 đoạn = "chiều dài chuỗi C1+C2"
- Xoá cái text gốc đi
=> Thế là được
(Hy vọng bác Bình hiểu cái ý của Tue_NV trong ý "chiều dài chuỗi C1"

@khaosat : Lisp trên là của Tue_NV viết. Nếu bạn chịu khó chờ, mình sẽ giúp cho bạn

Hề hề hề,
Nhờ sự chỉ bảo của bác Tue_NV, mình sửa lại cái lisp viết cho bạn ceddtu như sau, xem ra nó ngon hơn cái cũ nhiều. Hẳn là bác Tue_NV sẽ hài lòng với kết quả này

(defun c:tchu(/ L pat ents i2 i3 i str str2 C1 C2 C3)
(setq pat '("0" "1" "2" "3" "4" "5" "6" "7" "8" "9" "." ","))
(setq ents (acet-ss-to-list (ssget '((0 . "TEXT") (1 . "* = #*"))))
L '() i2 nil)

(foreach y ents
(setq x (cdr (assoc 1 (entget y))))
(setq i 1 L1 "" L2 "")
(while (< i (strlen x))
(setq str (substr x (setq i (1+ i)) 3))
(if (= str " = ") (progn
(setq i2 (+ i 2))
(while (< i2 (strlen x))
(if (vl-position (setq str2 (substr x (setq i2 (1+ i2)) 1)) pat)
(setq L1 (strcat L1 str2) i3 i2)
(setq i2 (strlen x))
)
)
) )
)
(setq C1 (substr x 1 (- i3 (strlen L1)))
C2 (substr x (1+ (strlen C1)) (strlen L1))
C3 (substr x (1+ i3) (- i2 i3))
)
;;;;;(alert (strcat C1 "\n" C2 "\n" C3))

(setq els (entget y)
b (cdr (assoc 41 els))
p1 (cdr (assoc 10 els))
h (cdr (assoc 40 els))
;;;;p2 (list (+ (car p1) (* b h 0.85 (1+ (strlen C1)))) (cadr p1))
;;;;p3 (list (+ (car p2) (* b h 0.85 (1+ (strlen L1)))) (cadr p2))
st (cdr (assoc 7 els))
els (subst (cons 1 C1) (assoc 1 els) els)
;;;ent (cdr (assoc 0 els))
)
(entmod els)
(setq pls (textbox els)
dis1 (- (caadr pls) (caar pls))
p2 (list (+ (car p1) dis1 (* b h )) (cadr p1))
)
(entmake
(list (cons 0 "text") (cons 10 p2) (cons 1 C2) (cons 62 3) (cons 7 st) (cons 40 h) (cons 41 b ))
)
(setq ent (entlast)
pls1 (acet-ent-geomextents ent)
dis2 (- (caadr pls1) (caar pls1))
p3 (list (+ (car p2) dis2 (* b h )) (cadr p2))
)
(entmake
(list (cons 0 "text") (cons 10 p3) (cons 1 C3) (cons 62 2) (cons 7 st) (cons 40 h) (cons 41 b ))
)
)

)



Bạn ceddtu đâu rồi, cho ý kiến đi chứ nhể...
  • 1
Chúc các quý Anh trên diễn đàn luôn khỏe, đẻ thêm được nhiều thứ để mót.

#2407 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 30 October 2010 - 02:15 PM

Chào bác Bình! em làm đúng theo đầu bài của bạn đó cho mà Bác.
Đầu tiên là pick chọn hatch hoặc polyline kín
tiếp theo là chon pline để lấy chiều dài
cuối cùng là chọn vào block để ghi dữ liệu vào.

Hề hề hề,
Tại mình xem trên bản vẽ bạn ấy post thì mình hiểu như vậy. Có thể hiểu trật mà. Nhưng cái bản vẽ bạn ấy post thì chả có polyline kín nào cả bác Phamngoctukts ạ. Còn cái hatch thì lại bị xóa biên rồi. Mình xài CAD2004 nên chả thể nào làm lại cái biên ấy cả nên đành bó chiếu vậy.
Nếu chọn block rồi thay thuộc tính thì là công việc sửa chữa lại bản vẽ cũ, cái này cũng hay gặp nhưng việc sửa số liệu trên bản vẽ cũ thì mình thấy khá mạo hiểm. Bởi vì các số liệu cũ không còn nữa, mà người làm lúc trước có thể có lý do nào đó khi nhập số liệu ấy.
Còn insert block với thuộc tính mới vẫn có thể dùng để sửa chữa bản vẽ cũ vì lúc này mình sẽ có cả hai số liệu cũ và mới để đối chiếu, kiểm tra và hiệu chỉnh bác ạ. Theo mình thì có nhẽ phương án này hay hơn. 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.

#2408 ceddtu

ceddtu

    biết vẽ spline

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

Đã gửi 30 October 2010 - 04:21 PM

Hề hề hề,
Nhờ sự chỉ bảo của bác Tue_NV, mình sửa lại cái lisp viết cho bạn ceddtu như sau, xem ra nó ngon hơn cái cũ nhiều. Hẳn là bác Tue_NV sẽ hài lòng với kết quả này


(defun c:tchu(/ L pat ents i2 i3 i str str2 C1 C2 C3)
(setq pat '("0" "1" "2" "3" "4" "5" "6" "7" "8" "9" "." ","))
(setq ents (acet-ss-to-list (ssget '((0 . "TEXT") (1 . "* = #*"))))
L '() i2 nil)

(foreach y ents
(setq x (cdr (assoc 1 (entget y))))
(setq i 1 L1 "" L2 "")
(while (< i (strlen x))
(setq str (substr x (setq i (1+ i)) 3))
(if (= str " = ") (progn
(setq i2 (+ i 2))
(while (< i2 (strlen x))
(if (vl-position (setq str2 (substr x (setq i2 (1+ i2)) 1)) pat)
(setq L1 (strcat L1 str2) i3 i2)
(setq i2 (strlen x))
)
)
) )
)
(setq C1 (substr x 1 (- i3 (strlen L1)))
C2 (substr x (1+ (strlen C1)) (strlen L1))
C3 (substr x (1+ i3) (- i2 i3))
)
;;;;;(alert (strcat C1 "\n" C2 "\n" C3))

(setq els (entget y)
b (cdr (assoc 41 els))
p1 (cdr (assoc 10 els))
h (cdr (assoc 40 els))
;;;;p2 (list (+ (car p1) (* b h 0.85 (1+ (strlen C1)))) (cadr p1))
;;;;p3 (list (+ (car p2) (* b h 0.85 (1+ (strlen L1)))) (cadr p2))
st (cdr (assoc 7 els))
els (subst (cons 1 C1) (assoc 1 els) els)
;;;ent (cdr (assoc 0 els))
)
(entmod els)
(setq pls (textbox els)
dis1 (- (caadr pls) (caar pls))
p2 (list (+ (car p1) dis1 (* b h )) (cadr p1))
)
(entmake
(list (cons 0 "text") (cons 10 p2) (cons 1 C2) (cons 62 3) (cons 7 st) (cons 40 h) (cons 41 b ))
)
(setq ent (entlast)
pls1 (acet-ent-geomextents ent)
dis2 (- (caadr pls1) (caar pls1))
p3 (list (+ (car p2) dis2 (* b h )) (cadr p2))
)
(entmake
(list (cons 0 "text") (cons 10 p3) (cons 1 C3) (cons 62 2) (cons 7 st) (cons 40 h) (cons 41 b ))
)
)

)



Bạn ceddtu đâu rồi, cho ý kiến đi chứ nhể...

Trước hết mình xin chân thành cám ơn bạn tue_nv, phamthanhbinh đã tận tình giúp đỡ mình, lisp cuối cùng mình down về sử dụng rất đúng ý mình, và tất nhiên kết quả thật mỹ mãn, ko có gì phải phàn nàn nữa cả, hy vọng sẽ gặp đc các bạn để tks 1 lần nữa
  • 0
Đời vắng mẹ hiền không phụ nữ.
Anh hùng thi sĩ hỏi còn đâu !

#2409 tamkt

tamkt

    biết vẽ ellipse

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

Đã gửi 30 October 2010 - 04:22 PM

Mong mọi người giúp em:
File cad đây ạ : http://www.mediafire...77zyr67zh7jfh62
Em cám ơn mấy anh trước.
  • 0

#2410 phamngoctukts

phamngoctukts

    biết lệnh adcenter

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

Đã gửi 30 October 2010 - 04:40 PM

Hề hề hề,
Tại mình xem trên bản vẽ bạn ấy post thì mình hiểu như vậy. Có thể hiểu trật mà. Nhưng cái bản vẽ bạn ấy post thì chả có polyline kín nào cả bác Phamngoctukts ạ. Còn cái hatch thì lại bị xóa biên rồi. Mình xài CAD2004 nên chả thể nào làm lại cái biên ấy cả nên đành bó chiếu vậy.
Nếu chọn block rồi thay thuộc tính thì là công việc sửa chữa lại bản vẽ cũ, cái này cũng hay gặp nhưng việc sửa số liệu trên bản vẽ cũ thì mình thấy khá mạo hiểm. Bởi vì các số liệu cũ không còn nữa, mà người làm lúc trước có thể có lý do nào đó khi nhập số liệu ấy.
Còn insert block với thuộc tính mới vẫn có thể dùng để sửa chữa bản vẽ cũ vì lúc này mình sẽ có cả hai số liệu cũ và mới để đối chiếu, kiểm tra và hiệu chỉnh bác ạ. Theo mình thì có nhẽ phương án này hay hơn. Hề hề hề....

Bác dùng (Vla-get-area obj) thì chẳng cần quan tâm cái hatch đó có đường biên hay không bác ạ. Cái obj có thể là hatch hoặc polyline kín đều được Bác ạ.
  • 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!

#2411 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 30 October 2010 - 05:02 PM

Trước hết mình xin chân thành cám ơn bạn tue_nv, phamthanhbinh đã tận tình giúp đỡ mình, lisp cuối cùng mình down về sử dụng rất đúng ý mình, và tất nhiên kết quả thật mỹ mãn, ko có gì phải phàn nàn nữa cả, hy vọng sẽ gặp đc các bạn để tks 1 lần nữa

Sao ceddtu không yêu cầu các Bác ấy viết thêm đoạn code xuất các data vừa chọn/tách thành các Excel sheets dùng cho việc cộng trừ nhân chia sau này luôn...
  • 0

#2412 ceddtu

ceddtu

    biết vẽ spline

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

Đã gửi 30 October 2010 - 06:29 PM

Sao ceddtu không yêu cầu các Bác ấy viết thêm đoạn code xuất các data vừa chọn/tách thành các Excel sheets dùng cho việc cộng trừ nhân chia sau này luôn...

dạ cái đó em đang tìm bác ạ, nếu tìm ko đc thì có lẽ lại phải nhờ các bác ấy thôi, hình như trong diễn đàn mình cũng có thì phải.tại lúc này mình đang làm bản vẽ thi công kl nhiều quá ko co thoi gian tìm, với lại phần xuất khối lượng sau khi tình tính xong diện tích.
  • 0
Đời vắng mẹ hiền không phụ nữ.
Anh hùng thi sĩ hỏi còn đâu !

#2413 thangbkpro

thangbkpro

    biết zoom

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

Đã gửi 30 October 2010 - 07:31 PM

Các bạn giúp mình một lisp tự động nối những text có vị trí gần nhau hơn một khoảng định sẵn thành 1 text không bạn ? những text gần nhau tự nối với nhau và không nối với text khác!
Đại ý là:
Mình nhập lệnh gọi lip
Quét chuột toàn bộ bản vẽ
nhập khoảng cách text gần nhau dưới khoảng đó thì tự nối
enter
Vậy là text tự động được nối lại.
Ví dụ : bản vẽ của mình có rất nhiều 4 text gần nhau có dạng như: "MCB" "3P" "32A" "10kA" cùng mô tả về một thiết bị sẽ được nối thành các text "MCB 3P 32A 10kA". Sau đó mình thực hiện lisp đếm text của bạn gia_bach trên diễn đàn sẽ thống kê được số lượng và chủng loại thiết bị trong bản vẽ.
http://www.cadviet.c...files/3/mcb.dwg
Thanks!:)
  • 0

#2414 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 30 October 2010 - 08:30 PM

Mong mọi người giúp em:
File cad đây ạ : http://www.mediafire...77zyr67zh7jfh62
Em cám ơn mấy anh trước.


Líp 1:

(defun c:ss (/ dt1 dt2 p1 p2 p3 p4 p31 p32)
(command "undo" "be")
(setq dt1 (car (entsel "\n Chon doan thang dau tien: "))
p1 (cdr (assoc 10 (entget dt1)))
p2 (cdr (assoc 11 (entget dt1)))
)
(setq dt2 (car (entsel "\n Chon doan thang thu 2: "))
p3 (cdr (assoc 10 (entget dt2)))
p4 (cdr (assoc 11 (entget dt2)))
)
(BatDau)
(command "move" dt2 "" p3 p1)
(setq p31 (cdr (assoc 10 (entget dt2)))
p41 (cdr (assoc 11 (entget dt2)))
)
(command "rotate" dt2 "" p31 "R" p31 p41 p2)
(command "move" dt2 "" p1 p3)
(KetThuc)
(command "undo" "e")
)
(defun BatDau() (setq OldOs (getvar "osmode")) (setvar "osmode" 0))
(defun KetThuc() (setvar "osmode" OldOs))


Líp 2 : mình thấy bạn dùng lệnh copy có khi còn nhanh hơn là du`ng lisp.
  • 0

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


#2415 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 30 October 2010 - 09:15 PM

Bác dùng (Vla-get-area obj) thì chẳng cần quan tâm cái hatch đó có đường biên hay không bác ạ. Cái obj có thể là hatch hoặc polyline kín đều được Bác ạ.

Chào bác Phamngoctukts,
Khi mình dùng với bản vẽ của bạn ...... gì đó thì nó cho ra kết quả thế này bác ạ:
Command: (vl-load-com)

Command: (setq obj (vlax-ename->vla-object (car(entsel))))

Select object: # VLA-OBJECT IAcadHatch 06c011c4>

Command: (vla-get-area obj)
; error: ActiveX Server returned the error: unknown name: Area

Có nhẽ tại cái CAD2004 của mình chăng?????
  • 0
Chúc các quý Anh trên diễn đàn luôn khỏe, đẻ thêm được nhiều thứ để mót.

#2416 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 30 October 2010 - 10:14 PM

Các bạn giúp mình một lisp tự động nối những text có vị trí gần nhau hơn một khoảng định sẵn thành 1 text không bạn ? những text gần nhau tự nối với nhau và không nối với text khác!
Đại ý là:
Mình nhập lệnh gọi lip
Quét chuột toàn bộ bản vẽ
nhập khoảng cách text gần nhau dưới khoảng đó thì tự nối
enter
Vậy là text tự động được nối lại.
Ví dụ : bản vẽ của mình có rất nhiều 4 text gần nhau có dạng như: "MCB" "3P" "32A" "10kA" cùng mô tả về một thiết bị sẽ được nối thành các text "MCB 3P 32A 10kA". Sau đó mình thực hiện lisp đếm text của bạn gia_bach trên diễn đàn sẽ thống kê được số lượng và chủng loại thiết bị trong bản vẽ.
http://www.cadviet.c...files/3/mcb.dwg
Thanks!:)

Chào bạn thangbkpro,
Sao bạn không block các nhóm đó lại thành các block với tên riêng, như vậy sẽ đơn giản hơn nhiều bạn ạ.
Yêu cầu của bạn cần phải thêm một vài yếu tố nữa do trên bản vẽ của bạn có khá nhiều loại text mà chùng lại cũng rất gần nhau, tương tự như các text bạn cần nối bạn ạ.
  • 0
Chúc các quý Anh trên diễn đàn luôn khỏe, đẻ thêm được nhiều thứ để mót.

#2417 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 30 October 2010 - 10:37 PM

Các bạn giúp mình một lisp tự động nối những text có vị trí gần nhau hơn một khoảng định sẵn thành 1 text không bạn ? những text gần nhau tự nối với nhau và không nối với text khác!
Đại ý là:
Mình nhập lệnh gọi lip
Quét chuột toàn bộ bản vẽ
nhập khoảng cách text gần nhau dưới khoảng đó thì tự nối
enter
Vậy là text tự động được nối lại.
Ví dụ : bản vẽ của mình có rất nhiều 4 text gần nhau có dạng như: "MCB" "3P" "32A" "10kA" cùng mô tả về một thiết bị sẽ được nối thành các text "MCB 3P 32A 10kA". Sau đó mình thực hiện lisp đếm text của bạn gia_bach trên diễn đàn sẽ thống kê được số lượng và chủng loại thiết bị trong bản vẽ.
http://www.cadviet.c...files/3/mcb.dwg
Thanks!:)


Mình thấy cái này nhiều text làm được chắc cũng vất vả lắm. Nó phải xét k/c từ nó đến các text còn lại. nếu có n text thì phải xét n! trường hợp,. ặc ặc
  • 0

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


#2418 thangbkpro

thangbkpro

    biết zoom

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

Đã gửi 30 October 2010 - 11:16 PM

Mình thấy cái này nhiều text làm được chắc cũng vất vả lắm. Nó phải xét k/c từ nó đến các text còn lại. nếu có n text thì phải xét n! trường hợp,. ặc ặc

Mình nghĩ là được bởi đã có lip viết để xóa các text gần nhau hơn một khoảng cho trước ở đây mà. Mình nghĩ là nối thì cũng sẽ làm được chứ ?
http://www.cadviet.c...o...=23110&st=0
@binh: Nếu mình thiết kế từ đầu thì mình sẽ dùng block. Mình chỉ làm dự toán thôi. Bên mình nhận bản vẽ từ đủ các phong cách vẽ của các bạn tư vấn thiết kế. Mỗi người một kiểu nên trộm nghĩ thống kê theo text là ổn nhất?
Các text khác nối lại với nhau cũng không sao. Mình chỉ cốt sao nối được các text tương tự như MCB 3P 100A 15kA lại thành 1 text và text này không bị nối với text ở ngoài thôi.
Giúp mình nhé mọi người.
  • 0

#2419 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 30 October 2010 - 11:23 PM

dạ cái đó em đang tìm bác ạ, nếu tìm ko đc thì có lẽ lại phải nhờ các bác ấy thôi, hình như trong diễn đàn mình cũng có thì phải.tại lúc này mình đang làm bản vẽ thi công kl nhiều quá ko co thoi gian tìm, với lại phần xuất khối lượng sau khi tình tính xong diện tích.


Hề hề hề,
Khỏi nhờ, nó đây, bạn dùng thử coi sao

(defun c:tchu(/ L pat ents i2 i3 i str str2 C1 C2 C3)
(setq pat '("0" "1" "2" "3" "4" "5" "6" "7" "8" "9" "." ","))
(setq ents (acet-ss-to-list (ssget '((0 . "TEXT") (1 . "* = #*"))))
L '() i2 nil)

(foreach y ents
(setq x (cdr (assoc 1 (entget y))))
(setq i 1 L1 "" L2 "")
(while (< i (strlen x))
(setq str (substr x (setq i (1+ i)) 3))
(if (= str " = ") (progn
(setq i2 (+ i 2))
(while (< i2 (strlen x))
(if (vl-position (setq str2 (substr x (setq i2 (1+ i2)) 1)) pat)
(setq L1 (strcat L1 str2) i3 i2)
(setq i2 (strlen x))
)
)
) )
)
(setq C1 (substr x 1 (- i3 (strlen L1)))
C2 (substr x (1+ (strlen C1)) (strlen L1))
C3 (substr x (1+ i3) (- i2 i3))
)
;;;;;(alert (strcat C1 "\n" C2 "\n" C3))
(setq ltxt (list (substr C1 1 (- (strlen C1) 3 )) C2 C3))
(setq els (entget y)
b (cdr (assoc 41 els))
p1 (cdr (assoc 10 els))
h (cdr (assoc 40 els))
;;;;p2 (list (+ (car p1) (* b h 0.85 (1+ (strlen C1)))) (cadr p1))
;;;;p3 (list (+ (car p2) (* b h 0.85 (1+ (strlen L1)))) (cadr p2))
st (cdr (assoc 7 els))
els (subst (cons 1 C1) (assoc 1 els) els)
;;;ent (cdr (assoc 0 els))
)
(entmod els)
(setq pls (textbox els)
dis1 (- (caadr pls) (caar pls))
p2 (list (+ (car p1) dis1 (* b h )) (cadr p1))
)
(entmake
(list (cons 0 "text") (cons 10 p2) (cons 1 C2) (cons 62 3) (cons 7 st) (cons 40 h) (cons 41 b ))
)
(setq ent (entlast)
pls1 (acet-ent-geomextents ent)
dis2 (- (caadr pls1) (caar pls1))
p3 (list (+ (car p2) dis2 (* b h )) (cadr p2))
)
(entmake
(list (cons 0 "text") (cons 10 p3) (cons 1 C3) (cons 62 2) (cons 7 st) (cons 40 h) (cons 41 b ))
)
(setq L (append L (list ltxt)))

)
(writetoExcel L)
)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;
(defun WriteToExcel (lst_data / 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 3)
(foreach pt lst_data
(setq col 2)
(foreach coor pt
(vlax-put-property xlCells 'Item row col coor)
(setq col (1+ col)))
(setq row (1+ row)) )
(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) )


Cái ni là mình mót của bác SSG đó, hãy cảm ơn bác ấy nha

Sao ceddtu không yêu cầu các Bác ấy viết thêm đoạn code xuất các data vừa chọn/tách thành các Excel sheets dùng cho việc cộng trừ nhân chia sau này luôn...


Hề hề hề,
Cái nhà bác này chơi cái mửng muốn ăn gắp bỏ cho người hử????
Bác biết vậy sao hổng giúp luôn còn bày cái vụ hỏi khéo ấy hử????
Bác xài thử xem có vừa miệng không nhé. Tuy là của đi mót nhưng ngon đáo để bác ạ......
  • 3
Chúc các quý Anh trên diễn đàn luôn khỏe, đẻ thêm được nhiều thứ để mót.

#2420 tamkt

tamkt

    biết vẽ ellipse

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

Đã gửi 30 October 2010 - 11:44 PM

Líp 1:

(defun c:ss (/ dt1 dt2 p1 p2 p3 p4 p31 p32)
(command "undo" "be")
(setq dt1 (car (entsel "\n Chon doan thang dau tien: "))
p1 (cdr (assoc 10 (entget dt1)))
p2 (cdr (assoc 11 (entget dt1)))
)
(setq dt2 (car (entsel "\n Chon doan thang thu 2: "))
p3 (cdr (assoc 10 (entget dt2)))
p4 (cdr (assoc 11 (entget dt2)))
)
(BatDau)
(command "move" dt2 "" p3 p1)
(setq p31 (cdr (assoc 10 (entget dt2)))
p41 (cdr (assoc 11 (entget dt2)))
)
(command "rotate" dt2 "" p31 "R" p31 p41 p2)
(command "move" dt2 "" p1 p3)
(KetThuc)
(command "undo" "e")
)
(defun BatDau() (setq OldOs (getvar "osmode")) (setvar "osmode" 0))
(defun KetThuc() (setvar "osmode" OldOs))


Líp 2 : mình thấy bạn dùng lệnh copy có khi còn nhanh hơn là du`ng lisp.


lisp 1 thì không áp dụng được với pline và leader, anh chỉnh lại giúp e nha.
lisp 2 thì e vẫn cần, vì 2 chiều cao chữ khác nhau, nhưng cùng layer và Block.
E cám ơn anh.
  • 0