Đến nội dung


Hình ảnh
* * * - - 8 Bình chọn

Viết lisp theo yêu cầu [phần 2]


  • Chủ đề bị khóa Chủ đề bị khóa
3783 replies to this topic

#481 eng-hiep

eng-hiep

    biết lệnh erase

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

Đã gửi 09 December 2009 - 09:45 AM

Bạn cung cấp dữ liệu đầu vào đơn giản quá.
Đây là Lisp xuất ra tọa độ của các point dưới dạng bảng (table) ở dạng đơn giản.

(defun c:po(/ coor doc pt siz);point out
(vl-load-com)
(setq doc (vla-get-ActiveDocument(vlax-get-Acad-Object)))
(print "\nChon Point: ")
(if (ssget '((0 . "POINT")))
(progn
(setq pt (getpoint "\nDiem dat Bang :" )
siz (* (getvar "dimtxt")(getvar "dimscale")) )
(vlax-for e (vla-get-ActiveselectionSet doc)
(setq Coor (vl-princ-to-string (vlax-safearray->list (variant-value (vla-get-Coordinates e)))) )
(vla-addtext (vla-get-modelspace doc) Coor (vlax-3d-point pt) siz)
(setq pt (polar pt (/ pi -2) (* 2.0 siz)))
);for
)
)
(princ))

Thx bác đã quan tâm :cheers:

Em đã dùng thử lisp của bác rồi -rất hay .Nhưng vẫn chưa được như mong muốn : Ý em là khi ta pick vào 1 point thì chương trình sẽ kêu ta đặt tên cho point đó , sau khi chọn xong tất cả các point cần xuất tọa độ thì chương trình sẽ xuất các dữ liệu ấy ( Tên point , Tọa độ X ,Tọa độ Y ) dưới dạng bảng table (lisp của bác chỉ cho ra dưới dạng dấu ngoặc) .
  • 0

#482 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 09 December 2009 - 10:09 AM

Thx bác đã quan tâm :cheers:

Em đã dùng thử lisp của bác rồi -rất hay .Nhưng vẫn chưa được như mong muốn : Ý em là khi ta pick vào 1 point thì chương trình sẽ kêu ta đặt tên cho point đó , sau khi chọn xong tất cả các point cần xuất tọa độ thì chương trình sẽ xuất các dữ liệu ấy ( Tên point , Tọa độ X ,Tọa độ Y ) dưới dạng bảng table (lisp của bác chỉ cho ra dưới dạng dấu ngoặc) .


Bạn xem tại Đây xem có dùng được không. (vì cái này hướng dẩn dùng hơi rắc rối nên mình không post đi post lại nhiều lần)
  • 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


#483 trinhvqh

trinhvqh

    biết lệnh block

  • Members
  • PipPipPipPipPipPip
  • 408 Bài viết
Điểm đánh giá: 222 (khá)

Đã gửi 09 December 2009 - 11:02 AM

Thx bác đã quan tâm :D

Em đã dùng thử lisp của bác rồi -rất hay .Nhưng vẫn chưa được như mong muốn : Ý em là khi ta pick vào 1 point thì chương trình sẽ kêu ta đặt tên cho point đó , sau khi chọn xong tất cả các point cần xuất tọa độ thì chương trình sẽ xuất các dữ liệu ấy ( Tên point , Tọa độ X ,Tọa độ Y ) dưới dạng bảng table (lisp của bác chỉ cho ra dưới dạng dấu ngoặc) .


Bạn lại làm khó cho gia_bach rồi :cheers:
Autolisp mà bắt phải lập bảng table thì bó tay
…..
Mà cái chuyện xuất toạ độ là “chuyện nhỏ như con voi” đối với bản vẽ giao thông định vị
Với Autocad thì cách tốt nhất để làm điều này là dùng Block Attribute và Attribute Extraction xuất ra một File Exel. Sau đó copy Paste vào CAD.
………
Nếu bạn muốn một cách hoàn hảo hơn thì hãy tham khảo ACA của tôi
(File video)
http://www.cadviet.c...2/point_tag.rar
  • 1

#484 tnmtpc

tnmtpc

    biết dimcontinue

  • Members
  • PipPipPipPipPip
  • 370 Bài viết
Điểm đánh giá: 206 (khá)

Đã gửi 09 December 2009 - 11:14 AM

Chào thiep
Nếu thiep sử dụng từ "san bằng" thì bài toán trở nên đúng đắn. Còn nếu không sử dụng từ "san bằng" thì point rất dễ nhận cao độ Z là Text của thằng "hàng xóm". Lisp TIMGAN của bác Hoành không thể áp dụng đúng trong trường hợp của bài toán không gian 3D trong trường hợp này. Phải nhờ tới điều kiện "san bằng để giải quyết.
Tuy nhiên, nếu mà "san bằng" như vậy thì không thể Move các point về cao độ của điểm chèn Text được vì cao độ của điểm chèn Text và điểm chèn Point được đưa về mặt phẳng 0.0 rồi

Đây là Lisp mà Tue_NV viết theo ý của thiep :
1. "San bằng" độ cao của tất cả text cao độ và point về mặt phẳng 0.0
2. Sử dụng hàm TIMGAN để tìm Text gần point nhất (vì có thể giữa point và Text có khoảng hở nhất định nào đó)
3. Dựa vào nội dung của Text số : đây là độ cao -> theo ý của thiep : nâng cả text độ cao và point lên độ cao của nội dung text số
Cảm ơn thiep đã gợi ý cho Tue_NV hoàn thành code này. Nếu có gì chưa đúng lắm các bạn có thể góp ý để mình chỉnh sửa lại. Thanks

@ tnmtpc : Theo Tue_NV suy luận thì trước khi sử dụng Lisp mà Tue_NV đã viết thì bạn đã sử dụng cái Lisp di chuyển các text sao cho điểm chèn text trùng các point tương ứng rồi, để cho các point và Text trùng nhau rồi, phải không bạn tnmtpc? -> Cái Lisp đó cũng chính là bản chất của Lisp TIMGAN đấy.

Đây là code mà Tue_NV đã viết lại theo ý kiến của bạn thiep


(defun c:MPT(/ ss ss2 i j lis p p2 textgan entextgan Ztextgan ent entp
lay_point lay_txt)
;copyright by Tue_NV
(command "undo" "be")

(if (= (cdr (assoc 0 (entget
(setq ename (car (entsel "\nChon Point de lay Layer chua POINT : ")))
))) "POINT")
(setq lay_Point (cdr(assoc 8 (entget ename))))
)

(if (= (cdr (assoc 0 (entget
(setq ename (car (entsel "\nChon TEXT de lay Layer chua TEXT : ")))
))) "TEXT")
(setq lay_Txt (cdr(assoc 8 (entget ename))))
)

(setq ss (ssget "X" (list (cons 0 "TEXT") (cons 8 lay_txt)))
i 0 j 0 lis (list) )
(setq ss2 (ssget "X" (list (cons 0 "POINT") (cons 8 lay_Point))) )
(ZO ss) (ZO ss2)

(while (< i (sslength ss))
(setq entp (entget (ssname ss i)) )
(setq p (cdr(assoc 10 entp)))
(setq lis (append lis (list p) )
)

(setq i (1+ i))
)

(while (< j (sslength ss2))
(setq ent (ssname ss2 j))
(setq p2 (cdr(assoc 10 (entget ent))))
(setq textgan (ssget "X"
(list
(cons 0 "TEXT")
(cons 8 lay_txt)
(cons 10 (timgan p2 lis))
)))
(setq entextgan (ssname textgan 0))
(if (distof
(cdr(assoc 1 (entget entextgan) )) 2)
(setq Ztextgan
(distof (cdr(assoc 1 (entget entextgan) )) 2)
)
(setq Ztextgan 0.0)
)
(command "move" ent entextgan "" (list 0 0 (caddr p2))
(list 0 0 Ztextgan)
)
(setq j (1+ j))
)
(command "undo" "end")
)
;
(defun round(so tp)
(setvar "dimzin" 0)
(atof (rtos so 2 tp))
)
;
(defun ZO(ss / i ent po)
(setq i 0)
(while (< i (sslength ss))
(setq ent (entget(ssname ss i)))
(setq po (cdr(assoc 10 ent)))
(entmod (subst (list 10 (car po) (cadr po) 0.0)
(assoc 10 ent) ent
)
)
(setq i (1+ i))
)
)
;
(defun timgan (p lst / dmin ppluu)
(foreach pp lst
(setq d (distance p pp))
(if (or (not dmin) (> dmin d))
(setq dmin d
ppluu pp
)
)
)
ppluu
)

Mình download lisp về chạy thấy báo lỗi, hơn nữa có bất tiện là nếu di chuyển cho dấu chấm thập phân của text trùng point thì thì point bị "đè" dưới text không chọn được. Mình thấy lisp trước tuy thêm một bước tùy chọn ZT< ZC nhưng cũng có cái hay của nó
  • 0

#485 eng-hiep

eng-hiep

    biết lệnh erase

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

Đã gửi 09 December 2009 - 11:20 AM

………
Nếu bạn muốn một cách hoàn hảo hơn thì hãy tham khảo ACA của tôi
(File video)
http://www.cadviet.c...2/point_tag.rar

"Concurrent download limit exceeded" bác ui !!!
  • 0

#486 gia_bach

gia_bach

    biết lệnh adcenter

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 1431 Bài viết
Điểm đánh giá: 1425 (rất tốt)

Đã gửi 09 December 2009 - 02:32 PM

Bạn lại làm khó cho gia_bach rồi :cheers:
Autolisp mà bắt phải lập bảng table thì bó tay
…..
Mà cái chuyện xuất toạ độ là “chuyện nhỏ như con voi” đối với bản vẽ giao thông định vị
Với Autocad thì cách tốt nhất để làm điều này là dùng Block Attribute và Attribute Extraction xuất ra một File Exel. Sau đó copy Paste vào CAD.
………
Nếu bạn muốn một cách hoàn hảo hơn thì hãy tham khảo ACA của tôi
(File video)
http://www.cadviet.c...2/point_tag.rar

To : trinhvqh
Chuyện tính toán bằng cách xuất ra một File Exel. Sau đó copy Paste vào CAD. là chuyện cách đây 10 năm rồi.
Sao bác còn giới thiệu cho nguời khác làm!
Từ CAD 2008, có thể dùng DataLink để liên kết Exel với CAD.

Đúng là chuyện lập bảng table đối với Autolisp thì bó tay. Nhưng với VisualLisp thì là “chuyện nhỏ như con ...”

...........................
Nhưng vẫn chưa được như mong muốn : Ý em là khi ta pick vào 1 point thì chương trình sẽ kêu ta đặt tên cho point đó , sau khi chọn xong tất cả các point cần xuất tọa độ thì chương trình sẽ xuất các dữ liệu ấy ( Tên point , Tọa độ X ,Tọa độ Y ) dưới dạng bảng table (lisp của bác chỉ cho ra dưới dạng dấu ngoặc) .

To : eng-hiep
Như tui đã viết ở trên : Bạn cung cấp dữ liệu đầu vào đơn giản quá. Do đó kết quả đầu ra làm sao mà khá hơn đuợc!
Đằng nào thì LISP cũng không đạt yêu cầu thì "tội gì" phải viết chi tiết hóa. Viết càng nhiều thì càng dễ lạc đề.

Ở yêu cầu đầu tiên bạn đâu có viết : khi ta pick vào 1 point thì chương trình sẽ kêu ta đặt tên cho point đó ........
Có lẽ bạn nên đọc bài viết : Viết yêu cầu (Request) và trả lời (Response) như thế nào?

Với yêu cầu tạo bảng : ngoài những thuộc tính cơ bản (layer, color, linetype, ...) 1 thuộc tính quan trọng nhất (đối với tôi) là chiều cao Text.
chiều cao Text, bạn mới có thể tính đuợc chiều rộng Text, từ đó xác định chiều cao của 1 dòng, chiều rộng của 1 cột. Đó là các thông số cơ bản của 1 TABLE.
Không có các thông số này thì Bảng sẽ không có đuợc tính cân đối.

Gửi bạn LISP tạo Bảng Tọa độ các Point X, Y (chưa có tên Point)
Về ý tuởng khi ta pick vào 1 point thì chương trình sẽ kêu ta đặt tên cho point đó ........ , theo tui nên tách ra thành 1 Lisp độc lập.
(defun c:po(/ coor doc TblObj ov pt row rows ss vl)   ;point out
;; By : Gia Bach, Copyrightゥ December 2009 ;;
;; Contact : gia_bach @ www.CadViet.com ;;
(if (> (atof (substr (getvar "ACADVER") 1 4)) 16.0) (progn
(vl-load-com)
(princ "\nChon cac Point de xuat ra Bang toa do :")
(if (setq ss (ssget '((0 . "POINT"))))
(progn
(setq vl '("dimzin" "cmdecho") ; Sys Var list
ov (mapcar 'getvar vl)) ; Get Old values
(mapcar 'setvar vl '(0 0))
(setq pt (getpoint "\nDiem dat Bang :")
row 2
rows (sslength ss)
doc (vla-get-ActiveDocument (vlax-get-Acad-Object))
TblObj (vla-AddTable (vla-get-modelspace doc) (vlax-3d-point pt) (+ 2 rows) 2 375 2000))
(vla-put-vertcellmargin TblObj 50)
(mapcar '(lambda (x y)(vla-setTextHeight TblObj x y))
(list acTitleRow acHeaderRow acDataRow)
(list 250 250 175))
(mapcar '(lambda (x)(vla-setAlignment TblObj x 8))
(list acTitleRow acHeaderRow acDataRow))
(vla-setText TblObj 0 0 "Bang toa do")
(vla-setText TblObj 1 0 "X")
(vla-setText TblObj 1 1 "Y")
(vlax-for e (vla-get-ActiveSelectionSet doc)
(setq Coor (vlax-safearray->list (variant-value (vla-get-Coordinates e))))
(vla-setText TblObj row 0 (rtos (car Coor)))
(vla-setText TblObj row 1 (rtos (cadr Coor)))
(setq row (1+ row))
)
(vlax-release-object TblObj)
(mapcar 'setvar vl ov) ;reset Sys Vars
(princ)
)
)
)
(alert "\nPhien ban Cad cua ban khong ho tro tao Bang (TABLE)")
)
)

  • 2

#487 trinhvqh

trinhvqh

    biết lệnh block

  • Members
  • PipPipPipPipPipPip
  • 408 Bài viết
Điểm đánh giá: 222 (khá)

Đã gửi 09 December 2009 - 03:01 PM

[quote name='gia_bach' date='Dec 9 2009, 14:32' post='81408']
To : trinhvqh
Chuyện tính toán bằng cách xuất ra một File Exel. Sau đó copy Paste vào CAD. là chuyện cách đây 10 năm rồi.
Sao bác còn giới thiệu cho nguời khác làm!
Từ CAD 2008, có thể dùng DataLink để liên kết Exel với CAD.
-
Tại vì tôi thấy eng-hiep toàn đi “hỏi nghẹt” gia_bach quá!
Cách mà tôi đề xuất tuy cũ nhưng thích hợp với eng-hiep
Còn nếu dùng datalink lại là chuyện khác.
……….
  • 1

#488 Tue_NV

Tue_NV

    KS Võ Quang Tuệ

  • Moderator
  • PipPipPipPipPipPipPip
  • 4296 Bài viết
Điểm đánh giá: 3804 (đỉnh cao)

Đã gửi 09 December 2009 - 03:32 PM

....
Tại vì tôi thấy eng-hiep toàn đi “hỏi nghẹt” gia_bach quá!
Cách mà tôi đề xuất tuy cũ nhưng thích hợp với eng-hiep
Còn nếu dùng datalink lại là chuyện khác.
……….

Chào bạn trinhvqh
Mình thấy bạn eng-hiep đâu có đi “hỏi nghẹt” anh giabách đâu.
Và nếu vấn đề đó có bị "nghẹt" thì mình chắc rằng anh giabach đã lên tiếng rồi.
Hơn nữa, chạy Lisp của anh gia bach thì bạn đã thấy anh đã tạo được Table đấy thôi. Vấn đề đâu có "nghẹt"

Theo mình, học thì phải hỏi, có hỏi mới biết. Có thể bạn cho rằng là "hỏi nghẹt" nhưng biết đâu đấy trên diễn đàn lại có người trả lời được và từ đó bạn có thể học được 1 điều mới mẻ mà mình chưa biết

Tue_NV đã nhận được yêu cầu của bạn eng-hiep từ hôm qua và thực sự tạo cái Table đối với mình hoàn toàn mới mẻ và từ code của anh gia_bach đã học được 1 số điều mới mẻ. Với mình thật là thú vị

Anh gia_bach cho Tue_NV hỏi 1 chút trong code của anh 1 tí nhé :
Tue_NV chưa hiểu chức năng của vertcellmargin trong Table có nghĩa gì?
(vla-put-vertcellmargin TblObj 50)
Anh giải thích dùm em tí nhé.
Cảm ơn anh. Code Lisp của anh thật tuyệt

@eng-hiep : Bạn có thể mô tả rõ hơn yêu cầu của bạn được không?
Tue_NV thấy Lisp của anh gia_bach giải quyết yêu cầu của bạn đấy
  • 1

#489 gia_bach

gia_bach

    biết lệnh adcenter

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 1431 Bài viết
Điểm đánh giá: 1425 (rất tốt)

Đã gửi 09 December 2009 - 03:42 PM

Chào bạn trinhvqh
Mình thấy bạn eng-hiep đâu có đi “hỏi nghẹt” anh giabách đâu.
Và nếu vấn đề đó có bị "nghẹt" thì mình chắc rằng anh giabach đã lên tiếng rồi.
Hơn nữa, chạy Lisp của anh gia bach thì bạn đã thấy anh đã tạo được Table đấy thôi. Vấn đề đâu có "nghẹt"

Theo mình, học thì phải hỏi, có hỏi mới biết. Có thể bạn cho rằng là "hỏi nghẹt" mình nhưng biết đâu đấy trên diễn đàn lại có người trả lời được và từ đó bạn có thể học được 1 điều mới mẻ mà mình chưa biết

Tue_NV đã nhận được yêu cầu của bạn eng-hiep từ hôm qua và thực sự tạo cái Table đối với mình hoàn toàn mới mẻ và từ code của anh gia_bach đã học được 1 số điều mới mẻ. Với mình thật là thú vị

Anh gia_bach cho Tue_NV hỏi 1 chút trong code của anh 1 tí nhé :
Tue_NV chưa hiểu chức năng của vertcellmargin trong Table có nghĩa gì?
(vla-put-vertcellmargin TblObj 50)
Anh giải thích dùm em tí nhé.
Cảm ơn anh. Code Lisp của anh thật tuyệt

@eng-hiep : Bạn có thể mô tả rõ hơn yêu cầu của bạn được không?
Tue_NV thấy Lisp của anh gia_bach giải quyết yêu cầu của bạn đấy

VertCellMargin : Specifies the value of the vertical margin of cells.
là căn lề theo phuơng đứng (vertical) của 1 ô (cell) hay khoảng cách giữa điểm căn lề của TEXT đến LINE nằm ngang .
phụ thuộc vào điểm căn lề của TEXT (top, bottom) mà có thể là Line phía trên hoặc phía dưới của ô đó.

Còn 1 thuộc tính nữa là HorzCellMargin
  • 2

#490 trinhvqh

trinhvqh

    biết lệnh block

  • Members
  • PipPipPipPipPipPip
  • 408 Bài viết
Điểm đánh giá: 222 (khá)

Đã gửi 09 December 2009 - 03:52 PM

Chào bạn trinhvqh
Mình thấy bạn eng-hiep đâu có đi “hỏi nghẹt” anh giabách đâu.
Và nếu vấn đề đó có bị "nghẹt" thì mình chắc rằng anh giabach đã lên tiếng rồi.
Hơn nữa, chạy Lisp của anh gia bach thì bạn đã thấy anh đã tạo được Table đấy thôi. Vấn đề đâu có "nghẹt"

Theo mình, học thì phải hỏi, có hỏi mới biết. Có thể bạn cho rằng là "hỏi nghẹt" nhưng biết đâu đấy trên diễn đàn lại có người trả lời được và từ đó bạn có thể học được 1 điều mới mẻ mà mình chưa biết

Tue_NV đã nhận được yêu cầu của bạn eng-hiep từ hôm qua và thực sự tạo cái Table đối với mình hoàn toàn mới mẻ và từ code của anh gia_bach đã học được 1 số điều mới mẻ. Với mình thật là thú vị

Anh gia_bach cho Tue_NV hỏi 1 chút trong code của anh 1 tí nhé :
Tue_NV chưa hiểu chức năng của vertcellmargin trong Table có nghĩa gì?
(vla-put-vertcellmargin TblObj 50)
Anh giải thích dùm em tí nhé.
Cảm ơn anh. Code Lisp của anh thật tuyệt

@eng-hiep : Bạn có thể mô tả rõ hơn yêu cầu của bạn được không?
Tue_NV thấy Lisp của anh gia_bach giải quyết yêu cầu của bạn đấy


Gia_bach ơi bạn có Fan rồi nhé!
Sao Tue_NV lại giống bạn thế không biết (suy luận một hồi thành ra ý khác mất)
Từ cái chuyện “tìm một giải pháp cụ thể cho eng-hiep”
Tue_NV nói một hồi thành ra cái chuyện “Bàn về phương pháp học tập”

(Chắc khi nào có dịp phải mời 02 bạn cà phê giải toả mới được!!!)
  • 0

#491 Phiphi-

Phiphi-

    biết lệnh minsert

  • Members
  • PipPipPipPipPipPip
  • 434 Bài viết
Điểm đánh giá: 175 (tàm tạm)

Đã gửi 09 December 2009 - 06:04 PM

Em đang cần 1 lisp mà nó có thể xuất ra tọa độ của các point dưới dạng bảng (table) . Bác nào có thì cho em xin với nhé . Thanks a lot !

Eng-hiep xem thử ở topic này: http://www.cadviet.c...?showtopic=9019
  • 1

#492 Phiphi-

Phiphi-

    biết lệnh minsert

  • Members
  • PipPipPipPipPipPip
  • 434 Bài viết
Điểm đánh giá: 175 (tàm tạm)

Đã gửi 09 December 2009 - 06:12 PM

Nhờ các Bác giúp sửa dùm cái Lisp này. Thanks you.
http://www.cadviet.c...=580#entry82306
  • 0

#493 eng-hiep

eng-hiep

    biết lệnh erase

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

Đã gửi 09 December 2009 - 09:21 PM

@eng-hiep : Bạn có thể mô tả rõ hơn yêu cầu của bạn được không?
Tue_NV thấy Lisp của anh gia_bach giải quyết yêu cầu của bạn đấy

Cám ơn tất cả các bác đã nhiệt tình giúp đỡ . Lisp của bác gia_bach rất hay , và rất đúng ý em . Tuy nhiên , vẫn còn thiếu việc đặt tên ,chèn vào table cho point đó (trước khi pick chọn point ấy) và định chiều cao của text như mong muôn . Em cũng đã làm được cách đây vài ngày rùi , nhưng phải mất vài bước nhập qua nhập lại nên hơi mất công , nên thử xem có phương án nào hay hơn nữa không .
  • 0

#494 dvqkt112

dvqkt112

    biết zoom

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

Đã gửi 10 December 2009 - 12:03 AM

các bác ơi, em hiện đang làm 1 đồ án nước thải cho 1 đô thị. em vẽ các đoạn cống rồi sau đó chèn các block hố ga vào trên đoạn cống đó. Bây giờ em muốn trim tất cả các đoạn ống đi ngang qua block hố ga. các Bác có cách nào giúp em với( cái này của em có tới 1000 hố ga, em muốn cắt đường cống đi qua hố ga, không phải là dùng wipeout che nó đi). Bac nào có cái list mà làm được cái này thì giúp em.

Giống trong file này http://download805.m.../cong thoat.rar
  • 0

#495 trinhvqh

trinhvqh

    biết lệnh block

  • Members
  • PipPipPipPipPipPip
  • 408 Bài viết
Điểm đánh giá: 222 (khá)

Đã gửi 12 December 2009 - 04:11 PM

các bác ơi, em hiện đang làm 1 đồ án nước thải cho 1 đô thị. em vẽ các đoạn cống rồi sau đó chèn các block hố ga vào trên đoạn cống đó. Bây giờ em muốn trim tất cả các đoạn ống đi ngang qua block hố ga. các Bác có cách nào giúp em với( cái này của em có tới 1000 hố ga, em muốn cắt đường cống đi qua hố ga, không phải là dùng wipeout che nó đi). Bac nào có cái list mà làm được cái này thì giúp em.

Giống trong file này http://download805.m.../cong thoat.rar


Vụ này coi bộ các chuyên gia "Ô tô líp" lại bó tay rồi
Bạn lại đưa ra một bài toán khá "nghẹt"
Làm cho Topic này mất đi sự xôn xao vốn có
:(
  • 1

#496 trinhvqh

trinhvqh

    biết lệnh block

  • Members
  • PipPipPipPipPipPip
  • 408 Bài viết
Điểm đánh giá: 222 (khá)

Đã gửi 12 December 2009 - 04:20 PM

Đành phải tiếp tục nhờ ACA khai thông giùm bạn đây
Vụ này nếu dùng ACA thì dễ hơn ăn ớt

http://www.cadviet.c.../2/hogatrim.rar
Nào, hãy tiếp tục leo "Ô tô" và chạy "Líp líp" đi bà con!!!
  • 0

#497 gia_bach

gia_bach

    biết lệnh adcenter

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 1431 Bài viết
Điểm đánh giá: 1425 (rất tốt)

Đã gửi 12 December 2009 - 04:21 PM

các bác ơi, em hiện đang làm 1 đồ án nước thải cho 1 đô thị. em vẽ các đoạn cống rồi sau đó chèn các block hố ga vào trên đoạn cống đó. Bây giờ em muốn trim tất cả các đoạn ống đi ngang qua block hố ga. các Bác có cách nào giúp em với( cái này của em có tới 1000 hố ga, em muốn cắt đường cống đi qua hố ga, không phải là dùng wipeout che nó đi). Bac nào có cái list mà làm được cái này thì giúp em.

Giống trong file này http://download805.m.../cong thoat.rar

Bạn chạy thử LISP này.
Chú ý : Lisp chỉ sử lý trường hợp block hố ga giao với đường ống (Line, Arc, PLine) tại 2 điểm.
Do đó trong file của bạn, lisp không sử lý điểm ngoài cùng.

CODE :
(vl-load-com)

(defun C:TRIMBLK (/ ent ipts lstblk lstpts lstptspa obj ss)
;; By : Gia Bach, Copyright© December 2009 ;;
;; Contact : gia_bach @ www.CadViet.com ;;
(defun BlockIntersObj (Blk Obj / iPts pt_lst)
(foreach memb (vlax-invoke Blk 'Explode)
(if (eq (vla-get-ObjectName memb) "AcDbPolyline")
(setq iPts (vlax-invoke memb 'IntersectWith Obj 0)) )
(vla-delete memb)
)
(if iPts
(repeat (/ (length iPts) 3)
(setq pt_lst (cons (list (car iPts)(cadr iPts)(caddr iPts)) pt_lst )
iPts (cdddr iPts) ) ) )
(if pt_lst (reverse pt_lst))
)

(command "undo" "be")
(if (and
(setq ent (car (entsel "\nChon doi tuong can Trim : ")))
(wcmatch (cdr (assoc 0 (entget ent))) "*LINE,ARC")
(princ "\n Chon Block ho ga : ")
(setq ss (ssget (list (cons 0 "INSERT") (cons 8 "Hoga")))) )
(progn
(setq obj (vlax-ename->vla-object ent)
lstBlk (mapcar 'vlax-ename->vla-object (vl-remove-if 'listp (mapcar 'cadr (ssnamex ss)))))
(foreach e lstBlk
(if (and (setq iPts (BlockIntersObj e obj)) (=(vl-list-length iPts)2))
(foreach pt iPts
(setq lstPtsPa (cons (cons (vlax-curve-getParamAtPoint obj pt) pt) lstPtsPa) ) ))
);foreach
(if lstPtsPa
(setq lstPtsPa (vl-sort lstPtsPa '(lambda (x y) (> (car x) (car y))))
lstPts (mapcar 'cdr lstPtsPa) ))
(repeat (/ (length lstPts) 2)
(command "._break" ent "_non" (car lstPts) "_non" (cadr lstPts))
(setq lstPts (cddr lstPts)) )
);progn
)
(command "undo" "e")
(princ)
)
  • 2

#498 gia_bach

gia_bach

    biết lệnh adcenter

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 1431 Bài viết
Điểm đánh giá: 1425 (rất tốt)

Đã gửi 12 December 2009 - 04:30 PM

Vụ này coi bộ các chuyên gia "Ô tô líp" lại bó tay rồi
Bạn lại đưa ra một bài toán khá "nghẹt"
Làm cho Topic này mất đi sự xôn xao vốn có
:rolleyes:


Đành phải tiếp tục nhờ ACA khai thông giùm bạn đây
Vụ này nếu dùng ACA thì dễ hơn ăn ớt

http://www.cadviet.c.../2/hogatrim.rar
Nào, hãy tiếp tục leo "Ô tô" và chạy "Líp líp" đi bà con!!!


ha ha ...

Kiếu này chắc phải sắm một con A-KA (ACA) thui ! :(
  • 0

#499 trinhvqh

trinhvqh

    biết lệnh block

  • Members
  • PipPipPipPipPipPip
  • 408 Bài viết
Điểm đánh giá: 222 (khá)

Đã gửi 12 December 2009 - 06:55 PM

Lisp của gia_bach tuy chưa hoàn hảo nhưng cũng đủ làm Fan “tung hô”
(Mà kỳ ghê. Lúc nào gia_bach cũng giải quyết vấn đề không rốt ráo)

Theo quan điểm cá nhân: Trước đây tôi thấy có bác Hoành (đụng độ rồi), bây giờ có thêm gia_bach là 02 cao thủ “Ô tô líp”.

Bây giờ đến lượt tui có lời yêu cầu “nhỏ như con thỏ” mong được gia_bach giúp đỡ đây (nhờ thật tình và đích danh).

Yêu cầu:
Viết lệnh autolisp có tên là 1,2,3,4,… dùng để thực hiện các lệnh về ghi kích thước trong Autocad.
Ví dụ:
Command: 1
- Chuyển sang lớp KT-Dim (bảo đảm khi thực hiện dù đang ở lớp nào cũng nhảy về Layer KT-Dim)
- Thực hiện lệnh _dimlinear
- Chuyển về Layer trước đó (cái vế này thì tôi bí)

Hy vọng gia_bach giải quyết vấn đề thuyết phục nhé.
Xin cảm ơn!
Hẹn hậu tạ nếu có dịp :(
  • 0

#500 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 12 December 2009 - 07:17 PM

- Chuyển về Layer trước đó (cái vế này thì tôi bí)

Nhọn mỏ tí vấn đề này thì:
(getvar "CLAYER")
Nếu bạn có ý khác thì xin lổi vì nhiều chuyện :(
  • 0

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