Chuyển đến nội dung
Diễn đàn CADViet
Đăng nhập để thực hiện theo  
NDBNGO

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

Các bài được khuyến nghị

Gửi duy782006

Nên tạo 1 thư mục riêng D:/chen/*.dwg để dễ quản lý.

Đấnh tử dòng đầu đễn dòng cuối .Mình sử hàm (+ i 1) thành ( -i x) x là số dòng ,nhưng thủ công quá phải đếm.

Chắc phải cậc lực vài tháng mới hiểu được chương trình của các bạn được.

Vì tính năng ghi text này chỉ trong 1/100 tính năng của tiện ích nầy nên mình phải tận dụng ,sau đủ kiến thức mới viết sau.Phải loại bỏ toàn bổ toàn bộ các chương trình ngoài tác động vào cad ,rất tiếc nhưng o thể vì nếu thế, thì mãi chắp vá mà thôi.

Mình muốn thêm tính năng cắt bỏ chữ nữa thì có thể được không(có thể viết chương trình riêng) vị dụ

C32+ 54 Cống bỏ.

C22+45.6 Đường ngang.

....

có thể cắt loại bỏ text từ trước đấu cách thành

Công bỏ

Đường ngang

....

Nghĩa là đọc 1 file text có các text theo hàng ,khi dùng lệnh DEfun C: deltext sẽ loại bỏ các chữ trước dấu cách

 

Cảm ơn Duy.

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
Gửi duy782006

Nên tạo 1 thư mục riêng D:/chen/*.dwg để dễ quản lý.

Đấnh tử dòng đầu đễn dòng cuối .Mình sử hàm (+ i 1) thành ( -i x) x là số dòng ,nhưng thủ công quá phải đếm.

Chắc phải cậc lực vài tháng mới hiểu được chương trình của các bạn được.

Vì tính năng ghi text này chỉ trong 1/100 tính năng của tiện ích nầy nên mình phải tận dụng ,sau đủ kiến thức mới viết sau.Phải loại bỏ toàn bổ toàn bộ các chương trình ngoài tác động vào cad ,rất tiếc nhưng o thể vì nếu thế, thì mãi chắp vá mà thôi.

Cảm ơn Duy.

Sửa như sau:

 

(Defun C:XRT ( )

(setq SS (ssget "x" '((0 . "TEXT"))))

(setq N (sslength ss))

(setq i (- n 1))

(setq so 1)

(while (> i -1)

(setq TEXTENT (ssname SS i))

(setq DTT (entget TEXTENT))

(setq diemchen (cdr (assoc 10 DTT)))

(setq tenchen (strcat "D:/chen/ghichu" (itoa so)))

(command "ucs" "object" textent)

(command "_wblock" tenchen "y" "" diemchen textent "" "_oops")

(command "ucs" "p")

(setq i (- i 1))

(setq so (1+ so))

)

(Princ))

 

-Lưu ý anh phải có thư mục D:/chen/ trên máy rồi.

-Nhửng yêu cầu của anh ko đúng chuyên ngành nên Duy và các bạn khác rất khó hiều được cho cẩn, cụ, tỉ Anh nên mình họa bắng cái chi chi đó, đoặc nếu được thì anh đưa ra cái sườn như ngắt ra từng đoạn để anh em dể giải quyết.

  • Vote tăng 1

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

Em viết cho đoạn cắt text như anh đề nghị ở trên được không.Nghĩa là nhiều khi nội dụng sau vẫn giữ nguyên bản vẽ này nhưng lại cắt bỏ đạo đầu ở bản vẽ khác.

Cách nhau chỉ 1 dấu cách.

Líp vừa rồi chạy rất tốt nếu các hàng là các số thứ tự,nhưng là các dòng text hay mtext thì chạy ra hàng 18,20 bản dù bản gốc chỉ có 4,5 hàng.

Cảm ơn.

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
Còn 2 chương trình của 2 ban trungngamy.nguyenthanhbinh đều báo lỗi chưa chạy được.

Mình thử bằng cách copy lại bài đã post thấy nó vẫn chạy tốt. Chỉ cần bạn lưu ý là khi khởi động cad bạn phải đặt ngay biến hệ thống sdi=1.

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
http://www.4shared.com/photo/u64Ztrwp/_2__CONGGOC.html

em thử chạy text 4 dòng này xem ra 19 file không theo quy luật nào cả

Mtext thì còn loạn hơn nữa.

Trong file của anh có 19 đối tượng text nên nó ra 19 file thôi. Trong đó có 13 text không có nội dung, 1 text là dấu ?. Duy đã nói là theo quy luật thứ tự tạo ra của đối tượng chứ không phải vị trí của text.

Anh tìm lisp xóa các text không nội dung trong bản vẽ d bác Hoành viết rồi đấy.

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
Mình thử bằng cách copy lại bài đã post thấy nó vẫn chạy tốt. Chỉ cần bạn lưu ý là khi khởi động cad bạn phải đặt ngay biến hệ thống sdi=1.

Xem lại cái file ghi1ra2 của bạn thì thấy những gì mình gợi ý dư sức làm đc. Kg biết mình có nhần lẫn gì kg nhỉ. Đây là bài toán khá đơn giản. Tuy nhiên, mình thấy trong bài toán này bạn đã tự làm khó mình khi tạo ra 2 file tọa độ. Việc tạo ra 2 file đó bạn phải có đoạn lisp để thực hiện hoặc phải nhập tọa dộ bằng tay. Thay vì làm vậy thì bạn bạo ra một số đối tượng mang tính chất đặc trưng để CT nhận ra và thực hiện. Ví dụ trên BV 2 và 3 ngay tại vị trí bạn muốn đưa text vào bạn chỉ cần đánh text "1", "2", "3" ... theo đúng định dạng và năm trong layer nào đó tránh sự nhầm lẫn. Khi thực hiện CT chỉ thay "1" bằng text1, '2" bằng text2 ... Với text1, text2 là thứ tự text trong file 1

  • Vote tăng 1

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

Tạo ra 2 hay nhiều file toa độ đó là điều cực kỳ đơn giản với chương trình này.Chỉ cần pick chuột vào các vị trí ,chương trình sẽ tự động đáng só và xuất ra file. nếu tao 1 file 1000 điểm không quá 10 phút.Vì đây là 1 chương trình với hàng 100 tính năng cho trắc địa làm từ đầu đến cuối,có thể nói hiệu quả rất cao. Mình đã bỏ tiền ra mua nhiều chương trình (Topo,nova...500USD ) nhưng rồi đều bỏ không vì không đọ được vì tính chất dễ truyền dạy và hiệu quả của chương trình mình đang dùng. Nhưng mình đã nói chương trình này gần như hoàn thiện .

Mình hiện làm chủ nhiệm khảo sát gần như toàn bộ các loại công trình sân bay ,cầu cảng ,giao thông,thủy lơi,quy hoạch ... trong các đơn vị tư vấn nên cũng có điều kiện giao lưu trao đổi nhiều.

Vậy nên chỉ tích hợp thêm các tính năng để nó hoàn hảo hơn mà thôi,còn khi minh có thể viết theo ý mình thì sẽ tính sau.

Gửi Duy782006.

Khi mình chuyển sang 1 dạng text khác thì đều đã nhận được đúng số dòng,số bản vẽ nhưng khi các bản vẽ xuất ra lại không theo thứ tự dòng .Em xem do nguyên nhân gi vây nhé.

Gửi file cho em:

http://www.4shared.com/photo/DqEBUVp2/ghichumoi.html

Cảm ơn tất cả.

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
Em viết cho đoạn cắt text như anh đề nghị ở trên được không.Nghĩa là nhiều khi nội dụng sau vẫn giữ nguyên bản vẽ này nhưng lại cắt bỏ đạo đầu ở bản vẽ khác.

Cách nhau chỉ 1 dấu cách.

Líp vừa rồi chạy rất tốt nếu các hàng là các số thứ tự,nhưng là các dòng text hay mtext thì chạy ra hàng 18,20 bản dù bản gốc chỉ có 4,5 hàng.

Cảm ơn.

-Quy ước _ là dấu cách:

-Cho chuổi gốc như sau: _đfgshf_đsfsjfhsdfjfsfsđjfks anh muốn kết quả như nào:

+đfgshf_đsfsjfhsdfjfsfsđjfks

+đsfsjfhsdfjfsfsđjfks

-File xuất ra vị trí nào tự tạo trong cùng thư mục hay hỏi chọn thư mục hay mặc định thư mục?

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
Tạo ra 2 hay nhiều file toa độ đó là điều cực kỳ đơn giản với chương trình này.Chỉ cần pick chuột vào các vị trí ,chương trình sẽ tự động đáng só và xuất ra file. nếu tao 1 file 1000 điểm không quá 10 phút.Vì đây là 1 chương trình với hàng 100 tính năng cho trắc địa làm từ đầu đến cuối,có thể nói hiệu quả rất cao. Mình đã bỏ tiền ra mua nhiều chương trình (Topo,nova...500USD ) nhưng rồi đều bỏ không vì không đọ được vì tính chất dễ truyền dạy và hiệu quả của chương trình mình đang dùng. Nhưng mình đã nói chương trình này gần như hoàn thiện .

Mình hiện làm chủ nhiệm khảo sát gần như toàn bộ các loại công trình sân bay ,cầu cảng ,giao thông,thủy lơi,quy hoạch ... trong các đơn vị tư vấn nên cũng có điều kiện giao lưu trao đổi nhiều.

Vậy nên chỉ tích hợp thêm các tính năng để nó hoàn hảo hơn mà thôi,còn khi minh có thể viết theo ý mình thì sẽ tính sau.

Gửi Duy782006.

Khi mình chuyển sang 1 dạng text khác thì đều đã nhận được đúng số dòng,số bản vẽ nhưng khi các bản vẽ xuất ra lại không theo thứ tự dòng .Em xem do nguyên nhân gi vây nhé.

Gửi file cho em:

http://www.4shared.com/photo/DqEBUVp2/ghichumoi.html

Cảm ơn tất cả.

Nếu file 1 toàn text bạn nên dùng file văn bản. Nó sẽ mặc nhiên theo thứ tự hơn là việc sắp xếp với lisp, kg đơn giản khi bạn chọn chúng trong tập hợp.

Nếu bạn nói CT đã hoàn thiện rồi, cả vđ bạn đang quan tâm bạn cũng làm thử cho mọi người xem rồi và bạn muốn mọi người làm giống y như vậy để làm gì nhỉ.

  • Vote tăng 1

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

Mình nói nó gần như hoàn thiện nên tich hợp thêm các tính năng cho nó mà,bạn đọc hết đi.Do chương trình của bạn mình nên mình đang sử dụng tốt ,hiệu quả ,1 số phần chưa khai thác được thì viết lại và nâng cao.Chứ nếu bạn mình còn thì chắc mình không bao giờ phải nghĩ đên học viết gì cả.

Vì 1 ý tưởng của mình anh ấy có thể biến nó thành rất nhiều cái mà mình chưa nghĩ đến.

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
-Quy ước _ là dấu cách:

-Cho chuổi gốc như sau: _đfgshf_đsfsjfhsdfjfsfsđjfks anh muốn kết quả như nào:

+đfgshf_đsfsjfhsdfjfsfsđjfks

+đsfsjfhsdfjfsfsđjfks

-File xuất ra vị trí nào tự tạo trong cùng thư mục hay hỏi chọn thư mục hay mặc định thư mục?

Dấu cách là được rồi.

Cho ra cả 2 dạng.

Thư mục do người dùng chỉ định

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
Mình đã nói rồi đây là chương trình rất cổ nhưng đã hổ trợ cho mình hàng 100 công trình và hiệu quả hơn người vẽ cad giỏi 10 lần trở nên.Khó có thể tính hiệu quả của nó.Bắn điểm và tính ra tọa độ với mọi dạng số liệu ,với các loại đơn vị đo mà trắc địa và quân đội sử dụng (Từ số liệu thô cũng như số liêu trút từ máy đo các loại,các loại tỷ lệ bản đồ ,tùy biến tỷ lệ theo người dùng yêu cầu,nối vẽ tự động ...)

1,2,3,4,,,,,5 là số dòng thư tự.Mình mới thử đến 2000 dòng thôi vì không có công trình nào lớn hơn nứa ,các mã trước các số 1,2,3... là các mã gắn cho đối tượng từ đầu đễn cuối ( bát kể là bản vẽ ,dòng text...) nghĩ là có thể gắn được khoảng (32x32)x2 dòng (đói tượng) .Ví dụ aa, ab... za,zb... ngược lại.Mình chưa thử với dạng số.

Gửi bạn lại các bản vẽ

http://www.4shared.com/photo/SYNuGMUI/ban2n.html

http://www.4shared.com/photo/BehRmjKn/MC2.html

http://www.4shared.com/photo/Vuxo-8mk/CONGGOC.html

Đang kiểm tra lại file lisp của bạn ,sẽ trả lời sau.

Xin cảm ơn.

Chào bạn nbdngo,

Bạn có thể nói rõ hơn được không????

1, 2,3,4 ... là số dòng thứ tự của cái gì??? của Text hay của các dòng tọa độ điểm nhập text. CA,CB,CC.... là các mã gắn cho đối tượng nào??? đối tượng text gốc trên bản vẽ text hay đối tượng point trên bản vẽ cần nhập text ??? Cái mã CA1 cụ thể là chỉ cái gì??? Nó liên quan như thế nào đối với việc copy text ??? Có phải nó nói rằng tại cái điểm đi theo đó sẽ copy cái text được đánh mã là 1 hay CA1 không?? Vì sao trên hai file tọa độ lại sử dụng chung các mã này??? Với cách đánh mã này của bạn liệu có hay không có các mã CB1, CA2, CC5 .... sẽ xuất hiện trong các file bảng tọa độ của bạn???

Cần phải hiểu rõ về các mã này mới có thể hoàn chỉnh cái lisp của bạn được, nếu không sẽ có thể gây nên kết quả copy nhầm đối tượng, bạn có hiểu rõ nó hay không vậy???

 

Mình đã làm xong cái việc lấy điểm từ các bảng tọa độ, cũng như việc lấy giá trị các dòng text, chỉ còn việc phải xác định text nào gắn vào điểm nào và gắn ra sao nữa là Ok. Rất mong bạn giải thích rõ vấn đề này.

 

Hiện tại mình cũng đã làm lisp với giả định rằng các mã CA1, CB2, CC3, CD4, CE5 là các mã tương ứng với các text1, text2, text3, text4, text5 mà nội dung các text này sẽ được kiểm tra, bổ sung hoặc thay thế khi cần thiết để dán vào các điểm mang mã số tương ứng.

 

Tỷ như với nội dung text1 bạn có thể kiểm tra, bổ sung hoặc thay thế nó và khi dán bạn có thể lựa chọn mã điểm là CA1, hay CE5 tùy ý.

Tương tự với các text2, text3, text4, text5,.....

Để làm điều này bạn cần phải nhớ nội dung các text và các điểm cần dán text.

 

Có thể giảm cái khả năng tùy biến này bằng cách bạn phải xác định trước các cặp tương thích tỷ như đã là CA1 thì dán text1, ... CE5 thì dán text5. Như vậy sẽ đỡ phải nhớ nhung gì nhiều và sẽ phải cải tiến trong lisp một chút. Để cải tiến thì lại cần phải biết nguyên tắc đánh mã bạn ạ. Đó là cái lý do vì sao mình vặn vẹo bạn về mấy cái mã phải gió này, mong bạn thông cảm.

Chào bạn và chúc bạn vui.

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

Thấy các bác thảo luận trao đổi sôi nổi , tôi xin phép phát biểu 1 vài ý kiến.

 

1.Trong lập trình Cad, cách đây 15-20 năm thì việc quản lý dữ liệu bằng file Txt được nhiều lập trình viên lựa chọn, vì nó đơn giản dể hiểu. Hiện nay việc quản lý dữ liệu bằng file (Text) không hẳn là lạc hậu nhưng sẽ không tận dụng hết ưu thế về công nghệ của CAD. Cad đã cung cấp nhiều thư viện tiện ích hơn tại sao chúng ta không sử dụng công nghệ mới, cứ phải lưu dữ liệu ra file bên ngoài rồi lại mở file đọc dữ liệu. Không nói đến t/hợp file bị thất lạc hư hỏng, thời gian cho 1 chu trình : “ mở file - đọc(viết) dữ liệu - đóng file “ cũng là không nhỏ.

Hiện nay Cad đã cho phép lưu dữ liệu trực tiếp lên file Cad (dưới dạng non_Graphic), vấn đề này đã có đề cập trên CadViet.

 

2. Trở lại chủ đề của NDBNGO : Làm sao dể tự động kết nối 1 bản vẽ text sang 2(nhiều) bản vẽ khác

- theo đề xuất của TRUNGNGAMY : “tạo ra một số đối tượng mang tính chất đặc trưng để CT nhận ra và thực hiện….”

- hay như ý tưởng của Nataca: “phải đặt ra một số chuẩn và nguyên tắc”

Mỗi người có 1 số chuẩn và nguyên tắc riêng, nếu bạn chấp nhận các nguyên tắc này thì CT mới thực hiện được.

Việc chạy theo giải pháp của 1 anh bạn “công nhân” mà NDBNGO đề xuất cũng là 1 lựa chọn đáng xem xét, nhưng chưa chắc đã tối ưu vào thời điểm hiện nay (có thể đó là giải pháo tối ưu vào thời điểm 15-20 năm trước).

 

Lựa chọn giải pháp nào phụ thuộc vào khả năng của mỗi người (liệu cơm gắp mắm) , như t/hợp của NDBNGO là muốn phát triển Code của 1 người bạn (bảo tồn và phát triển ?!) lại mang 1 ý nghĩa khác.

 

Xin giới thiệu 1 giải pháp tương tư như của TRUNGNGAMY.

- B1 : trên bản vẽ cần cập nhật, đánh dấu các TEXT cần cập nhật (có quan tâm đến thứ tự của các Text) theo chuẩn và nguyên tắc riêng.

- B2 : từ file Cad bất kì chứa Text có nội đã thay đổi , chạy LISP thực hiện thay nội dung các Text đã đánh dấu ở bước 1 với nội dung các Text được chọn.

 

Đây là demo cho phép cập nhật 2 Text đã đánh dấu trên file MC2.dwgban2n.dwg

chú ý : Lisp chỉ cập nhật TEXT trên 2 file MC2.dwgban2n.dwg

tên lệnh : UpTxt

Link Download : File Cad + Lisp

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
Dấu cách là được rồi.

Cho ra cả 2 dạng.

Thư mục do người dùng chỉ định

Anh test thử xem nhé!

Lệnh BKT: Bỏ tất cả các khoảng trắng trong dòng.

Lệnh BBKT: Bỏ khoảng trắng tới khi gặp ký tự.

 

(DEFUN c:bkt ( )

(setq filebandau (getfiled "Chon file .txt:" "" "txt" 0))

 

(setq filetaosau (getfiled "Chi dinh file ket qua:" "" "txt" 1))

(setq FILEMODEVIET (open filetaosau "a"))

 

 

(setq modedocfilebandau (open filebandau "r"))

 

(while (setq noidungdocduoccuafile (read-line modedocfilebandau))

 

(doanghepmoi))

 

(close modedocfilebandau)

(close FILEMODEVIET)

 

 

(princ)

)

 

;;;;;;;;;;;;;;;;;;;;;;;;;

;;;;;;;;;;;;;;;;;;;;;;;;;

;;;;;;;;;;;;;;;;;;;;;;;;;

(DEFUN c:bbkt ( )

(setq filebandau (getfiled "Chon file .txt:" "" "txt" 0))

 

(setq filetaosau (getfiled "Chi dinh file ket qua:" "" "txt" 1))

(setq FILEMODEVIET (open filetaosau "a"))

 

 

(setq modedocfilebandau (open filebandau "r"))

 

(while (setq noidungdocduoccuafile (read-line modedocfilebandau))

 

(doanghep))

 

(close modedocfilebandau)

(close FILEMODEVIET)

 

 

(princ)

)

 

;;;;;;;;;;;;;;;;;;;;;;;;;

;;;;;;;;;;;;;;;;;;;;;;;;;

;;;;;;;;;;;;;;;;;;;;;;;;;

 

(DEFUN doanghepmoi ( )

 

(setq ddndtxt (strlen noidungdocduoccuafile))

(setq ddtrndtxt 0)

(setq txt "")

 

(repeat ddndtxt

(setq ddtrndtxt (+ ddtrndtxt 1))

(setq txtd (substr noidungdocduoccuafile ddtrndtxt 1))

(cond

((= " " txtd) (setq txtd ""))

);cond

(setq txt (strcat txt txtd))

);repeat

 

(write-line txt FILEMODEVIET)

 

(princ)

)

;;;;;;;;;;;;;;;;;;;;;;;;;

;;;;;;;;;;;;;;;;;;;;;;;;;

;;;;;;;;;;;;;;;;;;;;;;;;;

 

(DEFUN doanghep ( )

 

(setq vitricochu 1)

(docco)

(write-line noidungdoc FILEMODEVIET)

 

(princ)

)

 

;;;;;;;;;;;;;;;;;;;;;;;;;

;;;;;;;;;;;;;;;;;;;;;;;;;

;;;;;;;;;;;;;;;;;;;;;;;;;

 

 

(DEFUN docco ( )

 

(setq vitricochu (+ vitricochu 1))

(setq noidungdoc (substr noidungdocduoccuafile vitricochu 1))

(if (= noidungdoc " ")

(docco)

)

(IF (/= noidungdoc " ") (PROGN

(setq noidungdoc (substr noidungdocduoccuafile vitricochu (- (strlen noidungdocduoccuafile) vitricochu)))

)

)

 

(princ)

)

 

;;;;;;;;;;;;;;;;;;;;;;;;;

;;;;;;;;;;;;;;;;;;;;;;;;;

;;;;;;;;;;;;;;;;;;;;;;;;;

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

Em hiểu nhầm ý anh rồi.Để làm như trường hợp 1 thì dùng lệnh tim kiếm và thay thế được ngay

Phần 2 thi cắt không đúng :

Ý anh như thế này mà

một dòng có ghi là c1+32.5 Cống tả THi mình tách ra làm 2 chuỗi là c1+32.5 và Cống tả .

Từ dòng có c1+32.5m Cống tả ta cắt chuỗi để trở thành file mới có chữ cống tả thôi.

Không phải là bỏ khoảng trắng mà cắt ký tự từ khoảng trắng đầu tiên

Rất mất thời gian của em .em thông cảm nhé

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
Em hiểu nhầm ý anh rồi.Để làm như trường hợp 1 thì dùng lệnh tim kiếm và thay thế được ngay

Phần 2 thi cắt không đúng :

Ý anh như thế này mà

một dòng có ghi là c1+32.5 Cống tả THi mình tách ra làm 2 chuỗi là c1+32.5 và Cống tả .

Từ dòng có c1+32.5m Cống tả ta cắt chuỗi để trở thành file mới có chữ cống tả thôi.

Không phải là bỏ khoảng trắng mà cắt ký tự từ khoảng trắng đầu tiên

Rất mất thời gian của em .em thông cảm nhé

Chào bạn nbdngo,

Việc cắt chuỗi này thực ra rất đơn giản. Chỉ là dùng các hàm xử lý chuỗi mà thôi. Bạn có thể sử dụng đoạn lisp sau:

(defun c:ctxt ( )
(setq txt (cdr (assoc 1 (entget (car (entsel "\n Chon doi tuong text can tach chuoi" )))))
       n (strlen txt)
       i 1)
(while (<= i n)
(if (= (substr txt i 1) " ")
   (setq ch1 (substr txt 1 (1- i))
           ch2 (substr txt (1+ i))
           i (+ i n)
  )
)
(setq i (1+ i))
)
)

Sau khi chạy lisp bạn sẽ có chuỗi đầu là ch1 và chuỗi sau là ch2.

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
Chạy tử của bạn Giabach thì thấy máy báo thế này nên chưa có nhận xét được:

 

http://www.4shared.com/video/Q90FFKqc/gibach.html

Nhờ các bạn xem giúp.

Cảm ơn

Sorry, do file Cad tui lưu ở định dạng Cad 2008 mà bác dùng Cad2004 (trong video minh họa) nên không mở file đuợc.

 

Upload file đã lưu ở định dạng Cad 2004.

Bác thử lại nhé : File Cad + Lisp

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
Em hiểu nhầm ý anh rồi.Để làm như trường hợp 1 thì dùng lệnh tim kiếm và thay thế được ngay

Phần 2 thi cắt không đúng :

Ý anh như thế này mà

một dòng có ghi là c1+32.5 Cống tả THi mình tách ra làm 2 chuỗi là c1+32.5 và Cống tả .

Từ dòng có c1+32.5m Cống tả ta cắt chuỗi để trở thành file mới có chữ cống tả thôi.

Không phải là bỏ khoảng trắng mà cắt ký tự từ khoảng trắng đầu tiên

Rất mất thời gian của em .em thông cảm nhé

Hề hề hề,

Với sự giúp sức của bác Master_Worse, mình có cái nè hay hơn gửi bạn coi thử:

(defun c:ctxt ()
(vl-load-com)
(setq txt (cdr(assoc 1 (entget (car (entsel "\n Chon text can tach chuoi"))))))
(setq ltxt (ctext txt)
(setq ch1 (car ltxt)
(setq ch2 (cadr ltxt)
)
(defun ctext (string / str1 str2)
(or vl-string-search (vl-load-com))
(setq pos (vl-string-search " " string)
str1 (substr string 1 pos)
str2 (substr string (+ pos 2))
) ;_ end setq
(list str1 str2)
) ;_ end defun

Chúc bạn vui.

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
Đây là demo cho phép cập nhật 2 Text đã đánh dấu trên file MC2.dwgban2n.dwg

chú ý : Lisp chỉ cập nhật TEXT trên 2 file MC2.dwgban2n.dwg

tên lệnh : UpTxt

Link Download : File Cad + Lisp

Chạy CT của gia_bach, thấy bạn sd một kỹ thuật rất lạ.

1- Nếu cái file chọn để cập nhật (vd là mc2.dwg) chưa mở, CT vẫn cập nhật vào file nội dung mới nhưng kg hề mở file mc2.dwg

2- Nếu cái file chọn cập nhật đã mở, CT vẫn cập nhật và save nội dung mới vào file nhưng sự thay đổi đó kg thể hiện ngay lên cái file đang mở (mặc dù nó chính là nó).

Khó hiểu. Nếu gia_bach kg nói ra, các bạn có ai hiểu đc nó là gì kg

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
Chạy CT của gia_bach, thấy bạn sd một kỹ thuật rất lạ.

1- Nếu cái file chọn để cập nhật (vd là mc2.dwg) chưa mở, CT vẫn cập nhật vào file nội dung mới nhưng kg hề mở file mc2.dwg

2- Nếu cái file chọn cập nhật đã mở, CT vẫn cập nhật và save nội dung mới vào file nhưng sự thay đổi đó kg thể hiện ngay lên cái file đang mở (mặc dù nó chính là nó).

Khó hiểu. Nếu gia_bach kg nói ra, các bạn có ai hiểu đc nó là gì kg

chào TRUNGNGAMY

1. kg hề mở file mc2.dwg

- Nguyên tắc chung là : muốn vào nhà phải mở cửa (cổng), muốn mở cửa phải có chìa khóa thích hợp.

Với các tập tin trên máy tính thì nguyên tắc này càng quan trọng và đuợc thực hiện theo 1 qui trình rõ ràng. (Máy tính không cho phép nhảy qua tuơng rào đâu)

Vd đơn giản như với file TEXT, khi viết LISP bạn phải dùng lệnh (Open tên_file mode ) truớc khi đọc-ghi trên file đó. Bạn cũng không thấy nó mở ra lúc nào và đóng vào lúc nào. Nhưng thực sự file đã đuợc mở-đóng để đọc-ghi dữ liệu.

Trong VD trên tôi mở file với thuộc tính là BackRound hay InVisible.

 

2. sự thay đổi đó kg thể hiện ngay lên cái file đang mở

- thực sự là data đã đuợc cập nhật. Nhưng chỉ CAD chưa hiển thị trên giao diện đồ họa thôi, bạn phải gọi lệnh REGEN để Cad hiển thị lại data trong file lên giao diện đồ họa. (Điều này cũng hay gặp trong các thao tác với Block thuộc tính hay FIELD)

 

PS : Tôi có đọc đuợc thắc mắc tuơng tự của bạn bên mục AutoLisp, khi có thời gian Tôi sẽ trả lời bạn.

  • Vote tăng 1

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
chào TRUNGNGAMY

1. kg hề mở file mc2.dwg

- Nguyên tắc chung là : muốn vào nhà phải mở cửa (cổng), muốn mở cửa phải có chìa khóa thích hợp.

Với các tập tin trên máy tính thì nguyên tắc này càng quan trọng và đuợc thực hiện theo 1 qui trình rõ ràng. (Máy tính không cho phép nhảy qua tuơng rào đâu)

Vd đơn giản như với file TEXT, khi viết LISP bạn phải dùng lệnh (Open tên_file mode ) truớc khi đọc-ghi trên file đó. Bạn cũng không thấy nó mở ra lúc nào và đóng vào lúc nào. Nhưng thực sự file đã đuợc mở-đóng để đọc-ghi dữ liệu.

Trong VD trên tôi mở file với thuộc tính là BackRound hay InVisible.

 

2. sự thay đổi đó kg thể hiện ngay lên cái file đang mở

- thực sự là data đã đuợc cập nhật. Nhưng chỉ CAD chưa hiển thị trên giao diện đồ họa thôi, bạn phải gọi lệnh REGEN để Cad hiển thị lại data trong file lên giao diện đồ họa. (Điều này cũng hay gặp trong các thao tác với Block thuộc tính hay FIELD)

 

PS : Tôi có đọc đuợc thắc mắc tuơng tự của bạn bên mục AutoLisp, khi có thời gian Tôi sẽ trả lời bạn.

Cám ơn bạn. Tuy kg chuyên nghiệp nhưng mình đã từng lập trình trên Delphi, VC++ kể cảch sd các kỹ thuật như ADO, Automation nên sau đó mình lơ mơ hiểu những gi bạn làm. Nhưng kg biết cụ thể làm như thế nào. Dạo này mình bận rộn và lớn tuổi nên kg đi sâu vào nữa. Về lisp thì mình cũng kg nghiên cứu đc VisualLisp, mình rất tiếc. Trước đây thấy lisp hơi yếu nên mình chủ yếu làm trên ARX, nhưng nó lại phụ thuộc phiên bản cũng thấy bất tiện nên mình cũng hạn chế làm trên ARX.

Tuy bây giờ hơi chậm chạp nhưng nếu thực sự công việc buộc phải làm thì mình vẫn có thể làm đc.

  • Vote tăng 1

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
chào TRUNGNGAMY

1. kg hề mở file mc2.dwg

- Nguyên tắc chung là : muốn vào nhà phải mở cửa (cổng), muốn mở cửa phải có chìa khóa thích hợp.

Với các tập tin trên máy tính thì nguyên tắc này càng quan trọng và đuợc thực hiện theo 1 qui trình rõ ràng. (Máy tính không cho phép nhảy qua tuơng rào đâu)

Vd đơn giản như với file TEXT, khi viết LISP bạn phải dùng lệnh (Open tên_file mode ) truớc khi đọc-ghi trên file đó. Bạn cũng không thấy nó mở ra lúc nào và đóng vào lúc nào. Nhưng thực sự file đã đuợc mở-đóng để đọc-ghi dữ liệu.

Trong VD trên tôi mở file với thuộc tính là BackRound hay InVisible.

 

2. sự thay đổi đó kg thể hiện ngay lên cái file đang mở

- thực sự là data đã đuợc cập nhật. Nhưng chỉ CAD chưa hiển thị trên giao diện đồ họa thôi, bạn phải gọi lệnh REGEN để Cad hiển thị lại data trong file lên giao diện đồ họa. (Điều này cũng hay gặp trong các thao tác với Block thuộc tính hay FIELD)

 

PS : Tôi có đọc đuợc thắc mắc tuơng tự của bạn bên mục AutoLisp, khi có thời gian Tôi sẽ trả lời bạn.

Chào bác Giabach,

Bác có thể hướng dẫn thêm về vấn đề: "Trong VD trên tôi mở file với thuộc tính là BackRound hay InVisible." này hay không????

Quả thực đây là một vấn đề mà mình cũng loay hoay chưa tìm ra lời giải. Mở một file text thì qua diễn đàn và các bác chỉ dẫn mình đã hiểu được và có thể sử dụng, Nhưng mở các file bản vẽ .DWG hay thậm chí .sldpart ra để xử lý trong lisp thì mình chưa biết cách. Rất mong bác chỉ giáo thêm.

Cám ơn bác trước.

  • Vote tăng 1

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
Chào bác Giabach,

Bác có thể hướng dẫn thêm về vấn đề: "Trong VD trên tôi mở file với thuộc tính là BackRound hay InVisible." này hay không????

Quả thực đây là một vấn đề mà mình cũng loay hoay chưa tìm ra lời giải. Mở một file text thì qua diễn đàn và các bác chỉ dẫn mình đã hiểu được và có thể sử dụng, Nhưng mở các file bản vẽ .DWG hay thậm chí .sldpart ra để xử lý trong lisp thì mình chưa biết cách. Rất mong bác chỉ giáo thêm.

Cám ơn bác trước.

 

Thấy các bác tham gia sôi nổi quá nên mình cũng đoán mò thôi nhá :

 

Anh Gia Bach là đại gia Visual Lisp trên diễn đàn này mà nên chắc chắn đã dùng đến VL thì hiển nhiên có thể hỉểu nó là ActiveX. Mò mãi trong Help của CAD thấy có đoạn này và đoán mò GiaBach dùng tới các Method open và save để mở và lưu bản vẽ ở dạng Background, nhưng vẫn chưa hiểu anh Bach tìm và thay thế mấy cái text kia bằng kiểu gì ?!

 

http://www.cadviet.com/upfiles/3/anh1.rar

 

@ Trungngamy: Trước tôi cũng có dùng ActiveX của thằng www.opendwg.org (giờ đổi thành http://www.opendesign.com) và thông qua các hàm API của nó viết ứng dụng bằng Delphi để đọc, mở, chèn các obj vào dwg, save lại mà không cần phải mở dwg đó ra. Bạn qua đó down về và trải nghiệm (vì chắc bạn viết thành thục delphi) thì cũng sẽ đoan đoán được cách làm của Gia Bach (tức là dùng VLisp - là 1 dạng ActiveX để làm thôi).

  • Vote tăng 2

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

Tạo một tài khoản hoặc đăng nhập để nhận xét

Bạn cần phải là một thành viên để lại một bình luận

Tạo tài khoản

Đăng ký một tài khoản mới trong cộng đồng của chúng tôi. Điều đó dễ mà.

Đăng ký tài khoản mới

Đăng nhập

Bạn có sẵn sàng để tạo một tài khoản ? Đăng nhập tại đây.

Đăng nhập ngay

Đăng nhập để thực hiện theo  

×