Đến nội dung


Hình ảnh

Làm sao dể tự động kết nối 1 bản vẽ text sang 2(nhiều) bản vẽ khác


  • Please log in to reply
58 replies to this topic

#1 NDBNGO

NDBNGO

    biết lệnh rotate

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

Đã gửi 25 August 2010 - 09:05 AM

Trong quá trình vẽ Autocad tôi thường phải vẽ 1 file bản vẽ có các dòng text (rất nhiều) sau đó copy sang nhiều bản vẽ khác .Như vậy rất bất tiện vì phải chuyển nhiều lần và nếu file gốc cần thay đổi thì phải chỉnh lại rất nhiều (hoặc copy ) lai.Như thế bài toán đặt ra là khi có bản vẽ 1 (chứa các dòng text) thì từ dòng 1 sẽ tự dộng vào được 2 bản vẽ theo bảng tọa độ: đọc bằng file như sau(Tương tụ cho các dòng tiếp theo)
dòng tọa dộ bản vẽ 1 tọa dộ bản vẽ 2
1 123.236 136.456 345.128 475.326
2 .... ......
3 .... ......
n ..... .....
khi file gốc đổi thì các file bản vẽ liên quan cũng đổi theo.
Để vẽ như thế ,cần thủ thuật gì ,hay cần 1 chương trình Lisp như thế nào để làm được điều đó.
Cảm ơn các bạn.
bản vẽ kèm theo:

http://www.4shared.c...sm/ghi1ra2.html
  • 0

#2 Tue_NV

Tue_NV

    KS Võ Quang Tuệ

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

Đã gửi 25 August 2010 - 09:38 AM

Trong quá trình vẽ Autocad tôi thường phải vẽ 1 file bản vẽ có các dòng text (rất nhiều) sau đó copy sang nhiều bản vẽ khác .Như vậy rất bất tiện vì phải chuyển nhiều lần và nếu file gốc cần thay đổi thì phải chỉnh lại rất nhiều (hoặc copy ) lai.Như thế bài toán đặt ra là khi có bản vẽ 1 (chứa các dòng text) thì từ dòng 1 sẽ tự dộng vào được 2 bản vẽ theo bảng tọa độ: đọc bằng file như sau(Tương tụ cho các dòng tiếp theo)
dòng tọa dộ bản vẽ 1 tọa dộ bản vẽ 2
1 123.236 136.456 345.128 475.326
2 .... ......
3 .... ......
n ..... .....
khi file gốc đổi thì các file bản vẽ liên quan cũng đổi theo.
Để vẽ như thế ,cần thủ thuật gì ,hay cần 1 chương trình Lisp như thế nào để làm được điều đó.
Cảm ơn các bạn.
bản vẽ kèm theo:

http://www.4shared.c...sm/ghi1ra2.html

Sao bác không sử dụng lệnh Xref
  • 1

#3 NDBNGO

NDBNGO

    biết lệnh rotate

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

Đã gửi 25 August 2010 - 09:51 AM

Nếu chỉ là 1 dòng thì ta xref file vào được như đây là cả vài chục ,thậm chí vài trăm dòng.
Lệnh xref thì 1 dòng phải là 1 file cad riêng mới làm được(Vậy hàng trăm bản vẽ),mà thủ tục để xref nhiều và lâu
Vậy bạn có thể viết ra dang sau được không:
Với bản vẽ 1:
Nhập tên file bản vẽ có dữ liêu text
Nhập bảng tọa dộ chèn bản vẽ 1
Với bản vẽ 2:
nhập tên file bản vẽ có Text
Nhập bảng tọa dộ bản vẽ 2.
Với bản vẽ n
.....
.....
Như vây khi ta để 1 layer riêng thì các tài liệu cũ xóa đi toàn bộ bản cũ ,chạy lại ghi chú mới.
Và như thế thì không cần link nữa
Cảm ơn bạn Tue_NV đã đọc và cho ý kiến.
  • 0

#4 Tue_NV

Tue_NV

    KS Võ Quang Tuệ

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

Đã gửi 25 August 2010 - 10:02 AM

Nếu chỉ là 1 dòng thì ta xref file vào được như đây là cả vài chục ,thậm chí vài trăm dòng.
Lệnh xref thì 1 dòng phải là 1 file cad riêng mới làm được(Vậy hàng trăm bản vẽ),mà thủ tục để xref nhiều và lâu
Vậy bạn có thể viết ra dang sau được không:
Với bản vẽ 1:
Nhập tên file bản vẽ có dữ liêu text
Nhập bảng tọa dộ chèn bản vẽ 1
Với bản vẽ 2:
nhập tên file bản vẽ có Text
Nhập bảng tọa dộ bản vẽ 2.
Với bản vẽ n
.....
.....
Như vây khi ta để 1 layer riêng thì các tài liệu cũ xóa đi toàn bộ bản cũ ,chạy lại ghi chú mới.
Và như thế thì không cần link nữa
Cảm ơn bạn Tue_NV đã đọc và cho ý kiến.

Vài chục ,thậm chí vài trăm dòng cung không thành vấn đề bac a
Bác có thể sử dụng lệnh Xclip để lấy 1 dòng hoặc là khôi phục lại trạng thái "ban đầu" của nó
Với 1 dòng này của bác thì bác tùy nghi mà xử lý nó (

Cái nữa là Xref không có lâu như bác đã nghĩ ạ. Bác có thể copy cái mà bác đã Xrèf ra làm nhiều cái mà xử
Em có mấy ý như vậy ạ
Chúc bác thành công
  • 0

#5 NDBNGO

NDBNGO

    biết lệnh rotate

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

Đã gửi 25 August 2010 - 10:11 AM

Bạn có thể viết lisp theo đề xuât của mình được không .Các cách ban vừa gợi ý mình làm cả rồi, phức tạp lắm.Khi dùng lệnh xclip bản vẽ xong chèn vào ,xp ra thì nó lại có đầy đủ các dòng mình loai.
Nếu như làm theo cách mình nghĩ thì việc lấy ra các bảng tọa dộ rất đơn giản.
Mình chưa biết sao để đọc được từng dòng để dùng lisp chuyển vào bản vẽ.
Cảm ơn bạn.
  • 0

#6 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 27 August 2010 - 10:01 AM

Bạn có thể viết lisp theo đề xuât của mình được không .Các cách ban vừa gợi ý mình làm cả rồi, phức tạp lắm.Khi dùng lệnh xclip bản vẽ xong chèn vào ,xp ra thì nó lại có đầy đủ các dòng mình loai.
Nếu như làm theo cách mình nghĩ thì việc lấy ra các bảng tọa dộ rất đơn giản.
Mình chưa biết sao để đọc được từng dòng để dùng lisp chuyển vào bản vẽ.
Cảm ơn bạn.

Có lệnh RTEXT tạo được text theo nội dung 1 file txt. Khi anh thay đổi nội dung file txt thì nội dung text trong bản vẽ thay đổi theo. Anh làm xem sao.
-Lệnh RTEXT:
RTEXT
Current settings: Style=Standard Height=1.00 Rotation=0
Enter an option [Style/Height/Rotation/File/Diesel] <File>:
Anh enter nó hỏi anh chọn file txt xong chỉ 1 điểm enter phát nửa thì nó xuất ra trên bản vẽ.
  • 1

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


#7 NDBNGO

NDBNGO

    biết lệnh rotate

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

Đã gửi 30 August 2010 - 04:36 PM

Duy xem lại 2 bản vẽ kèm theo ,làm sao kết xuất theo từng dòng với 2 bản vẽ .Có thể không quan tâm đễn việc kết nối mà có 1 file văn bản trên cad ,kết xuất từng dòng của bản vẽ đến 2 vị trí ở 2 bản vẽ khác nhay có bảng tọa độ cho trước mà.
Cảm ơn về gợi ý.
  • 0

#8 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 31 August 2010 - 07:26 PM

Duy xem lại 2 bản vẽ kèm theo ,làm sao kết xuất theo từng dòng với 2 bản vẽ .Có thể không quan tâm đễn việc kết nối mà có 1 file văn bản trên cad ,kết xuất từng dòng của bản vẽ đến 2 vị trí ở 2 bản vẽ khác nhay có bảng tọa độ cho trước mà.
Cảm ơn về gợi ý.

Chào bạn ndbngo,
Thực tình mình cũng đang tìm giải pháp cho vấn đề của bạn. Mình chưa rõ là các bản vẽ của bạn được mở trên các cửa sổ riêng hay bạn đã copy chúng về cùng một file như trên bản vẽ bạn post. Việc để các bản vẽ là các cửa sổ riêng biệt trên Cad rồi dùng lisp để gọi từng chứ ra xử lý là một vấn đề mà mình chưa biết có giải pháp nào ở trong lisp hay không??? (Do mình còn dốt lắm, chưa mót được) Trong lisp có cho phép gọi các file dạng text ra để viết thêm vào nhưng việc gọi các file bản vẽ dwg ra để xử lý thì mình chưa rõ. Mình còn đang lấn bấn về vấn đề này nên chưa thể giúp bạn được, mong bạn thông cảm. Tiện đây mình cũng nêu ra để nếu có bác nào biết về vấn đề này hoặc giả bạn có thể có giải pháp nào đó thì chỉ cho mình với.
Ý của mình là chọn một tập hợp text trên bản vẽ chứa text của bạn sau đó duyệt qua từng thằng và hỏi người dùng xem có muốn thay đổi gì nội dung của text đó không, nếu có thì thay và nếu không thì thôi. Sau đó gọi cái bản vẽ mà bạn muốn dán ra và dán nó vào cái vị trí mà bạn muốn dán thông qua việc chọn điểm dán. Trong trường hợp phải dán nhiều text thì bạn phải thiết lập một list các text và một list các point tương ứng rồi tiến hành dán bạn ạ.
Ý tưởng là vậy song chưa thực hiện được do vướng cái khâu gọi bản vẽ ra.
Theo mình hiểu thì bạn cũng có khả năng tương đối về lisp, vậy bạn cũng thử triển khai theo hướng này xem sao??? Chúc bạn thành cô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.

#9 NDBNGO

NDBNGO

    biết lệnh rotate

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

Đã gửi 31 August 2010 - 08:21 PM

Ý mình như sau:3 bản vẽ riêng
Chọn bản vẽ có file text:
Chọn file tọa độ bản vẽ 1: từng dòng text theo tọa độ tự động được insert vào bản vẽ 1 theo tọa độ
Chọn file tọa độ bản vẽ 2 từng dòng text theo tọa độ tự động được insert vào bản vẽ 2 theo tọa độ
Nếu từng dòng này là 1barn vẽ thì mình đã viết được.Nhưng mỗi dòng là 1 dòng text thì mình o làm thế nào .nếu 1 dòng là 1 bản vẽ như thế số bản vẽ quá lớn ,thao tác quá lâu thà bằng o dùng chương trinh.
Vậy mong được sự góp ý của các bạn.
  • 0

#10 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 01 September 2010 - 01:01 PM

Ý mình như sau:3 bản vẽ riêng
Chọn bản vẽ có file text:
Chọn file tọa độ bản vẽ 1: từng dòng text theo tọa độ tự động được insert vào bản vẽ 1 theo tọa độ
Chọn file tọa độ bản vẽ 2 từng dòng text theo tọa độ tự động được insert vào bản vẽ 2 theo tọa độ
Nếu từng dòng này là 1barn vẽ thì mình đã viết được.Nhưng mỗi dòng là 1 dòng text thì mình o làm thế nào .nếu 1 dòng là 1 bản vẽ như thế số bản vẽ quá lớn ,thao tác quá lâu thà bằng o dùng chương trinh.
Vậy mong được sự góp ý của các bạn.

Chào bạn nbdngo,
Thế này nhé, trước hết mình xin thành thật nói với bạn rằng, tuy bạn là một cán bộ có thâm niên trong nghề, nhưng cách truyền đạt vấn đề của bạn thật là khó hiểu đối với những người ngoại ngạch cũng như lớp trẻ sau này, do vậy cái khả năng bảo tồn và phát huy cái vốn kỹ thuật của bạn trong tương lai sẽ gặp nhiều khó khăn đó. Rất mong bạn cải thiện được vấn đề này.
Về bài toán bạn đặt ra mình xin mô tả lại thế này xem có đùng ý bạn không nhé và nếu đúng vậy thì có nhẽ sẽ có cách làm được:
1/- Bạn có một bản vẽ tức là một file *.dwg trên đó có chứa các text (theo cái bạn post là Mtext chứ không phải text) mà bạn muốn nhập nó vào một hay nhiều bản vẽ khác. Có thể nó chứa cả các text mà bạn chả muốn nhập vào đâu sất. Các text này có thể có hoặc không có thứ tự nhất định nào cả, cái cần dùng và không cần dùng nằm lẫn lộn với nhau.
2/- Bạn có một hay nhiều file bản vẽ *.dwg khác trên đó có chứa các bảng tọa độ của các điểm cần nhập text trên mỗi bản vẽ .
3/- Bạn có các file bản vẽ *.dwg mà bạn muốn nhập các text được chọn lựa vào đúng vị trí cần thiết của nó.
Và bây giờ bạn muốn rằng:
Tạo một lisp có thể:
1/- Lấy dữ liệu các text từ file bản vẽ text, kiểm tra và nếu cần thì chỉnh sửa nội dung của các text này và xác định các text cần được nhập vào các bản vẽ khác.
2/- Từ các bảng tọa độ có trên các bản vẽ chứa tọa độ này, tạo ra các point tương ứng với các text cần nhập trên các bản vẽ mà bạn cần nhập text vào. Có thể một text có nhiều điểm cần nhập text trên một hay nhiều bản vẽ khác nhau.
3/- Nhập các text đã được xác định vào các vị trí tương ứng của chúng được tạo trong bước 2.

Thực ra việc lấy dữ liệu các điểm từ bảng tọa độ trên CAD sẽ hơi phức tạp hơn là lấy từ các file txt, cvs hay xls bạn ạ. Tuy nhiên theo mình là vẫn lấy được. Vấn đề chỉ là ở chỗ bạn cần cung cấp các file dữ liệu tọa độ này để tham khảo chứ không có thì mù tịt chả biết bạn sắp xếp các dữ liệu theo kiểu gì (theo hàng hay theo cột .....) thì làm sao mà viết lisp. Hơn nữa các bảng tọa độ này là tọa độ thực tế hay tọa độ theo bản vẽ nữa chứ,..... làm thế nào để xác định cái tỷ lệ vẽ của bạn ....

Túm lại là bạn cần cung cấp đầy đủ các file mẫu mà bạn cần sử dụng để làm việc thì mới có thể làm lisp được bạn ạ. Nếu vì lý do bí .... rị nào đó thì bạn cũng cần phải cung cấp thêm các thông tin về các file này bạn nhé.

Trong cái file bạn post lên thì các text này không chỉ đơn thuần là copy chúng vào mà mình thấy chúng còn bị xoay đi nữa, vậy có cần xoay không và khi nào thì xoay và xoay bao nhiêu độ????? Ngay cả tỷ lệ của các text trên mỗi bản vẽ cũng khác nhau, vậy bạn định xử lý ra sao????

Về cơ bản thì như vậy còn nếu cần gì thêm mình sẽ bổ sung sau nhé. Chúc bạn vui và đừng giận vì những điều mình nói. Hãy thông cảm vì mình chỉ là thằng học mót thôi bạn 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.

#11 NDBNGO

NDBNGO

    biết lệnh rotate

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

Đã gửi 02 September 2010 - 01:47 AM

Rất cảm ơn bạn đã quan tâm đọc và nghiên cứu 1 vẫn đề mà chúng tôi thường xuyên phải làm ,mà làm thủ công chẳng khác công nhân vẽ cad(dù có thuộc bao nhiêu lệnh đi nữa). Những phần này bạn mình đã viết khoảng 15 năm về trước ,cũng không phải là kỹ sư gì cả chỉ là công nhân 7/7 .Anh ấy đã bị tai nạn và mất đi rồi,các mã nguồn đều thất lạc và mất đi.
Mình không muốn anh ấy có thể quên lãng trong cuộc đời này .Muốn để cho anh ấy đóng góp như anh ấy vẫn tồn tại.Vì 1 công nhân trong nhà không có vài quyển sách,trình độ thấp ,tiếng anh gần như không có mà đễn giờ rất nhiều tiện ích anh ấy viết ra vẫn nguyên giá trị .Nay mình o muốn anh ấy chỉ đứng nguyên và mất đi ,vậy cố gắng nghiên cứu có thể làm được 1 điều gì đó cho anh em thế hệ sau(Đấy là ham muốn nhưng thực hiện được hay không mình không biết nữa).
Gửi bạn file số liệu và hình ảnh để bạn dễ hình dung(Vì ngay cả đại bộ phận kỹ sư ra trường đến 5 ,10 năm còn giải thích cho họ hiểu còn khó).
file số liệu

http://www.4shared.c.../MC_online.html

http://www.4shared.c...P/P_online.html
hÌNH ẢNH :
http://www.4shared.c...oP/GUI2BAN.html
rẤT MONG ĐƯỢC BẠN GIÚP .
Cảm ơn.
  • 0

#12 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 02 September 2010 - 09:36 AM

Chào bạn ndbngo,
Thực tình mình cũng đang tìm giải pháp cho vấn đề của bạn. Mình chưa rõ là các bản vẽ của bạn được mở trên các cửa sổ riêng hay bạn đã copy chúng về cùng một file như trên bản vẽ bạn post. Việc để các bản vẽ là các cửa sổ riêng biệt trên Cad rồi dùng lisp để gọi từng chứ ra xử lý là một vấn đề mà mình chưa biết có giải pháp nào ở trong lisp hay không??? (Do mình còn dốt lắm, chưa mót được) Trong lisp có cho phép gọi các file dạng text ra để viết thêm vào nhưng việc gọi các file bản vẽ dwg ra để xử lý thì mình chưa rõ. Mình còn đang lấn bấn về vấn đề này nên chưa thể giúp bạn được, mong bạn thông cảm. Tiện đây mình cũng nêu ra để nếu có bác nào biết về vấn đề này hoặc giả bạn có thể có giải pháp nào đó thì chỉ cho mình với.
Ý của mình là chọn một tập hợp text trên bản vẽ chứa text của bạn sau đó duyệt qua từng thằng và hỏi người dùng xem có muốn thay đổi gì nội dung của text đó không, nếu có thì thay và nếu không thì thôi. Sau đó gọi cái bản vẽ mà bạn muốn dán ra và dán nó vào cái vị trí mà bạn muốn dán thông qua việc chọn điểm dán. Trong trường hợp phải dán nhiều text thì bạn phải thiết lập một list các text và một list các point tương ứng rồi tiến hành dán bạn ạ.
Ý tưởng là vậy song chưa thực hiện được do vướng cái khâu gọi bản vẽ ra.
Theo mình hiểu thì bạn cũng có khả năng tương đối về lisp, vậy bạn cũng thử triển khai theo hướng này xem sao??? Chúc bạn thành công.

Chỉ cần trên dữ liệu bạn phải thật rõ ràng. Phải có tọa độ, độ cao, font chữ, góc nghiêng ... Sau đó có thể lập trình cho chúng vào một danh sách.
Với cách đặt biến hệ thống lispinit=0, và sdi=1, danh sách trên luôn đc bảo toàn khi bạn mở file mới.
  • 0

#13 nataca

nataca

    biết lệnh adcenter

  • Members
  • PipPipPipPipPipPipPip
  • 712 Bài viết
Điểm đánh giá: 553 (tốt)

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

Rất cảm ơn bạn đã quan tâm đọc và nghiên cứu 1 vẫn đề mà chúng tôi thường xuyên phải làm ,mà làm thủ công chẳng khác công nhân vẽ cad(dù có thuộc bao nhiêu lệnh đi nữa). Những phần này bạn mình đã viết khoảng 15 năm về trước ,cũng không phải là kỹ sư gì cả chỉ là công nhân 7/7 .Anh ấy đã bị tai nạn và mất đi rồi,các mã nguồn đều thất lạc và mất đi.
Mình không muốn anh ấy có thể quên lãng trong cuộc đời này .Muốn để cho anh ấy đóng góp như anh ấy vẫn tồn tại.Vì 1 công nhân trong nhà không có vài quyển sách,trình độ thấp ,tiếng anh gần như không có mà đễn giờ rất nhiều tiện ích anh ấy viết ra vẫn nguyên giá trị .Nay mình o muốn anh ấy chỉ đứng nguyên và mất đi ,vậy cố gắng nghiên cứu có thể làm được 1 điều gì đó cho anh em thế hệ sau(Đấy là ham muốn nhưng thực hiện được hay không mình không biết nữa).
Gửi bạn file số liệu và hình ảnh để bạn dễ hình dung(Vì ngay cả đại bộ phận kỹ sư ra trường đến 5 ,10 năm còn giải thích cho họ hiểu còn khó).
file số liệu

http://www.4shared.c.../MC_online.html

http://www.4shared.c...P/P_online.html
hÌNH ẢNH :
http://www.4shared.c...oP/GUI2BAN.html
rẤT MONG ĐƯỢC BẠN GIÚP .
Cảm ơn.

Nếu làm cách như bác nói như hiện tại bây giờ thì có thể làm được. Tuy nhiên anh bạn bác viết tiện ích này từ cách đây 15 năm (tức khoảng năm 1995), khi mà Visuallisp chưa ra đời thì thật là đáng nể. Không biết bác có lisp nào mà bạn bác để lại không cho anh em tham khảo cách tư duy và viết code với. Chứ theo em để viết được như yêu cầu của bác nếu với khả năng bây giờ của em còn phải đặt ra một số chuẩn và nguyên tắc. Xem cách quản lý đối tượng bản vẽ của bác thì em chịu thôi
  • 0

#14 NDBNGO

NDBNGO

    biết lệnh rotate

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

Đã gửi 02 September 2010 - 03:11 PM

Đúng vậy thời đó toàn viết bằng lisp trên cad 12 for Dos .Lúc đó công ty Hài hòa cũng đã viết nhiều phần mềm hô trợ cho kiến trúc trên cad12.Thời đó lisp chưa thành 1 ngôn ngữ lập trình như các cad2000 sau này.Cái bạn xem là viết từ trước 1995 đó.Tính chuyên nghiệp của các phần mềm rất cao như bạn đã xem đó.
Có thể là trong diễn đàn này các lĩnh vực khác mình không dám đánh giá ,nhưng về trắc địa,số anh em có chuyên môn thực sự tham gia ở đây quá ít.mà anh em thì phụ thuộc có vào cũng chỉ cóp nhặt để sử dụng mà thôi. Mình năm nay cũng gần 50 rồi nên học cái mới cũng khó.
Vì các bạn có chuyên môn cao về nghề và lập trình trắc địa chưa ai tham gia vào đây cả.
Nhiều tiện ích sơ đẳng trong trắc địa đẫ viết 15-20 năm trước ,thậm chí bẳng Fortran,pascan,fobro qua dạng lisp ,dxf ,scr vẫn vượt rất xa những cái vừa viết xong trong diễn đàn bây giờ rất chắp vá và không hướng gì đến đối tượng cả.
Vì muốn tìm hiểu các thuật toán và tư duy của các bạn nên mình muốn học nhanh nhất tiến tới tự viết toàn bộ cho mình.
Cảm ơn về ý kiến của bạn.
  • 0

#15 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 02 September 2010 - 05:16 PM

Nếu làm cách như bác nói như hiện tại bây giờ thì có thể làm được. Tuy nhiên anh bạn bác viết tiện ích này từ cách đây 15 năm (tức khoảng năm 1995), khi mà Visuallisp chưa ra đời thì thật là đáng nể. Không biết bác có lisp nào mà bạn bác để lại không cho anh em tham khảo cách tư duy và viết code với. Chứ theo em để viết được như yêu cầu của bác nếu với khả năng bây giờ của em còn phải đặt ra một số chuẩn và nguyên tắc. Xem cách quản lý đối tượng bản vẽ của bác thì em chịu thôi

Mình thấy công việc trên cái video ấy đã đc lập trình trước theo qui luật của công việc. Nếu bản mở ngược lại thứ tự các bv thì có thể nó sẽ làm sai. Có nghĩa là bv thứ nhất sang bv thứ 2 và thử 3 đã có công thức theo chuyên ngành của nó. Nói về Lisp và Visualisp thì sự khác nhau có chăng là vl hoạt động có sự điều khiển của hệ điều hành còn lisp chỉ hoạt động qua sự đều khiển của cad. vl ngoài việc có thể can thiệp vào hệ thống còn có thêm nhiều hàm mới mà trước đây người lập trình phải tự làm trên lisp.
Mỗi người có công việc khác nhau. Nói về lisp thì mình đã hoàn tất các lệnh và các hàm cần thiết cách đây đã khá lâu từ thới cad12-cad14. Sau này dường như cũng ít viết lisp nên một số kiến thức đã quên (mình chủ yếu làm trên ARX), khi đến với cadviet mình mới bắt đầu ôn lại kiến thức cũ và học hỏi thêm một số kiến thức mới.
Trở lại với bài toán trên thì có thể lảm đơn giản như sau:
- thiết lập biến hệ thống lispinit=0 (biến này giúp cad bảo toàn các hàm và bếin toàn cục khi bạn mở bv mới)
- biến sdi=1 (biến này chỉ có từ cad2000 trở lên) nhằm tắt chế độ mở nhiều bản vẽ.
- Khi mở bv thứ nhất bạn có thể chọn một số text theo thứ tự nhất định và nhớ chúng vào danh sách theo cấu trức nào đó
- Mở bv thứ 2 (có thể mở file tọa độ, nếu đã có qui luật thì cũng kg cần thiết), căn cừ vào ds trên và tọa độ để thực hiện
- Mở bv thứ 3... rồi làm tương tự
  • 1

#16 NDBNGO

NDBNGO

    biết lệnh rotate

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

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

Trước tiên để giải quyết từng bước , bước đầu tiên nhờ các bạn viết cho 1 chương trình đọc từng dòng text trên bản vẽ 1 tự động xuát ra thành 1 file có tên lần lượt là ghichu1,ghichu2....n.Tương đương số dòng ta sẽ có n bản vẽ .Các dòng này nằm trên bản vẽ gốc có thể là tọa độ bát kỳ nhưng sang bản vẽ mới có tọa độ là 0,0.
Cảm ơn.
  • 0

#17 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 03 September 2010 - 09:06 AM

Trước tiên để giải quyết từng bước , bước đầu tiên nhờ các bạn viết cho 1 chương trình đọc từng dòng text trên bản vẽ 1 tự động xuát ra thành 1 file có tên lần lượt là ghichu1,ghichu2....n.Tương đương số dòng ta sẽ có n bản vẽ .Các dòng này nằm trên bản vẽ gốc có thể là tọa độ bát kỳ nhưng sang bản vẽ mới có tọa độ là 0,0.
Cảm ơn.

Mình chỉ làm ví dụ để bạn tham khảo thôi. Ngay sau khi khpởi động cad, bạn phải đặt biến sdi=1 tránh lỗi khi bạn đã mở nhiều bv. Lisp co thể viết như sau:
Day la vi du ban co file text, sau khi danh lenh vidu ban se chon text. khi chon xong CT se mo bv cua ban dung n lan, moi lan ghi 1 text va save lai. Ban can cu vao do de phat trien them

(defun dxf( name n)
(cdr (assoc n (entget name)))
)

(defun c:VIDU()
(setvar "lispinit" 0)
(setq lis nil)
(while (setq n (entsel "\n Chon text")) ;Nho chon dung text, o day o kiem tra
(setq n (car n))
(setq st (dxf n 1))
(setq lis (append lis (list st)))
)
(setq nfile (getvar "dwgname"))
(setq i 0 l (length lis))
(command "_.qsave")
(while (< i l)
(setq st (nth i lis))
(command "_.open" nfile)
(command "_.text" (list 0 (- i 0) 0) 0.5 0 st)
(command "_.qsave")
(setq i (1+ i))
)
)
  • 1

#18 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 03 September 2010 - 09:30 AM

Trước tiên để giải quyết từng bước , bước đầu tiên nhờ các bạn viết cho 1 chương trình đọc từng dòng text trên bản vẽ 1 tự động xuát ra thành 1 file có tên lần lượt là ghichu1,ghichu2....n.Tương đương số dòng ta sẽ có n bản vẽ .Các dòng này nằm trên bản vẽ gốc có thể là tọa độ bát kỳ nhưng sang bản vẽ mới có tọa độ là 0,0.
Cảm ơn.

Đoạn này thì đơn giản. Nhưng bước tiếp theo làm gì, có khả thi không anh?
  • 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


#19 NDBNGO

NDBNGO

    biết lệnh rotate

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

Đã gửi 03 September 2010 - 09:42 AM

Được chứ,bạn đã xem đoạn video.Có thể chưa chuyên nghiệp nhưng tạm để dùng đã .Bước 2 là khi có đầy đủ số liệu trên bản vẽ (dạng text) và rất nhiều block. block nào không đè nên text thì ta giữ nguyên block nào đè nên text ta cho nó dịch chuyển theo 1 khoảng nhất định nào đó(thepo yêu cầu nhập vào).
Các bạn viết cho mình đoạn lisp đó với.
  • 0

#20 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 03 September 2010 - 11:04 AM

Được chứ,bạn đã xem đoạn video.Có thể chưa chuyên nghiệp nhưng tạm để dùng đã .Bước 2 là khi có đầy đủ số liệu trên bản vẽ (dạng text) và rất nhiều block. block nào không đè nên text thì ta giữ nguyên block nào đè nên text ta cho nó dịch chuyển theo 1 khoảng nhất định nào đó(thepo yêu cầu nhập vào).
Các bạn viết cho mình đoạn lisp đó với.

Chào bạn NBDNGO,
Sau khi xem vấn đề của bạn mình suy nghĩ như sau:
1/- Việc làm theo yêu cầu của bạn hoàn toàn có thể được nếu kết hợp với gợi ý của bác TRUNGNGAMY.
2/- Tuy nhiên theo ỳ mình bạn thử thay đổi cách làm có lẽ sẽ hay hơn. Cụ thể bạn hãy insert tất cả các bản vẽ cần nhập text vào cùng bản vẽ có chứa các text gốc. Sau đó bạn có thể dùng lisp để chuyển danh sách tọa độ của các bản vẽ gốc về tọa độ của bản vẽ hiện hành. Sau đó là bạn copy, rotate, và scale các text gốc về các điểm cần thiết theo danh sách có chọn lựa. Cuối cùng là việc tách bản vẽ tổng này thành các bản vẽ riêng biệt theo yêu cầu.

Làm theo cách này sẽ tránh được cái loằng ngoằng của việc chạy lisp trên môi trường nhiều bản vẽ, hơn nũa có thể giải quyết việc nhập mỗi một text đồng thời cho hàng loạt bản vẽ chứ không phải chỉ cho lần lượt từng bản vẽ. Và do đó có vẻ như lisp sẽ làm việc thuận lợi hơn. Tính chuyên nghiệp theo như bạn nói thì mình không dám chắc nhưng theo cái cách mót của mình thì có vẻ nó cũng xài được bạn ạ.

3/- Với các file dữ liệu tọa độ ở dạng text như bạn đã gửi, theo mình thì việc xác định point trên bản vẽ sẽ không quá khó khăn. Tuy nhiên do file có đuôi là .sl nên mình cần kiểm tra lại trước khi thực hiện. Bạn hãy chờ thêm chút nữa nhé.

Để tham khảo bạn có thể xem thêm cái lisp này do mình viết, nó dùng để copy mỗi text trong tập hợp text được chọn tới các điểm được chọn trực tiếp trên màn hình (dùng hàm getpoint). Bạn chỉ cần thay đổi việc chọn các điểm bằng hàm getpoint thành việc tạo danh sách điểm từ các bảng tọa độ là xong phần copy, còn phần rotate và scale thì cần bổ sung thêm một chút là có thể xài được bạn ạ. Bạn chú ý rằng trong lisp này mình mới chỉ chọn các đối tượng là mtext do bản vẽ bạn post mẫu thì chúng toàn là mtext cả. Tuy nhiên bạn cũng có thể sử dụng với các text nữa bằng cách bổ sung vào danh sách lọc của hàm ssget thêm đối tượng text nữa là được bạn nhé.

(defun c:cmtxt ( )
(vl-load-com)
(command "undo" "be")
(setq sst (ssget '((0 . "MTEXT")))
n (sslength sst)
i 0
tlst (list)
plst (list)
tplst (list)
lste (list)
)
(while (< i n)
(setq ent (ssname sst i)
elst (entget ent)
pt (cdr (assoc 10 elst))
mt (cdr (assoc 1 elst))
lste (append lste (list ent))
)
(alert (strcat " Noi dung text la" mt))
(setq ans (getstring "\n Ban muon thay doi noi dung text (y or n): "))
(if (= ans "y")
(setq mt (getstring T "\n Nhap noi dung text moi: "))
)
(setq tlst (append tlst (list mt))
i (1+ i)
)
(alert " Hay chon cac diem nhap text moi ")
(setq pm (getpoint))
(while pm
(setq plst (append plst (list pm))
pm (getpoint pm "\n Chon diem tiep theo" )
)
)
(setq tplst (append tplst (list (list lste tlst plst)))
tlst (list)
plst (list)
lste (list)
)
)
(foreach tp tplst
(if (/= (cddr tp) nil)
(progn
(foreach pt (caddr tp)
(setq els (entget (caar tp)))
(command "copy" (caar tp) "" (cdr (assoc 10 els)) pt)
(setq en (entlast)
elis (entget en)
elis (subst (cons 1 (caadr tp)) (assoc 1 elis) elis)
)
(entmod elis)
(entupd en)
)
)
)
)
(command "undo" "e")
(princ)

)

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.