Đến nội dung


Hình ảnh

nhập 2 text


  • Please log in to reply
25 replies to this topic

#21 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 18 March 2009 - 07:38 AM

Góp ý tí, nếu có gì xin ðừng giận nhé.
Bạn dùng cái trật tự này
(setq te1 (ssname ss i))
(setq te2 (ssname ss (1+ i)))
là rất nguy hiểm vì nếu nhý cái text tạo nên cao ðộ không ðýợc sinh ra cùng một quy luật mà ðýợc copy lại từ những text ðã có rối chỉnh lại giá trị hay bản vẽ có ðoạn ðýợc insert vào thêm hay những lý do khác thì cái trật tự trýớc sau khó mà phân biệt ðýợc. Trong ngành bản ðồ, theo nhý tôi biết thì các ðiểm ðộ cao thýờng ðýợc "tãng dày" trong giai ðoạn biên tập chứ chýa hẳn ðýợc ðo ðạc hoàn toàn.

Mình làm theo cách là phải cón point gốc. Lấy toàn bộ piont làm tập hợp chọn. lấy tọa độ point chọn về phía trước 1 chút gán cho texttruoc. chọn về phía sau 1 chút gán cho textsau. Viết ra text mới bắng cách nối hai anh này lại thêm dấu chấm vào giửa.
Cái bản vẻ của bạn này chạy mất hơn 5 phút (nghe bác Bình bảo có mấy giây thì phục thật).
Cách của mình có vấn đề là quanh point nếu không chọn được text thì bị lỗi và dừng lại. Các text gần nhau thì kết quả đọc bị sai.
  • 2

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


#22 tdvn

tdvn

    biết lệnh rotate

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

Đã gửi 18 March 2009 - 08:27 AM

Mình làm theo cách là phải cón point gốc. Lấy toàn bộ piont làm tập hợp chọn. lấy tọa độ point chọn về phía trước 1 chút gán cho texttruoc. chọn về phía sau 1 chút gán cho textsau. Viết ra text mới bắng cách nối hai anh này lại thêm dấu chấm vào giửa.
Cái bản vẻ của bạn này chạy mất hơn 5 phút (nghe bác Bình bảo có mấy giây thì phục thật).
Cách của mình có vấn đề là quanh point nếu không chọn được text thì bị lỗi và dừng lại. Các text gần nhau thì kết quả đọc bị sai.

Lệnh chọn đối tượng của cad hữu ích nhưng đôi lúc mất thời gian và kém chính xác. Nếu dùng nhiều lần quá trong một lệnh thì không tiện
Cái list mình viết chạy khoảng 4'', nhưng còn tùy máy
  • 0

#23 phamthanhbinh

phamthanhbinh

    biết lệnh adcenter

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

Đã gửi 18 March 2009 - 06:30 PM

Góp ý tí, nếu có gì xin ðừng giận nhé.
Bạn dùng cái trật tự này
(setq te1 (ssname ss i))
(setq te2 (ssname ss (1+ i)))
là rất nguy hiểm vì nếu nhý cái text tạo nên cao ðộ không ðýợc sinh ra cùng một quy luật mà ðýợc copy lại từ những text ðã có rối chỉnh lại giá trị hay bản vẽ có ðoạn ðýợc insert vào thêm hay những lý do khác thì cái trật tự trýớc sau khó mà phân biệt ðýợc. Trong ngành bản ðồ, theo nhý tôi biết thì các ðiểm ðộ cao thýờng ðýợc "tãng dày" trong giai ðoạn biên tập chứ chýa hẳn ðýợc ðo ðạc hoàn toàn.

Chào bác tdvn,
Hì hì, thú thực mình là dân me cha ni cô, có biết tí gì về ngành đo đạc bản đồ đâu ạ. Bác chỉ cho cái lỗi tày đình này thật may quá chứ không bạn thangkho mắng mình chết.
Thực ra mình chỉ dựa trên suy luận của mình là các cặp text này thế nào cũng phải được nhập liên tiếp nhau vì nó thể hiện gía tri cao độ mà thôi, chứ nếu mà người vẽ cứ nhập loạn theo kiểu bác nói là lisp này sai ngay. Vì suy luận vậy và kiểm tra thử các mả dxf của một vài cặp text mẫu thấy đúng nên mình quy nạp nó luôn cho toàn bộ các thằng khác. Tếu thật bác nhỉ.
Khi chạy thử với cái bản vẽ của bạn thangkho và kiểm tra kết quả ở một số vùng thấy ngon là mình mừng húm, post lên luôn chứ có biết là dại đâu ạ.
Mà cái lisp này cũng chỉ phù hợp với cái bản vẽ đó thôi vì các cặp text này nằm riêng trên lớp Textcaodomia chứ các bản vẽ khác thì chả biết nó có vậy không, nó lại nằm trên lớp củ chuối là lisp cũng không dùng được. Khi đó lại phải viết thêm cái khúc lấy tên lớp của các cặp text này đã rồi mới chọn đối tượng được bác nhỉ.
Túm lại là cái lisp của mình mới chỉ là thử tìm cách giải quyết nhiệm vụ của bạn thangkho trên một bản vẽ cụ thể của bạn ấy post chứ chưa phải là đã hoàn chỉnh để có thể dùng trong mọi trường hợp tương tự bác nhể. Do chưa hiểu về cách làm việc của các bác ngành đo đạc bản đồ nên mong bác chỉ dạy thêm.
Mình xin thành thật nhận thiếu sót và rút kinh nghiệm, mong các bác tha cho cái sự ấu trĩ của mình. Hì hì.

Mình cũng đã đọc cái gợi ý của bác nhưng do kiến thức về các hàm vl- ... và vlax- .... của mình còn mỏng quá nên không dám đụng vô. Bác thông cảm nhé chứ chả phải mình không quan tâm đến ý kiến của bác đâu. Hiện mình cũng đang cố gắng đọc hiểu cái lisp bác post đấy. Có chỗ nào chưa thủng thì mình sẽ làm phiền bác nhé.

Chúc bác luôn vui khỏe,

@thangkho: Bạn nên lưu ý cái bác tdvn đã post. Cái lisp của mình chỉ xài được với điều kiện các text cao độ phải được nhập theo từng cặp liên tiếp nhau và nằm trên lớp Textcaodomia thôi nhé. Việc bạn muốn text sau khi sửa nẳm ở đúng vị trí nào thì bạn chỉ cần thay đổi tọa độ của điểm đó vào vị trí điểm po trong hàm (command "text" po hei ........) mà thôi.
Do mình chưa rõ cái quy luật giữa vị trí điểm và vi trí đặt text cao độ của điểm trên bản vẽ hiện tại nên chưa giúp bạn ngay được. Để mình tìm hiểu thêm cái quy luật này rồi sẽ bổ sung sau nhé.

@bác Duy: Bác thử xem chứ mình chả dám nói điêu đâu. Là cái lisp nó chạy chứ mình có chạy đâu mà nói ngoa làm chi. Mà mình nói là 30 giây chứ chả phải là mấy giây bác ạ. Hì hì bác cho mình "kãi thật" một tí nhé.
  • 0
Chúc các quý Anh trên diễn đàn luôn khỏe, đẻ thêm được nhiều thứ để mót.

#24 phamthanhbinh

phamthanhbinh

    biết lệnh adcenter

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

Đã gửi 19 March 2009 - 08:30 PM

Cảm ơn anh nhiều. Anh có thể chỉnh lại phần text sau khi đổi có dạng jutify là left trùng với điểm point có layer là "TEXTCAODOCOC" ko?

Chào bạn thangkho,
Của bạn đây, nhưng bạn lưu ý những điều bác tdvn đã post. Mình đã chạy thử với cái bản vẽ của bạn post thì OK, nhưng với các bản vẽ mà người làm nhập text cao độ không theo quy luật như bản vẽ bạn post là thua đấy. Vì mình còn non nên chưa xử lý được tình trạng như bác tdvn đã nêu. Mình sẽ nghiên cứu thêm, nếu tìm ra phương pháp khả dĩ sẽ trao đổi với bạn sau.
Cái lisp này chạy hết bản vẽ của bạn mất chừng 1phút hơn, Mình vẫn dựa trên suy luận cũ và chỉ bổ sung phần chọn điểm đặt text mà thôi. Để làm điều này mình dựa trên các điểm mốc trên lớp TEXTCAODOCOC của bạn có cùng tọa độ y với các text cao độ trên lớp TEXTCAODOMIA. Do vậy nếu như với các bản vẽ khác mà người vẽ không làm đúng quy luật này thì chắc lisp này cũng thua luôn. Do mình không phải dân đo dạc bản đồ nên không hiểu nhiều về công việc của bạn, chỉ tự suy luận từ bản vẽ bạn post để làm lisp thôi nên có thể chưa đúng ý bạn lắm. Bạn có thể tham khảo và dựa vào cái lisp của mình để cải tạo cho phù hợp với yêu cầu của bạn. Nếu có chỗ nào chưa hiểu thì hãy post lên ình sẽ giải thích rõ vì sao mình làm vậy.
Rất mong bạn sử dụng được chút nào cái lisp của mình.
(defun c:n2t()
(setq a (cdr (assoc 8 (entget (car (entsel "\n Chon text thuoc mot cap text can noi "))))))
;;; Chu y : Tat ca cac cap text can noi phai nam tren cung mot lop va duoc nhap lien tiep

(setq b (cdr (assoc 8 (entget (car (entsel "\n Chon diem co cao do can noi "))))))
;;; Chu y: Tat cac cac diem co cao do can noi phai nam tren cung mot lop

(setq ss (ssget "X" (list (cons 0 "TEXT") (cons 8 a)))
n (sslength ss)
i 0
ssp (ssget "X" (list (cons 0 "POINT") (cons 8 b)))
m (sslength ssp)

)

(While (< i n)
(setq te1 (ssname ss i))
(setq te2 (ssname ss (1+ i)))
;;;(setq p1 (cdr (assoc 10 (entget (ssname ss (+ i 2))))))
(setq ss1 (entget te1))
(setq ss2 (entget te2))

(setq nd1 (cdr (assoc 1 ss1)))
(setq nd2 (cdr (assoc 1 ss2)))
(setq st (cdr (assoc 7 ss1)))

(setq po (cdr (assoc 10 ss2)))
(setq hei (cdr(assoc 40 ss1)))
(setq j 0)

(while (< j m)
(setq p1 (cdr (assoc 10 (entget (ssname ssp j)))))
(if (= (cadr p1) (cadr po))
(progn
(Command "style" st "" "0" "" "" "n" "n" "n")
(Command "text" "j" "bl" p1 hei "0" (strcat nd2 "." nd1))
(command "erase" te1 "")
(command "erase" te2 "")
;;; (command "point" p1)
)
)
(setq j (1+ j))
)

(setq i (+ i 2))
)

(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.

#25 xuongrong68

xuongrong68

    Chưa sử dụng CAD

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

Đã gửi 05 June 2009 - 11:24 PM

nếu bạn cần gấp thì gởi file cho mình, mình sẽ giúp bạn
Congtuanctn@ymail.com
  • 0

#26 xuongrong68

xuongrong68

    Chưa sử dụng CAD

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

Đã gửi 05 June 2009 - 11:28 PM

xuongrong68@gmail.com
nhanh chóng, chỉ cần 1 phút là xong
  • 0