Đến nội dung


Hình ảnh
- - - - -

[Hỏi]Chọn đối Tượng Pline Sau Khi Break


  • Please log in to reply
30 replies to this topic

#21 ketxu

ketxu

    Copier - Paster - Editor

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

Đã gửi 15 September 2011 - 10:19 AM

Ket thử test file này xem sao nhé
http://www.cadviet.c...s/3/break_1.dwg

Ôi, thì đó là trường hợp LWPline với Pline thôi. Với LWP thì nó giống ban đầu e và bác Bình nói. Nếu 3dPline thì nó giống đoạn sau
=> Tổng quát : Kiểm tra type của đối tượng trước khi break để biết cần lấy gì :| Không thì kiểm tra e1 = e2
(còn Line, SPline... nữa, nên bạn chủ topic tự kiểm nghiệm cách thức CAD làm việc nhé)
  • 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


#22 sam8xd

sam8xd

    biết vẽ line

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

Đã gửi 15 September 2011 - 11:44 AM

Ý em muốn nói là nếu elast là 1 polyline thì (setq e1 (entnext elast)) -> sẽ là đỉnh thứ 1 của pline đó chứ chưa phải là đoạn 1 vừa break ra.
  • 0

#23 minhngockt

minhngockt

    biết vẽ pline

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

Đã gửi 15 September 2011 - 11:47 AM


Yêu cầu của bạn tương tự như copy Text, nên dùng cái này thì chủ động hơn :


(defun C:tt( / source )
;@Ketxu 15 -9 base on CAB copy
(vl-load-com)
(and
(setq source (car (nentsel "\nCh\U+1ECDn Text / Mtext / Attdef / Attrib ngu\U+1ED3n : ")))
(setvar "errno" 0)
(or
(vl-position (cdadr (entget source))'("TEXT" "ATTRIB" "MTEXT" "ATTDEF"))
(prompt "\nCh\U+1ECDn sai lo\U+1EA1i \U+0111\U+1ED1i t\U+01B0\U+1EE3ng !")
)
)
(setq text (vla-get-textstring (vlax-ename->vla-object source)))
(princ (strcat "\Text ngu\U+1ED3n : " text))
(while (/= (getvar "errno") 52)
(and
(setq pick (nentsel "\nCh\U+1ECDn \U+0111\U+1ED1i t\U+01B0\U+1EE3ng c\U+1EA7n thay \U+0111\U+1ED5i : "))
(setq target (car pick))
(setq ent (entget target)
layer (cdr (assoc 8 ent))
target (vlax-ename->vla-object target)
)
(or
(= (length pick) 2)
(prompt "\n\U+0110\U+1ED1i t\U+01B0\U+1EE3ng n\U+1EB1m s\U+00E2u trong Block ho\U+1EB7c Xref !")
)
(or
(vl-position (cdadr ent) '("TEXT" "ATTRIB" "MTEXT" "ATTDEF"))
(prompt "\nCh\U+1ECDn sai lo\U+1EA1i \U+0111\U+1ED1i t\U+01B0\U+1EE3ng !")
)
(or
(/= (logand 4 (cdr (assoc 70 (tblsearch "layer" layer)))) 4)
(prompt (strcat "\nLayer " layer " \U+0111ang b\U+1ECB kh\U+00F3a !"))
)
(and
(not (vla-put-textstring target text))
(/= (vla-get-textstring target) text)
(princ "\nCopy Text th\U+1EA5t b\U+1EA1i !")
)
)
)
)

em cảm ơn bác. Đúng là cái em cần
  • 0

#24 ketxu

ketxu

    Copier - Paster - Editor

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

Đã gửi 15 September 2011 - 11:51 AM

À thú thực thì mình vẫn chưa hiểu câu hỏi lắm, nhưng láng máng là nếu elast là Pline3D thì sẽ có vấn đề đúng k ^^
Vậy thì bạn cheat đi, tạo 1 point ở đâu đó rồi lấy elast, hêt rountine thì xóa đi ^^ Khà khà
  • 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


#25 sam8xd

sam8xd

    biết vẽ line

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

Đã gửi 15 September 2011 - 08:53 PM

Anh vẽ 1 polyline xong (PL1).
Rồi vẽ thêm 1 polyline nữa (PL2)
Dùng lệnh entlast sẽ được PL2
Rồi Break PL1 được PL11 và PL12
Xong rồi dùng cách anh để xác định thì (setq e1 (entnext elast)) sẽ ra vertex thứ 1 của polyline PL2 chứ chưa ra PL11
  • 0

#26 ketxu

ketxu

    Copier - Paster - Editor

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

Đã gửi 15 September 2011 - 09:21 PM

sam8xd đọc bài trên của mình chưa :o Nếu bạn không dùng mẹo thì có thể sử dụng các phương thức ssget c,cp qua các điểm, đỉnh Pline (cách này có hơi mạo hiểm)
  • 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


#27 sam8xd

sam8xd

    biết vẽ line

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

Đã gửi 16 September 2011 - 10:22 PM

tạo 1 point ở đâu đó rồi lấy elast
Đã hiểu :lol: cảm ơn anh.
Phương thức (ssget "PO" point) (ssget "O" ptlist) nó có trong cad nào không nhỉ. Dùng C, CP mạo hiểm lắm.
http://www.kxcad.net...r_lisp_b273.htm
  • 0

#28 quac

quac

    Chưa sử dụng CAD

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

Đã gửi 14 May 2014 - 09:12 AM

Xin mọi người giúp tạo lisp cop dãy text được ko ạ, mình đã tìm trong diễn đàn nhưng chỉ có copy nội dung 1 text ra nhiều text chứ không tìm thấy lisp copy nội dung dãy tẽt này sang dãy text khác:
 

Bài toán: Có 2 dãy số A B C D và K X Y Z

Yêu cầu: Quét chọn dãy số A B C D sau đó quét chọn dãy K X Y Z thì sẽ được 2 dãy A B C D

 

Mục đích là do dãy A B C D xếp lung tung, muốn cho vào bảng có form sẵn.

 

Trân trọng cảm ơn


  • 0

#29 hiepttr

hiepttr

    Edu level: li10

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

Đã gửi 14 May 2014 - 11:23 AM

rảnh rỗi sinh nông nổi nên làm liều cho bạn ! :D :D :D

;lisp copy noi dung tung text nhom nay sang nhom khac
(defun c:TEST( / ss ss1 i ct)
(prompt "\nChon cac text can copy noi dung !")
(setq ss (ssget '((0 . "TEXT,MTEXT"))))
(prompt "\nChon cac text can paste noi dung !")
(setq ss1 (ssget '((0 . "TEXT,MTEXT")))
	  i 0)
(while (and ss ss1 (<= (sslength ss) (sslength ss1)) (< i (sslength ss)))
	(setq ct (assoc 1 (entget (ssname ss i))))
	(entmod (subst ct (assoc 1 (setq info (entget (ssname ss1 i)))) info))
	(setq i (1+ i))
)
(princ)
)

  • 0

Có vợ dù dữ dù hiền , bạn đều có lợi
_ Nếu vợ hiền, bạn sẽ là người đàn ông sung sướng
_ Nếu vợ dữ, bạn sẽ thành ... triết gia !

Bergson


#30 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 14 May 2014 - 02:45 PM

rảnh rỗi sinh nông nổi nên làm liều cho bạn ! :D :D :D

;lisp copy noi dung tung text nhom nay sang nhom khac
(defun c:TEST( / ss ss1 i ct)
(prompt "\nChon cac text can copy noi dung !")
(setq ss (ssget '((0 . "TEXT,MTEXT"))))
(prompt "\nChon cac text can paste noi dung !")
(setq ss1 (ssget '((0 . "TEXT,MTEXT")))
	  i 0)
(while (and ss ss1 (<= (sslength ss) (sslength ss1)) (< i (sslength ss)))
	(setq ct (assoc 1 (entget (ssname ss i))))
	(entmod (subst ct (assoc 1 (setq info (entget (ssname ss1 i)))) info))
	(setq i (1+ i))
)
(princ)
)

Hề hề hề,

Bác hieptr ơi, có nhẽ nên check cả số lượng các đối tượng trong tập ss và tập ss1 phải bằng nhau nữa bá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.

#31 hiepttr

hiepttr

    Edu level: li10

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

Đã gửi 14 May 2014 - 03:55 PM

Hề hề hề,

Bác hieptr ơi, có nhẽ nên check cả số lượng các đối tượng trong tập ss và tập ss1 phải bằng nhau nữa bác ạ.

ý đồ của mình là nếu số lượng các đối tượng trong ss1 nhiều hơn ss thì chỉ sửa các đối tượng đầu, các "chú phía sau" giữ nguyên

p/s:

để lisp làm việc tốt thì cần thủ thuật chọn đối tượng tốt, VD: pick chọn lần lượt hoặc tùy chọn F ...


  • 0

Có vợ dù dữ dù hiền , bạn đều có lợi
_ Nếu vợ hiền, bạn sẽ là người đàn ông sung sướng
_ Nếu vợ dữ, bạn sẽ thành ... triết gia !

Bergson