Đến nội dung


Hình ảnh
- - - - -

[Yêu Cầu] lisp lấy text ra khỏi file mặt cắt


  • Please log in to reply
16 replies to this topic

#1 anpha3

anpha3

    biết vẽ arc

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

Đã gửi 23 September 2011 - 01:39 PM


Nhờ các Bác giúp em :
Em có một mặt cắt địa hình một vài chỗ cần chỉnh lại số liệu cao độ tự nhiên;
và một vài chỗ cần chỉnh sửa khoảng cách lẻ . File số liệu chạy mặt cắt địa hình của em bị mất bây giờ không tìm thấy được, bây giờ muốn nhặt lại từ mặt cắt ra cũng được nhưng hàng nghìn điểm phải mất rất lâu.Các Bác giúp em lấy lại số liệu từ file cad sang file EXcel hai cột cao độ tự nhiên và khoảng cách lẻ như ví dụ em gửi trên ( file EXCEL em cần).
Cám ơn Các Bác




http://www.cadviet.c...y_so_lieu_1.rar
  • 0

#2 cd2k44

cd2k44

    Edu level: li5

  • Members
  • PipPipPipPipPipPipPip
  • 648 Bài viết
Điểm đánh giá: 121 (tàm tạm)

Đã gửi 23 September 2011 - 01:55 PM

Nếu có tới hàng nghìn mặt cắt và hàng nghìn điểm muốn lấy cao độ thì chắc là chịu rùi bạn ah.Còn với cái file bạn gửi,mình mất ko tới 2 phút để làm cho cái mặt cắt như vậy,nếu bạn cần cái lisp mà làm từng mặt cắt thì bạn tìm lisp xuất text ra file excel ( diễn đàn mình có) làm từng mặt cắt 1.Thủ công 1 tý, nhưng chắc cũng nhanh
  • 0

#3 anpha3

anpha3

    biết vẽ arc

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

Đã gửi 23 September 2011 - 08:22 PM

Đó là ví dụ em đưa lên 1 mặt cắt ít điểm thôi Bác ạ . Nhiều mặt cắt của em có hàng ngìn điểm.
Mà nhặt lại theo mặt cắt thì phải mất hàng tháng trời. Em mong Bác ketxu, Bác Tu, Bác Hoanh, Bác Phan Thanh Bình và Các Bác Cao Thủ Giúp Em viết lisp Với... cấp cứu...Cấp cứu...
  • 0

#4 ketxu

ketxu

    Copier - Paster - Editor

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

Đã gửi 23 September 2011 - 09:34 PM

Yêu cầu của bạn không khó vì cơ sở khá rõ ràng, chắc là các bác nhà mình sẽ giúp bạn được thôi :)
Mình thì k thuộc chuyên môn cái ni ^^ Nếu bạn cần thật sự, mà các bác nhà mình cũng bận quá thì bạn pm YH mình :D hềnh hệch
  • 0

Thành viên nhóm CadMagic.
Mời bạn ghé thăm facebook nhóm - Page viết lisp theo yêu cầu  :
CAD MAGIC


#5 whatcholingon

whatcholingon

    biết lệnh break

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

Đã gửi 23 September 2011 - 10:49 PM

Bạn gửi bản vẽ lên đây xem mình có lấy được số liệu ko.
(nếu có bản vẽ từ số liệu chạy ra hoặc bản vẽ chạy ra số liệu thì càng tốt)
  • 0

#6 anpha3

anpha3

    biết vẽ arc

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

Đã gửi 24 September 2011 - 03:37 PM

Em kính nhờ bác ketxu và các bác cao thủ viết lisp giùm em với.
  • 0

#7 npham

npham

    biết lệnh rotate

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

Đã gửi 25 September 2011 - 08:14 AM

Thực ra cái này làm theo kiểu chọn text rồi xuất ra thì cũng đơn giản, nhưng như chủ thớt nói có mặt cắt lên tới cả 1000 cọc thì việc chọn text sẽ vô cùng khó khăn.

Có cách này nếu chủ thớt đồng ý thì test thử đọan code dưới đây xem sao.
- Chọn đường tự nhiên ( phải là 1 polyline , không để từng line rời rạc)
- Cho tỷ lệ ngang (có thể mặc định)
- Cho tỷ lệ đứng (có thể mặc định)
- Chọn cái text chứa cao độ cọc đầu

=> Xuất ra file

Đoạn code dưới đây là đoạn thô, nếu sử dụng được thì hoàn thiện thêm


(defun c:c2t (/ caodo datapoint ent g kcach nextpoint)
(if
(and
(setq ent (entsel "\nChon POLYLINE, LWPOLYLINE hoac LINE <Exit>:"))
(setq datapoint (mapcar 'cdr (vl-remove-if '(lambda (x) (/= (car x) 10)) (entget (car ent)))))
(if (not (setq tylen (getint "\nTy le ngang <1000>:"))) (setq tylen 1000) tylen)
(if (not (setq tyled (getint "\nTy le dung <100>:"))) (setq tyled 100) tyled)
(setq ent (entsel "\nChon cao do coc dau tien <Exit>:"))
(setq caodo (distof (cdr (assoc 1 (entget (Car ent))))))

)

(progn

(setq g (open "c:/c2t.csv" "w"))
(write-line (strcat "0," (rtos caodo 2 2)) g)
(foreach point datapoint

(setq nextpoint (cadr (member point datapoint)))
(if nextpoint
(progn
(setq kcach (* (- (car nextpoint) (car point)) tylen 0.001))
(setq caodo (- caodo (* (- (cadr point) (cadr nextpoint)) tyled 0.001)))
(write-line (strcat (rtos kcach 2 2) "," (rtos caodo 2 2)) g)
))
)
(close g)
))
(princ)
)


  • 2

#8 anpha3

anpha3

    biết vẽ arc

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

Đã gửi 25 September 2011 - 07:23 PM

Cám ơn Bác npham Bác ơi em chạy líp của Bác mà không lấy được text ra khỏi MC Bác à.Bác xem lại hoàn thiện giúp em nhé Thank Bác nhiều...
  • 0

#9 npham

npham

    biết lệnh rotate

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

Đã gửi 25 September 2011 - 09:00 PM

Cám ơn Bác npham Bác ơi em chạy líp của Bác mà không lấy được text ra khỏi MC Bác à.Bác xem lại hoàn thiện giúp em nhé Thank Bác nhiều...


Nó ghi ra file c:\c2t.csv đó, nếu không có thì xem nó báo lỗi gì.
  • 0

#10 anpha3

anpha3

    biết vẽ arc

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

Đã gửi 26 September 2011 - 08:29 AM

Bác Hướng dẫn cụ thể cách sử dụng lisp của Bác Cho em với. Em làm mãi mà không được.
  • 0

#11 npham

npham

    biết lệnh rotate

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

Đã gửi 26 September 2011 - 09:23 AM

Bác Hướng dẫn cụ thể cách sử dụng lisp của Bác Cho em với. Em làm mãi mà không được.


Bạn phải nói rõ là không được cái gì ? Bạn đã làm tới bước nào? Thông báo lỗi ra sao? Có tìm thấy file c:\c2t.csv hay không?

Bạn thử nếu có thể áp dụng được mới hoàn thiện tiếp nhiều thứ nữa.
  • 0

#12 ketxu

ketxu

    Copier - Paster - Editor

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

Đã gửi 26 September 2011 - 09:48 AM

@npham : Bác viết sử dụng đường Line tự nhiên là cách logic khoa học. Tuy nhiên với yêu cầu thế này,theo e có thể ăn xổi bằng cách lấy text xử lý luôn. Tất nhiên là ta sẽ chọn toàn bộ text màu vàng, thuần số, quay đứng, có justify midle center... sau đó xếp cặp trùng x,y và xử lý 1 phát toàn bộ, người dùng không phải làm bất kỳ 1 thao tác gì.Và để thành công tuyệt đối thì càng nhiều điều kiện càng tốt ^^. Làm cách này thì hơi vất đoạn xử lý lọc.
P/s : đoạn lisp của bác chạy tốt, tuy nhiên chưa phân cách ô KCCD và cao độ, chắc sẽ xử lý tiếp ^^. Bác cho open luôn file cvs sau khi kết thúc thì bạn anpha3 sẽ dễ mường tượng kết quả hơn
@anpha3 : bạn nhớ join các Line rời rạc lại như npham đã ghi chú trước khi thực hiện lisp (^ ^)
  • 0

Thành viên nhóm CadMagic.
Mời bạn ghé thăm facebook nhóm - Page viết lisp theo yêu cầu  :
CAD MAGIC


#13 npham

npham

    biết lệnh rotate

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

Đã gửi 26 September 2011 - 01:38 PM

@npham : Bác viết sử dụng đường Line tự nhiên là cách logic khoa học. Tuy nhiên với yêu cầu thế này,theo e có thể ăn xổi bằng cách lấy text xử lý luôn. Tất nhiên là ta sẽ chọn toàn bộ text màu vàng, thuần số, quay đứng, có justify midle center... sau đó xếp cặp trùng x,y và xử lý 1 phát toàn bộ, người dùng không phải làm bất kỳ 1 thao tác gì.Và để thành công tuyệt đối thì càng nhiều điều kiện càng tốt ^^. Làm cách này thì hơi vất đoạn xử lý lọc.
P/s : đoạn lisp của bác chạy tốt, tuy nhiên chưa phân cách ô KCCD và cao độ, chắc sẽ xử lý tiếp ^^. Bác cho open luôn file cvs sau khi kết thúc thì bạn anpha3 sẽ dễ mường tượng kết quả hơn
@anpha3 : bạn nhớ join các Line rời rạc lại như npham đã ghi chú trước khi thực hiện lisp (^ ^)


Thanks bác Xeku.
Như đã nói thì nếu cả ngàn cọc thì chọn text khó lắm.
Nếu chọn Automatic thì text phải để theo chuẩn riêng, không thì phải chọn ssget, mà chọn ssget thì phải zoom nhỏ lại hết trong 1 trang, mà zoom nhỏ quá thì khi select sẽ lộn qua text khác. Cái nì tớ bị rồi, Không biết bác có cao kiến gì không?

Đoạn code trên chỉ là thô thôi, dùng được còn phải nhiều thứ lắm. Ví dụ cái PLine vẽ lôn ngược là nó cũng lộn đầu theo :D
p/s: KC & CD đã cách nhau bằng dấu "," rồi chứ bác? Theo định dạng csv.
  • 0

#14 ketxu

ketxu

    Copier - Paster - Editor

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

Đã gửi 26 September 2011 - 01:50 PM

SSget x bác ạ, vì text chứa thông tin cần thiết chính là 2 thằng xoay đứng với các đặc tính demo như ketxu liệt kê ở bên trên. Ngoài ra, khi xét tập Text đứng, bao giờ cũng có 1 cặp tương ứng trên dưới ^^
  • 0

Thành viên nhóm CadMagic.
Mời bạn ghé thăm facebook nhóm - Page viết lisp theo yêu cầu  :
CAD MAGIC


#15 npham

npham

    biết lệnh rotate

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

Đã gửi 26 September 2011 - 02:06 PM

SSget x bác ạ, vì text chứa thông tin cần thiết chính là 2 thằng xoay đứng với các đặc tính demo như ketxu liệt kê ở bên trên. Ngoài ra, khi xét tập Text đứng, bao giờ cũng có 1 cặp tương ứng trên dưới ^^


Xét về tổng quát, 1 file trắc dọc có 2 hàng text đứng, 2 hàng text nằm. Ngoài ra 1 file chứa 2 , 3 trắc dọc thì làm sao hở bác?
Cả 1000 cọc rủi nhầm 1 fát không biết đâu mà lần.
  • 0

#16 ketxu

ketxu

    Copier - Paster - Editor

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

Đã gửi 26 September 2011 - 02:17 PM

KHông phải chuyên ngành của e, nhưng để tránh việc này cũng không phải khó. Các tập text sẽ được sắp xếp theo cặp đôi. Trường hợp đáng ngại nhất là người vẽ sắp các mảnh trắc dọc đều tăm tắp, lúc đó e để ý thấy cặp text cuối cùng có đường Line hêt trắc dọc bên phải, ta kiểm tra điều kiện này thôi .
Như e đã nói, cách này sẽ khiến lisper rất đau đầu, tuy nhiên kết quả thi thật khó ngờ (tùy thuộc vào các điều kiện ràng buộc) ^^
Nếu chọn Line, Pline như bác thì hãy thêm điều kiện nối tất cả các Line layer 0 màu blue, fuzz = 0 trước, vì nếu cái này làm bằng tay thì cũng lâu lắm lắm hà. Sau đó lại làm việc với tập này, không thèm quan tâm đến Text nữa. Cách này của bác thậm chí còn nhanh hơn nữa
Ngoài ra, bác cũng có thể thay vì chọn text thì chọn tất cả Line layer 0 màu 8 và xử lý.
Bản vẽ OP đưa ra có quá nhiều phương án giải quyết, vì không có ma số và điều kiện ràng buộc rõ ràng ^^
  • 0

Thành viên nhóm CadMagic.
Mời bạn ghé thăm facebook nhóm - Page viết lisp theo yêu cầu  :
CAD MAGIC


#17 vetgo

vetgo

    biết vẽ polygon

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

Đã gửi 25 May 2012 - 05:49 PM

Thực ra cái này làm theo kiểu chọn text rồi xuất ra thì cũng đơn giản, nhưng như chủ thớt nói có mặt cắt lên tới cả 1000 cọc thì việc chọn text sẽ vô cùng khó khăn.

Có cách này nếu chủ thớt đồng ý thì test thử đọan code dưới đây xem sao.
- Chọn đường tự nhiên ( phải là 1 polyline , không để từng line rời rạc)
- Cho tỷ lệ ngang (có thể mặc định)
- Cho tỷ lệ đứng (có thể mặc định)
- Chọn cái text chứa cao độ cọc đầu

=> Xuất ra file

Đoạn code dưới đây là đoạn thô, nếu sử dụng được thì hoàn thiện thêm
................


Cái Lisp của bác khá hay. Nhưng bác có thể cho xuất ra text theo cột ở trong file cad đó luôn được không? Làm như vậy sẽ thực hiện được việc lặp cho nhiều trắc ngang trong cùng 1 file. Như thế tiện lợi hơn. Sau khi xong sẽ gom các text đó rồi xuất sang excel là ổn!
  • 0
Nếu nội dung post là có ích, xin tick + để thăng hàm lên lương...