Đến nội dung


Hình ảnh
- - - - -

[Yêu cầu] viết lisp về TEXT .....?


  • Please log in to reply
5 replies to this topic

#1 gasmanc

gasmanc

    biết vẽ line

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

Đã gửi 18 June 2011 - 03:47 PM

Nhờ các cao thủ giúp đỡ!

Mình có file cad như sau: http://www.cadviet.c.../3/vi_du_01.dwg
Trong đó mình có tập hợp các điểm cao trình được mô tả bằng các nhóm text. Các nhóm text có cấu tạo bởi 3 đối tượng, text A, dấu chấm point, text B. (Chú ý rằng điểm cao trình có tọa độ trùng với tọa độ của dấu chấm point)
Chân text, dấu chấm point và đầu text B nằm trên cùng 1 đường thẳng (cùng giá trị Y); và cách nhau lần lượt các khoảng bằng 0.4; cao độ text = 2.

Mong các cao thủ viết giúp mình lisp có thể thực hiện các yêu cầu sau:
1. Chọn tất cả các nhóm text ở trên, sử dụng lisp biến 2 đối tượng rời rạc A1,B1; A2, B2; ...An, Bn thành các số thập phân A1.B1; A2.B2;...An.Bn với dấu chấm trong text trùng với dấu chấm point ban đầu.
2. Từ các text được nối lại ở trên, cộng hoặc trừ giá trị các text này cho cùng 1 hằng số. (bước này có thể ko cần thiết, vì ta có thể đi đường vòng hơn bằng cách xuất text ra cell xử lý rồi xuất ngược vào cad, nhưng nếu lisp làm được thì quá tuyệt)
3. Từ tập hợp các text đã được xử lý ở bước 2 hoặc tập hợp text mới, tách thành các tập hợp text giống như ban đầu (Nghĩa là mỗi text A'.B' tách thành 3 đối tượng A',và B' có vị trí không dổi giống nhóm A,B ban đầu . xem thêm trong bản vẽ.

Mình biết trong diễn đàn đã có lisp nối text của giabach nhưng lisp này chỉ cho phép làm lần lượt với từng nhóm mà ko cho phép làm với tất cả. Như vậy sẽ rất mất thời gian khi số lượng nhóm text cần nối lại lên đến hàng nghìn nhóm. mặt khác, vị trí text không được như mong muốn của mình. vậy mong các bạn cải tiến giùm.

Xin chân thành cảm ơn!
  • 0

#2 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 18 June 2011 - 09:09 PM

Nhờ các cao thủ giúp đỡ!

Mình có file cad như sau: http://www.cadviet.c.../3/vi_du_01.dwg
Trong đó mình có tập hợp các điểm cao trình được mô tả bằng các nhóm text. Các nhóm text có cấu tạo bởi 3 đối tượng, text A, dấu chấm point, text B. (Chú ý rằng điểm cao trình có tọa độ trùng với tọa độ của dấu chấm point)
Chân text, dấu chấm point và đầu text B nằm trên cùng 1 đường thẳng (cùng giá trị Y); và cách nhau lần lượt các khoảng bằng 0.4; cao độ text = 2.

Mong các cao thủ viết giúp mình lisp có thể thực hiện các yêu cầu sau:
1. Chọn tất cả các nhóm text ở trên, sử dụng lisp biến 2 đối tượng rời rạc A1,B1; A2, B2; ...An, Bn thành các số thập phân A1.B1; A2.B2;...An.Bn với dấu chấm trong text trùng với dấu chấm point ban đầu.
2. Từ các text được nối lại ở trên, cộng hoặc trừ giá trị các text này cho cùng 1 hằng số. (bước này có thể ko cần thiết, vì ta có thể đi đường vòng hơn bằng cách xuất text ra cell xử lý rồi xuất ngược vào cad, nhưng nếu lisp làm được thì quá tuyệt)
3. Từ tập hợp các text đã được xử lý ở bước 2 hoặc tập hợp text mới, tách thành các tập hợp text giống như ban đầu (Nghĩa là mỗi text A'.B' tách thành 3 đối tượng A',và B' có vị trí không dổi giống nhóm A,B ban đầu . xem thêm trong bản vẽ.

Mình biết trong diễn đàn đã có lisp nối text của giabach nhưng lisp này chỉ cho phép làm lần lượt với từng nhóm mà ko cho phép làm với tất cả. Như vậy sẽ rất mất thời gian khi số lượng nhóm text cần nối lại lên đến hàng nghìn nhóm. mặt khác, vị trí text không được như mong muốn của mình. vậy mong các bạn cải tiến giùm.

Xin chân thành cảm ơn!

Hề hề hề,
Cao thủ hay thấp thủ thì chửa biết, nhưng mong bạn hãy nói rõ cái kết quả cuối cùng bạn cần là cái chi chi. Chứ nói lòng vòng như bạn thì thật là khó.
Bạn cần cái kết quả cuối cùng là: các text sau khi cộng trừ loằng ngoằng chi đó sẽ được tách trở thành 3 đối tượng như cũ
Nếu vậy thì cái việc phải viết lại text thành một hàng để làm cái chi ????
Tại sao lại cứ nhất thiết cái khoảng cách giữa point và các text là 0.4??? Thực tế trên bản vẽ bạn gửi lại không phải như vậy là vì sao???

Tốt nhất là bạn chỉ nên trình bày cái bạn có và kết quả bạn cần thôi, còn cách làm ra sao để có cái kết quả ấy là do các lisper sẽ quyết định. Như vậy sẽ thuận lợi cho người viết lisp hơn là cứ nhất thiết phải làm theo cái cách nghĩ của bạ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.

#3 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 June 2011 - 11:17 PM

Nhờ các cao thủ giúp đỡ!

Mình có file cad như sau: http://www.cadviet.c.../3/vi_du_01.dwg
Trong đó mình có tập hợp các điểm cao trình được mô tả bằng các nhóm text. Các nhóm text có cấu tạo bởi 3 đối tượng, text A, dấu chấm point, text B. (Chú ý rằng điểm cao trình có tọa độ trùng với tọa độ của dấu chấm point)
Chân text, dấu chấm point và đầu text B nằm trên cùng 1 đường thẳng (cùng giá trị Y); và cách nhau lần lượt các khoảng bằng 0.4; cao độ text = 2.

Mong các cao thủ viết giúp mình lisp có thể thực hiện các yêu cầu sau:
1. Chọn tất cả các nhóm text ở trên, sử dụng lisp biến 2 đối tượng rời rạc A1,B1; A2, B2; ...An, Bn thành các số thập phân A1.B1; A2.B2;...An.Bn với dấu chấm trong text trùng với dấu chấm point ban đầu.
2. Từ các text được nối lại ở trên, cộng hoặc trừ giá trị các text này cho cùng 1 hằng số. (bước này có thể ko cần thiết, vì ta có thể đi đường vòng hơn bằng cách xuất text ra cell xử lý rồi xuất ngược vào cad, nhưng nếu lisp làm được thì quá tuyệt)
3. Từ tập hợp các text đã được xử lý ở bước 2 hoặc tập hợp text mới, tách thành các tập hợp text giống như ban đầu (Nghĩa là mỗi text A'.B' tách thành 3 đối tượng A',và B' có vị trí không dổi giống nhóm A,B ban đầu . xem thêm trong bản vẽ.

Mình biết trong diễn đàn đã có lisp nối text của giabach nhưng lisp này chỉ cho phép làm lần lượt với từng nhóm mà ko cho phép làm với tất cả. Như vậy sẽ rất mất thời gian khi số lượng nhóm text cần nối lại lên đến hàng nghìn nhóm. mặt khác, vị trí text không được như mong muốn của mình. vậy mong các bạn cải tiến giùm.

Xin chân thành cảm ơn!

Mình có sẳn cái này dùng nối.

(Defun c:HTR ()
(if (null kichthuocchontex)(setq kichthuocchontex "1"))
(setq kichthuocchontext (atof kichthuocchontex))
(setvar "MODEMACRO" "CHINH CAO DO HIEN TRANG")
(command "-layer" "new" "SOCAODOSUACHUA" "color" "50" "SOCAODOSUACHUA" "")
(princ "\nPHAM QUOC DUY Binh Son - Quang ngai")
(Princ "\nHay chon vung :")
(setq XX (ssget '((0 . "POINT,CIRCLE"))))
(setq L 0)
(setq M (sslength XX))
(while (< L M)
(setq DT (ssname XX L))
(setq DT (entget DT))
(setq TEXT (cdr (assoc 10 DT)))
(setq luubatdiem (getvar "osmode"))
(setvar "osmode" 0)
(setq x (car TEXT))
(setq y (cadr TEXT))
(setvar "osmode"luubatdiem)
(setq luubatdiem (getvar "osmode"))
(command "-layer" "set" "SOCAODOSUACHUA" "")
(setvar "osmode" 0)
(command "select" "W" (list (+ x 0)(- y 0)) (list (- x (* kichthuocchontext 10))(+ y (* kichthuocchontext 3))) "" "")
(setq SS (ssget "p" '((0 . "TEXT"))))

(setq DTDTT (ssname SS 0))
(setq DTTT (entget DTDTT))
(setq NOIDUNGVIET (cdr (assoc 1 DTTT)))

(command "select" "W" (list (+ x (* kichthuocchontext 10))(- y 0)) (list (+ x 0)(+ y (* kichthuocchontext 3))) "" "")
(setq yy (ssget "p" '((0 . "TEXT"))))

(setq DTDTTS (ssname yy 0))
(setq DTTTS (entget DTDTTS))
(setq NOIDUNGVIETS (cdr (assoc 1 DTTTS)))

(setq chuoivietlai (strcat NOIDUNGVIET "." NOIDUNGVIETS))
(command "TEXT" "c" (list (+ x 0)(- y 0)) (* kichthuocchontext 1) 0 chuoivietlai)
(setq NOIDUNGVIET nil)
(setq NOIDUNGVIETS nil)
(setq chuoivietlai nil)
(setvar "osmode"luubatdiem)
(setq L (1+ L))
)
(setvar "MODEMACRO" "**CHUC BAN LAM VIEC HIEU QUA** PHAM QUOC DUY - BINH SON - QUANG NGAI")
(Princ)
)
-Kết quả sẽ viết lên layer SOCAODOSUACHUA. Phải kiểm tra chứ có khi text dính thì nó ra kết quả sai nhé. Đây là lisp mình làm sẳn để nối text do lúc xưa các ông tướng địa hình hay ma số dẩn đến kết quả z của các point không trúng.
-Trường hợp của bạn thì mình đoán là ma thêm khối lượng địa hình. nếu tin tưởng z của point thì viết líp như này hay hơn.
+nâng hoặc hạ z của point giá trị do mình nhập.
+Đọc z của point viết ra text trước và sau.
  • 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


#4 thanhduan2407

thanhduan2407

    biết lệnh adcenter

  • Advance Member
  • PipPipPipPipPipPipPip
  • 993 Bài viết
Điểm đánh giá: 223 (khá)

Đã gửi 05 August 2014 - 01:18 PM

Người viết xong không có người nhận. Thật mất công cho bác Duy quá.


  • 0



Tôi là con kiến bò trên sa mạc kiến thức bao la. Biển học thật rộng lớn







#5 Hoan1111

Hoan1111

    biết lệnh adcenter

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

Đã gửi 05 August 2014 - 02:37 PM

Người viết xong không có người nhận. Thật mất công cho bác Duy quá.

 

Chắc chủ thớt bỏ nghề, đi bán ...thịt rồi, thật buồn khi người ta không sống được với nghề được đào tạo,  bác ạ!


  • 0

66 Câu Phật Học Cho Cuộc Sống : http://ngocchinh.com...-cho-cuoc-song/

Gió đưa cây cải về trời / Rau răm ở lại chịu lời đắng cay...

 

 


#6 Hantinhsaycad

Hantinhsaycad

    biết lệnh adcenter

  • Members
  • PipPipPipPipPipPipPip
  • 1073 Bài viết
Điểm đánh giá: 376 (khá)

Đã gửi 05 August 2014 - 03:29 PM

Nếu bạn gửi tin nhắn với nhiều lỗi chính tả, và ngữ pháp lủng củng, thì ngay cả hình ảnh bạn đẹp trai mấy cũng khó nhận được trả lời

Nguồn :http://tinhhinh.vn/v...loi-ban-d13773/


  • 0

Đừng để một ai chẳng nhận được gì khi rời chỗ bạn, cho dù bạn biết rằng không bao giờ gặp lại.

Ngạn ngữ Pháp