Chuyển đến nội dung
Diễn đàn CADViet
Nguyen Hoanh

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

Các bài được khuyến nghị

Không biết có lisp (hay lệnh) nào có thể chèn 1 ký tự bất kỳ (VD như P , B...) vào 1 số hoặc 1 nhóm số được chọn (sẽ thành P1 ,P2...B1...) không ạ ? Thx :cheers:

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
Không biết có lisp (hay lệnh) nào có thể chèn 1 ký tự bất kỳ (VD như P , B...) vào 1 số hoặc 1 nhóm số được chọn (sẽ thành P1 ,P2...B1...) không ạ ? Thx :cheers:

Coi cái này thử xem:

http://www.cadviet.com/forum/index.php?sho...amp;&do=findComment&comment=77913

 

http://www.cadviet.com/forum/index.php?sho...=6991&st=20

Cập nhật lại . Hoặc bạn vào tìm kiếm gỏ chử themtext

  • Vote tăng 1

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

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 !

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
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 !

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))

  • Vote tăng 1

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
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) .

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
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)

  • Vote tăng 2

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
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.com/upfiles/2/point_tag.rar

  • Vote tăng 1

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
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ó

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khá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.com/upfiles/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)")
 )
 )

  • Vote tăng 2

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

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.

……….

  • Vote tăng 1

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
....

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

  • Vote tăng 1

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web 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" 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

  • Vote tăng 2

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web 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

 

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!!!)

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
@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 .

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

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.mediafire.com/awadlzbbg.../cong+thoat.rar

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
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.mediafire.com/awadlzbbg.../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ó

:(

  • Vote tăng 1

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
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.mediafire.com/awadlzbbg.../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)

)

  • Vote tăng 2

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
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.com/upfiles/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 ! :(

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

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

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
- 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 :(

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
Khách
Chủ đề này bây giờ đã bị đóng lại để trả lời thêm.

×