Đến nội dung


Hình ảnh
- - - - -

[hỏi] viết lisp lấy tọa độ điểm và tên điểm


  • Please log in to reply
47 replies to this topic

#41 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 09 May 2012 - 11:23 AM

sao tui dùng không được báo lỗi này: (acet-str-find <find> <string> [<ignore-case> [<use-regexp>]])
; error: ADS request error
các bác xem giúp tui mò không ra.

Hề hề hề,
Hổng biết Bạn dùng cho Cad hay cho topo và CAD của bạn đã cài express tools chưa nhỉ???
Bạn có thể post cái bản vẽ bạn đã chạy thử trên đó lên để mình check lỗi. Nhớ lưu về Cad2004 vì mình toàn sử dụng đồ cổ....
  • 0
Chúc các quý Anh trên diễn đàn luôn khỏe, đẻ thêm được nhiều thứ để mót.

#42 dunguss3581

dunguss3581

    biết lệnh rotate

  • Advance Member
  • PipPipPip
  • 139 Bài viết
Điểm đánh giá: 5 (bình thường)

Đã gửi 09 May 2012 - 11:51 AM

Hề hề hề,
Hổng biết Bạn dùng cho Cad hay cho topo và CAD của bạn đã cài express tools chưa nhỉ???
Bạn có thể post cái bản vẽ bạn đã chạy thử trên đó lên để mình check lỗi. Nhớ lưu về Cad2004 vì mình toàn sử dụng đồ cổ....

http://www.cadviet.c..._drawing1_6.dwg tui cài express rồi
  • 0

#43 dunguss3581

dunguss3581

    biết lệnh rotate

  • Advance Member
  • PipPipPip
  • 139 Bài viết
Điểm đánh giá: 5 (bình thường)

Đã gửi 09 May 2012 - 12:00 PM

theo tui đoán là thiếu các đối tượng mã điểm. nếu gặp trường hợp chỉ có cao độ không có các đối tượng mã điểm và số thứ tự thì các bác để trống trong file xuất ra nhé. nhưng vẫn có giá trị cao độ.
  • 0

#44 ketxu

ketxu

    Copier - Paster - Editor

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

Đã gửi 09 May 2012 - 12:42 PM

Thông báo trên là thông báo sai cú pháp hoặc đối số cho hàm ACET, cụ thể trong lisp là acet-str-find
  • 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


#45 dunguss3581

dunguss3581

    biết lệnh rotate

  • Advance Member
  • PipPipPip
  • 139 Bài viết
Điểm đánh giá: 5 (bình thường)

Đã gửi 09 May 2012 - 01:04 PM

Gọi là xét điều kiện cho vui, chứ khi explode thằng này ra chắc chắn các entity đã sắp xếp theo thứ tự rồi bác ạ. Thằng đầu là circle, 2 là trắng, 3 vàng 4 xanh, lấy theo thứ tự cũng được :D. Bác lấy entnext kiểm tra là thấy
Cái này e gặp khi xử lý cắt đôi 1 dimension ^^

bác cho em hỏi nhé: nếu trong trường hợp vàng không có hoặc xanh không có hoặc không có vàng và xanh thì có phải xét điều kiện chứ. phải không bác
  • 0

#46 ketxu

ketxu

    Copier - Paster - Editor

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

Đã gửi 09 May 2012 - 01:30 PM

Tất nhiên rồi :) Cái đó do bạn thôi. Trong trường hợp có khả năng có điểm k giống form mẫu thì bạn phải đặt vấn đề. Lisp gì gì mình viết bên trên hình như đã xét nếu 1 thằng là màu gì đó thì ...abc... Muốn thêm chỉ cần thêm vào đó thôi, cũng không phải vấn đề
  • 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


#47 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 09 May 2012 - 02:03 PM

bác cho em hỏi nhé: nếu trong trường hợp vàng không có hoặc xanh không có hoặc không có vàng và xanh thì có phải xét điều kiện chứ. phải không bác

Hề hề hề,
Cái bạn đoán chả sai tí nào.
Lỗi là do cái cấu tạo acad_proxy_entity của bạn chả hề có các mã điểm và số thứ tự điểm như bản vẽ trước bạn đã post. Đồng thời cấu tạo của nó khác hẳn, vị trí tương đối của diểm đặt text cao độ so với circle không giống như bản vẽ trước.
Vì thế nên khi lọc text nó đã loại tuốt luốt và không hề có được các biến bạn cần và hàm acet-str-find báo lỗi bạn ạ.
Bạn thử dùng lisp đã sửa dưới đây để cho cái bản vẽ của bạn gửi xem đã thỏa mãn yêu cầu chưa nhé.


(defun c:gifpr (/ ss n plst i en el p p1 ma sst k tmp fw)
(vl-load-com)
(setvar "cmdecho" 0)
(setq ss (ssget (list (cons 0 "acad_proxy_entity")))
n (sslength ss)
plst (list)
i 0)

(setq tmp (getfiled "Chon file xuat Text goc" (getvar "dwgprefix") "csv" 1))
(if tmp
(progn
(setq fw (open tmp "w") )
(command "undo" "be")
(while (< i n)

(setq en (entlast))
(command "explode" (ssname ss i) )
(while (setq en (entnext en))
(setq el (entget en))
(if (= (cdr (assoc 0 el)) "CIRCLE")
(setq p (cdr (assoc 10 el)))
)
(if (= (cdr (assoc 0 el)) "MTEXT")
(progn
(setq p1 (cdr (assoc 10 el)))
(if (equal (- (cadr p) (cadr p1)) 0.15 0.001)
(setq ma (cdr (assoc 1 el)))
(setq ma "none")
)
(if (equal (- (cadr p1) (cadr p)) 1.15 0.001)
(setq stt (cdr (assoc 1 el)))
(setq stt "unknown")
)
)
)

)
(if (/= ma "none")
(progn
(setq k (ACET-STR-FIND "\\l" ma))
(setq ma (substr ma (+ k 2) ))
)
)
(if (/= stt "unknown")
(progn
(setq k (ACET-STR-FIND "\\l" stt))
(setq stt (substr stt (+ k 2) ))
)
)
(setq i (1+ i))
(setq str (strcat stt (chr 44) ma (chr 44) (rtos (car p) 2 2) (chr 44) (rtos (cadr p) 2 2) (chr 44) (rtos (caddr p) 2 2)) )
(write-line str fw)
)
(command "undo" "e")
(command "undo" 1)
(close fw)
)
)

(princ)
)
Nên nhớ rằng nếu có được thì mình cũng chỉ đảm bảo nó dùng được cho hai loại đối tượng Acad_proxy_entity của hai bản vẽ bạn đã post mà thôi. Các Acad_proxy_entity khác mà bạn có thì mình không biết nên bạn hãy tự điều chỉnh nếu có thể khi gặp. Còn nếu không điều chỉnh được thì hãy post lên diễn đàn mình sẽ xem xét xem có thể điều chỉnh được không. Lỗi không phải của lisp bạn nhé.

Bài viết đã được chỉnh sửa nội dung bởi phamthanhbinh: 09 May 2012 - 02:23 PM
bổ sung lisp theo yêu cầu mới.

  • 1
Chúc các quý Anh trên diễn đàn luôn khỏe, đẻ thêm được nhiều thứ để mót.

#48 dunguss3581

dunguss3581

    biết lệnh rotate

  • Advance Member
  • PipPipPip
  • 139 Bài viết
Điểm đánh giá: 5 (bình thường)

Đã gửi 10 May 2012 - 12:29 AM

các bac nghiên cứu giúp em sao cho lisp không phụ thuộc vào màu, cỡ chữ, khoảng cách từ text tới dấu chấm tròn, hay vị trí của các text. trong 4 thành phần có 2 thành phần bắt buộc là chấm tròn và giá trị cao độ. còn 2 text stt và mã điểm có thể có có thể không. đó là điều kiện đầu vào. file VD:
  • 0