Đến nội dung


Hình ảnh
- - - - -

Liên kết các đối tượng trong mỗi thửa (Polyline khép kín) thành 1 khối (Block) mà vị trí bản vẽ không thay đổi


  • Please log in to reply
19 replies to this topic

#1 thuong_mdc80

thuong_mdc80

    biết vẽ line

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

Đã gửi 02 June 2010 - 05:51 PM

- Chào các Anh/Chị
+ Tôi có bản vẽ gồm nhiều thửa (mỗi thửa là một Polyline khép kín). Trong mỗi thửa có 3 đối tượng Text và một đối tượng dạng Line, tất cả các đối tượng này thuộc một lớp.
+ Xin các Bác giúp cho 1 Lisp để liên kết 4 đối tượng trong mỗi thửa đó thành 1 khối (Block) mà VỊ TRÍ (TỌA ĐỘ) CỦA BẢN VẼ ĐÓ KHÔNG THAY ĐỔI.
- Chân thành cảm ơn các Bác đã giúp đỡ tôi.
- Các Bác Xem file đính kèm theo đường dẫn sau: http://www.cadviet.c...iles/2/1_11.dwg
  • -1

#2 gia_bach

gia_bach

    biết lệnh adcenter

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

Đã gửi 09 June 2010 - 11:29 AM

- Chào các Anh/Chị
+ Tôi có bản vẽ gồm nhiều thửa (mỗi thửa là một Polyline khép kín). Trong mỗi thửa có 3 đối tượng Text và một đối tượng dạng Line, tất cả các đối tượng này thuộc một lớp.
+ Xin các Bác giúp cho 1 Lisp để liên kết 4 đối tượng trong mỗi thửa đó thành 1 khối (Block) mà VỊ TRÍ (TỌA ĐỘ) CỦA BẢN VẼ ĐÓ KHÔNG THAY ĐỔI.
- Chân thành cảm ơn các Bác đã giúp đỡ tôi.
- Các Bác Xem file đính kèm theo đường dẫn sau: http://www.cadviet.c...iles/2/1_11.dwg

Trong t/hợp của bạn, sử dụng BlockThuộc tính có nhiều ưu điểm hơn.
Tham khảo các bài viết về BlockThuộc tính trên CadViet : http://www.cadviet.c.....b/hsearch.php

Đây là Lisp theo yêu cầu của bạn :
liên kết các đối tượng đuợc chọn (line, Text) thành 1 khối (Block) mà VỊ TRÍ (TỌA ĐỘ) CỦA BẢN VẼ ĐÓ KHÔNG THAY ĐỔI.
(defun C:o2b (/ cmd ent i ip ss tmp);convert objs to Block
(if
(and
(setq ip (getpoint "\nChon diem chen cua Block : "))
(princ "Chon doi tuong : ")
(setq ss (ssget (list (cons 0 "LINE,TEXT")))) )
(progn
(entmake (list (cons '0 "BLOCK")(cons '2 "*U")(cons '70 1)(cons '10 ip)))
(setq i -1)
(while (setq ent (ssname ss (setq i (1+ i))))
(entmake (entget ent))
(entdel ent))
(setq tmp (entmake (list (cons '0 "ENDBLK"))))
(entmake (list (cons '0 "INSERT")(cons '2 tmp)(cons '10 ip))) ) )
(princ))

  • 2

#3 thuong_mdc80

thuong_mdc80

    biết vẽ line

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

Đã gửi 24 June 2010 - 03:14 PM

Cảm ơn bác Gia Bach đã giúp đỡ tôi.
- Nếu bác có thể sửa giúp tôi để hoàn thiện LISP thì rất tốt. Cụ thể như sau:
+ Mỗi lần chạy lisp và chỉ chọn các đối tượng trong 1 Polyline khép kín thì lisp của bạn đã đáp ứng đúng mục đích của tôi.
+ Khi chạy lisp nếu chọn nhiều Polyline khép kín thì tất cả các đối tượng đó được tạo thành là 1Block. Nhờ bạn sửa giúp để mỗi đối tượng trong mỗi Polyline tạo ra là 1 block mà chỉ cần chọn các Polyline đó 1 lần.
  • -1

#4 gia_bach

gia_bach

    biết lệnh adcenter

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

Đã gửi 25 June 2010 - 08:17 AM

Cảm ơn bác Gia Bach đã giúp đỡ tôi.
- Nếu bác có thể sửa giúp tôi để hoàn thiện LISP thì rất tốt. Cụ thể như sau:
+ Mỗi lần chạy lisp và chỉ chọn các đối tượng trong 1 Polyline khép kín thì lisp của bạn đã đáp ứng đúng mục đích của tôi.
+ Khi chạy lisp nếu chọn nhiều Polyline khép kín thì tất cả các đối tượng đó được tạo thành là 1Block. Nhờ bạn sửa giúp để mỗi đối tượng trong mỗi Polyline tạo ra là 1 block mà chỉ cần chọn các Polyline đó 1 lần.

Bạn viết khó hiểu quá.
Tạm dịch là : Liên kết các đối tượng trong mỗi Polyline thành 1 Block.
(defun c:cBLK (/ ent i pt_lst ss ssblk)
;|Tao Block tu cac doi tuong (LINE TEXT) trong Polyline
By : Gia Bach, gia_bach @ www.CadViet.com |;
(vl-load-com)
(defun MakeBlk(ss pt / ent i ip tmp)
(setq i -1)
(entmake (list (cons '0 "BLOCK")(cons '2 "*U")(cons '70 1)(cons '10 pt)))
(while (setq ent (ssname ss (setq i (1+ i))))
(entmake (entget ent))
(entdel ent))
(setq tmp (entmake (list (cons '0 "ENDBLK"))))
(entmake (list (cons '0 "INSERT")(cons '2 tmp)(cons '10 pt))) )

(defun GetPtLst (obj / anginc arcparam blg delta endparam inc param pt ptlst tparam)
(setq sparam (vlax-curve-getStartParam obj)
eparam (vlax-curve-getEndParam obj)
anginc (* pi (/ 6 180.0)))
(while (<= sparam eparam)
(setq pt (vlax-curve-getPointAtParam obj sparam))
(if (not (equal pt (car ptlst) 1e-12))
(setq ptlst (cons pt ptlst)))
(if (and (/= sparam eparam)
(setq blg (abs (vlax-invoke obj 'GetBulge sparam)))
(/= 0 blg))
(progn
(setq delta (* 4 (atan blg)) ;included angle
inc (/ 1.0 (1+ (fix (/ delta anginc))))
arcparam (+ sparam inc))
(while (< arcparam (1+ sparam))
(setq pt (vlax-curve-getPointAtParam obj arcparam)
ptlst (cons pt ptlst)
arcparam (+ inc arcparam)))) )
(setq sparam (1+ sparam)) )
ptlst)
;main
(princ "\nChon Pline : ")
(if (setq ss (ssget '((0 . "LWPOLYLINE"))))
(progn
(setq i -1)
(while (setq ent (ssname ss (setq i (1+ i))))
(setq pt_lst (GetPtLst (vlax-ename->vla-object ent))
ssBlk (ssget "_WP" pt_lst (list (cons 0 "LINE,TEXT"))) )
(if ssBlk (MakeBlk ssBlk (car pt_lst))) ) ))
(princ))

  • 1

#5 thuong_mdc80

thuong_mdc80

    biết vẽ line

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

Đã gửi 06 April 2016 - 02:29 PM

Bạn viết khó hiểu quá.
Tạm dịch là : Liên kết các đối tượng trong mỗi Polyline thành 1 Block.

(defun c:cBLK (/ ent i pt_lst ss ssblk)  ;|Tao Block tu cac doi tuong (LINE TEXT) trong Polyline    By : Gia Bach, gia_bach @  www.CadViet.com             |;    (vl-load-com)(defun MakeBlk(ss pt / ent i ip tmp)  (setq i -1)  (entmake (list (cons '0 "BLOCK")(cons '2 "*U")(cons '70 1)(cons '10 pt)))  (while (setq ent (ssname ss (setq i (1+ i))))    (entmake (entget ent))    (entdel ent))  (setq tmp (entmake (list (cons '0 "ENDBLK"))))  (entmake (list (cons '0 "INSERT")(cons '2 tmp)(cons '10 pt)))   )(defun GetPtLst (obj / anginc arcparam blg delta endparam inc param pt ptlst tparam)  (setq sparam (vlax-curve-getStartParam obj)	eparam (vlax-curve-getEndParam obj)	anginc (* pi (/ 6 180.0)))  (while (<= sparam eparam)    (setq pt (vlax-curve-getPointAtParam obj sparam))    (if (not (equal pt (car ptlst) 1e-12))      (setq ptlst (cons pt ptlst)))    (if (and (/= sparam eparam)	      (setq blg (abs (vlax-invoke obj 'GetBulge sparam)))	      (/= 0 blg))      (progn	(setq delta (* 4 (atan blg)) ;included angle	      inc (/ 1.0 (1+ (fix (/ delta anginc))))	      arcparam (+ sparam inc))	(while (< arcparam (1+ sparam))	  (setq pt (vlax-curve-getPointAtParam obj arcparam)		ptlst (cons pt ptlst)		arcparam (+ inc arcparam))))      )    (setq sparam (1+ sparam))    )  ptlst);main   (princ "\nChon Pline : ")  (if (setq ss (ssget  '((0 . "LWPOLYLINE"))))    (progn      (setq i -1)      (while (setq ent (ssname ss (setq i (1+ i))))	(setq pt_lst (GetPtLst (vlax-ename->vla-object ent))	      ssBlk (ssget "_WP" pt_lst (list (cons 0 "LINE,TEXT"))) )	(if ssBlk (MakeBlk ssBlk (car pt_lst))) ) ))  (princ))

 

Em download về mà chạy không được bác à. Dùng Notepad mở thì nhìn không giống CODE (không thấy các hàng thò ra, thụt vào). Cảm ơn bác.


  • -2

#6 ketxu

ketxu

    Copier - Paster - Editor

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

Đã gửi 06 April 2016 - 03:22 PM

Thật k thể k tặng bạn 1 điểm trừ vì :

- Chủ đề đã mở gần 6 năm trước, bác gia_bach cặm cụi viết cho bạn 1 lisp khá dài, n đến 6 năm sau mới quay lại than thở. ?????

- Mở topic trùng với chính đề tài đã mở. Mình đã khóa

- Topic mới lần đầu chưa nói rõ, lần tiếp theo kết hợp ở đây thì nói các thửa phân nhau bởi Pline kín, nhưng file mẫu gửi thì các thửa phân chia nhau bởi các Line hoàn toàn rời rạc, khiến thuật toán sẽ HOÀN TOÀN THAY ĐỔI. Bản thân bạn chưa phân biệt được việc đó khác nhau thế nào ?

 

Thực sự là mất thời gian :)

 

P/s : code trên cũng chỉ làm được khi bạn có Pline kín bao các đối tượng tạo khối


  • 1

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


#7 anti lazy

anti lazy

    biết lệnh erase

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

Đã gửi 06 April 2016 - 03:54 PM

Một cái bang rất kỳ cựu:

- Thành viên thứ 3003 / 151157

- Gia nhập cadviet gần 9 năm.

Nhưng đến nay vẫn không biết xử lý lỗi dồn hàng: học không quá 9' là biết cách


  • 1

#8 thuong_mdc80

thuong_mdc80

    biết vẽ line

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

Đã gửi 06 April 2016 - 05:16 PM

Xin lỗi các bạn nhé nếu làm mất thời gian, làm phiền đến các bạn.

 

Mình không phải dân chuyên sử dụng Autocad, không sử dụng thường xuyên nên có những nội dung và thuật toán chưa phân biệt được. Gia nhập diễn đàn cũng là mong muốn ứng dụng, học thêm các cái hay, tiện ích cho công việc.

 

Khi có sự thay đổi nên hỏi và mong các bạn giúp đỡ.

 

Trân thành cảm ơn.


  • 0

#9 pphung183

pphung183

    biết dimstyle

  • Members
  • PipPipPipPipPip
  • 384 Bài viết
Điểm đánh giá: 425 (tốt)

Đã gửi 07 April 2016 - 09:23 AM

Xin lỗi các bạn nhé nếu làm mất thời gian, làm phiền đến các bạn.

 

Mình không phải dân chuyên sử dụng Autocad, không sử dụng thường xuyên nên có những nội dung và thuật toán chưa phân biệt được. Gia nhập diễn đàn cũng là mong muốn ứng dụng thêm các cái hay, tiện ích cho công việc.

 

Khi có sự thay đổi nên hỏi và mong các bạn giúp đỡ.

 

Trân thành cảm ơn.

Thế bản vẽ đâu? TRong mỗi Polyline có khoảng nhiêu object??? Đưa bản vẽ lên và nói cụ thể muốn gì :)


  • 0

#10 pphung183

pphung183

    biết dimstyle

  • Members
  • PipPipPipPipPip
  • 384 Bài viết
Điểm đánh giá: 425 (tốt)

Đã gửi 08 April 2016 - 10:15 AM

- Chào các Anh/Chị
+ Tôi có bản vẽ gồm nhiều thửa (mỗi thửa là một Polyline khép kín). Trong mỗi thửa có 3 đối tượng Text và một đối tượng dạng Line, tất cả các đối tượng này thuộc một lớp.
+ Xin các Bác giúp cho 1 Lisp để liên kết 4 đối tượng trong mỗi thửa đó thành 1 khối (Block) mà VỊ TRÍ (TỌA ĐỘ) CỦA BẢN VẼ ĐÓ KHÔNG THAY ĐỔI.
- Chân thành cảm ơn các Bác đã giúp đỡ tôi.
- Các Bác Xem file đính kèm theo đường dẫn sau: http://www.cadviet.c...iles/2/1_11.dwg

Similar topics from web:
+: Nhờ viết lisp

 

Oh my God :blink: ! Thái độ nhờ giúp đở của bạn là như thế sao??? Cách hành xử này sẽ khiến nhung ai muốn giúp bạn sẽ cạch mặt bạn luôn.

Với Bản vẽ này của bạn thì việc tạo hàng loạt Block sao cái quét chọn là không quá khó đối với tôi :D . Nhưng giờ thì hết hứng để giúp :lol:


  • 0

#11 thuong_mdc80

thuong_mdc80

    biết vẽ line

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

Đã gửi 09 April 2016 - 09:42 AM

Thế bản vẽ đâu? TRong mỗi Polyline có khoảng nhiêu object??? Đưa bản vẽ lên và nói cụ thể muốn gì :)

 

Cảm ơn bạn.

- Bản vẽ mình xin gửi lại kèm theo ở đây.

- Trong mỗi thửa gồm có 4 đối tượng (3 đối tượng TEXT và 1 đối tượng LINE).

- Các thửa là khép kín và được tạo thành từ các Line hoặc Polyline (nhờ ý kiến của bạn Ketxu nên mình đã phân biệt được Line và Polyline). Mình muốn liên kết các đối tượng trong MỖI THỬA thành MỘT BLOCK mà tọa độ bản vẽ đó không thay đổi (bản vẽ gồm N thửa sẽ tạo thành N khối)

Bản vẽ kèm theo: http://www.cadviet.c...3003_1_11_1.dwg


  • 0

#12 thuong_mdc80

thuong_mdc80

    biết vẽ line

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

Đã gửi 09 April 2016 - 10:00 AM

Một cái bang rất kỳ cựu:

- Thành viên thứ 3003 / 151157

- Gia nhập cadviet gần 9 năm.

Nhưng đến nay vẫn không biết xử lý lỗi dồn hàng: học không quá 9' là biết cách

 

Không ai hiểu, biết được mọi vấn đề bạn à. Trong lĩnh vực này có thể bạn là trưởng môn, trụ trì...nhưng trong lĩnh vực khác có lẽ bạn cũng là người của cái bang.

Mình không biết thì mình hỏi, mình học, sai thì nhận lỗi. Bạn có thể chỉ giúp địa chỉ Web, tài liệu... để mình học cách "xử lý lỗi dồn hàng", mình tìm mà không thấy.

Cảm ơn bạn.


  • 0

#13 thuong_mdc80

thuong_mdc80

    biết vẽ line

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

Đã gửi 09 April 2016 - 10:31 AM

Oh my God :blink: ! Thái độ nhờ giúp đở của bạn là như thế sao??? Cách hành xử này sẽ khiến nhung ai muốn giúp bạn sẽ cạch mặt bạn luôn.

Với Bản vẽ này của bạn thì việc tạo hàng loạt Block sao cái quét chọn là không quá khó đối với tôi :D . Nhưng giờ thì hết hứng để giúp :lol:

 

Tôi không biết thì tôi hỏi, nhờ "giúp đỡ". Post trùng bài, làm mất thời gian... tôi cũng đã xin lỗi. Sống ở trên đời ai cũng có lúc nhầm, chưa đúng, sai thì nhận đó là điều tất yếu nhưng không nên sống ích kỷ, từ bụng ta suy ra bụng người, tự kiêu, NATO. Có những người Việt Nam cứ nghĩ là mình giỏi, hơn người nhưng trong Tiếng Việt còn không biết cấu trúc 1 câu văn, viết sai chính tả.

Cảm ơn bạn đã góp ý.


  • 0

#14 pphung183

pphung183

    biết dimstyle

  • Members
  • PipPipPipPipPip
  • 384 Bài viết
Điểm đánh giá: 425 (tốt)

Đã gửi 09 April 2016 - 11:09 AM

Tôi không biết thì tôi hỏi, nhờ "giúp đỡ". Post trùng bài, làm mất thời gian... tôi cũng đã xin lỗi. Sống ở trên đời ai cũng có lúc nhầm, chưa đúng, sai thì nhận đó là điều tất yếu nhưng không nên sống ích kỷ, từ bụng ta suy ra bụng người, tự kiêu, GATO. Có những người Việt Nam cứ nghĩ là mình giỏi, hơn người nhưng trong Tiếng Việt còn không biết cấu trúc 1 câu văn, viết sai chính tả.

Cảm ơn bạn đã góp ý.

Potay voi nhung suy nghĩ ấu trĩ ... :lol:

Hãy suy nghĩ và tạo ra những điều mới lạ từ chính mình, bạn sẽ thấy hạnh phúc

Giúp đỡ để cùng nhau tiến bộ, bạn sẽ thấy vinh hạnh

Cứ mãi giấu dốt, sỉ diện hảo, thì bạn cứ mãi là người GATO đấy. :)


  • 0

#15 anti lazy

anti lazy

    biết lệnh erase

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

Đã gửi 09 April 2016 - 05:42 PM

Không ai hiểu, biết được mọi vấn đề bạn à. Trong lĩnh vực này có thể bạn là trưởng môn, trụ trì...nhưng trong lĩnh vực khác có lẽ bạn cũng là người của cái bang.

Mình không biết thì mình hỏi, mình học, sai thì nhận lỗi. Bạn có thể chỉ giúp địa chỉ Web, tài liệu... để mình học cách "xử lý lỗi dồn hàng", mình tìm mà không thấy.

Cảm ơn bạn.

Đúng là ban đầu thì ai cũng là cái bang, nhưng cái bang đến 9 năm thì cũng nên tự suy nghĩ.

Tài liệu học lisp thì nhiều, chỉ cần seach "học autolisp"

Xử lý dồn hàng (giải quyết > 90% trường hợp):

Open bằng vlide, không phải notepad

Thấy chỗ nào có background màu xám, tìm dấu ( đầu tiên

Đặt con trỏ vào trước dấu ( và enter xuống hàng

10% còn lại thì phải có ít kiến thức về lisp


  • 0

#16 quocmanh04tt

quocmanh04tt

    biết lệnh imageclip

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

Đã gửi 09 April 2016 - 09:45 PM

Bác anti lazy! Hình như thông thường cái bang càng lâu năm càng nhiều túi, các trưởng lão 9 túi nội công thâm hậu vô cùng... :D

9 năm luyện công ít ra cũng đến hàng 6, 7 túi rồi bác ạ! :D


  • 0

#17 thuong_mdc80

thuong_mdc80

    biết vẽ line

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

Đã gửi 12 April 2016 - 01:44 PM

Bác anti lazy! Hình như thông thường cái bang càng lâu năm càng nhiều túi, các trưởng lão 9 túi nội công thâm hậu vô cùng... :D

9 năm luyện công ít ra cũng đến hàng 6, 7 túi rồi bác ạ! :D

 

Bạn nên suy nghĩ lại, không phải ai ra nhập cái bang cũng học được môn đó. Đừng đánh giá người khác với con mắt "Sửu nhi" của bạn.


  • 0

#18 thuong_mdc80

thuong_mdc80

    biết vẽ line

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

Đã gửi 12 April 2016 - 02:05 PM

Potay voi nhung suy nghĩ ấu trĩ ... :lol:

Hãy suy nghĩ và tạo ra những điều mới lạ từ chính mình, bạn sẽ thấy hạnh phúc

Giúp đỡ để cùng nhau tiến bộ, bạn sẽ thấy vinh hạnh

Cứ mãi giấu dốt, sỉ diện hảo, thì bạn cứ mãi là người GATO đấy. :)

 

Tôi không dấu dốt, tôi chưa biết tôi hỏi, ai có lòng tốt thì giúp đỡ, nếu không muốn giúp đỡ hãy học cách 3 "không".

Bạn hãy xem lại các câu bạn viết. Không biết bạn học đến lớp mấy mà viết thì sai chính tả, nói làm được nhưng chắc gì đã làm được.


  • 0

#19 thuong_mdc80

thuong_mdc80

    biết vẽ line

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

Đã gửi 12 April 2016 - 02:17 PM

Đúng là ban đầu thì ai cũng là cái bang, nhưng cái bang đến 9 năm thì cũng nên tự suy nghĩ.

Tài liệu học lisp thì nhiều, chỉ cần seach "học autolisp"

Xử lý dồn hàng (giải quyết > 90% trường hợp):

Open bằng vlide, không phải notepad

Thấy chỗ nào có background màu xám, tìm dấu ( đầu tiên

Đặt con trỏ vào trước dấu ( và enter xuống hàng

10% còn lại thì phải có ít kiến thức về lisp

 

Cảm ơn bạn đã hướng dẫn.


  • 0

#20 syvan

syvan

    Chưa sử dụng CAD

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

Đã gửi 12 April 2016 - 02:20 PM

Mình cũng đang học và đọc xong bài này mới biết . nhưng mà các bạn đừng cãi nhau nữa. học hỏi lẫn nhau là chính mà.


  • 0