Đến nội dung


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

[yêu cầu &thảo luận] lisp vẽ mặt bằng kết cấu


  • Please log in to reply
118 replies to this topic

#61 Doan Van Ha

Doan Van Ha

    biết lệnh adcenter

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 5447 Bài viết
Điểm đánh giá: 2624 (tuyệt vời)

Đã gửi 22 May 2013 - 04:06 PM

Kết thúc lisp này ở đây, vì quá khó, quá mất công, và còn dành thời gian kiếm cơm nữa!

File cad để test:

http://www.cadviet.c...67029_test2.dwg

File hình để rửa mắt:

67029_untitled_10.png

File lisp trần ai:

 

;Doan Van Ha - CADViet.com - Ngay 22/05/2013
;Chuc nang: ve luoi dam/tuong theo he truc // XOY, be rong tuy chon, luoi break bat ky nhung o ngoai cung phai la HCN.
(defun C:HA(/ ss lsti lst lstg1 giao lstg kcm ptx pty ent)
 (vl-load-com) (command "undo" "be")
 (setq cmd (getvar "cmdecho") osm (getvar "osmode") hpb (getvar "hpbound")) (setvar "cmdecho" 0) (setvar "osmode" 0) (setvar "hpbound" 1)
 (while
  (and
   (princ "\nChon cac Line duong truc...")
   (setq ss (ssget '((0 . "LINE"))))
   (setq lsti (vl-remove-if 'listp (mapcar 'cadr (ssnamex ss))))
   (or kc (setq kc 110))
   (setq kc (cond ((getdist (strcat "\nBe rong tuong/dam <" (rtos kc 2 2) ">:"))) (kc))))
  (setq lst (append (mapcar '(lambda(ent) (list ent kc)) lsti) lst)))
 (foreach n1 lst
  (setq lstg1 nil)
  (foreach n2 lst
   (if (setq giao (car (HA:Giao (vlax-ename->vla-object (car n1)) (vlax-ename->vla-object (car n2)) acExtendNone)))
    (setq lstg1 (cons giao lstg1))))
  (if lstg1 (setq lstg (append lstg1 lstg))))
 (setq lstg (LM:UniqueFuzz (vl-sort lstg '(lambda(p q) (if (equal (car p) (car q) 1E-8) (< (cadr p) (cadr q)) (< (car p) (car q))))) 1E-8))
 (HA:hcn (car lstg) (last lstg) 0)
 (HA:OffsetInOut (entlast) lst "N")
 (setq kcm (* 0.9 (HA:DisMinMax lstg "min")))
 (setq ss (ssadd) ptx (polar (car lstg) 0 kcm))
 (while (< (car ptx) (car (last lstg)))
  (setq pty (polar ptx (/ pi 2) kcm))
  (while (< (cadr pty) (cadr (last lstg)))
   (setq ent (entlast))
   (command "boundary" pty "")
   (if (setq ent (entnext ent)) (setq ss (ssadd ent ss)))
   (setq pty (polar pty (/ pi 2) kcm)))
  (setq ptx (polar ptx 0 kcm)))
 (load "overkillsup.lsp") (acet-overkill2 (list ss 1E-8 nil "N" "N" "N"))
 (foreach ent (vl-remove-if 'listp (mapcar 'cadr (ssnamex (ssget "w" (car lstg) (last lstg) '((0 . "LWPOLYLINE"))))))
  (HA:OffsetInOut ent lst "T"))
 (acet-overkill2 (list (ssget "w" (car lstg) (last lstg) '((0 . "LWPOLYLINE"))) 1E-8 nil "N" "N" "N"))
 (setvar "cmdecho" cmd) (setvar "hpbound" hpb) (command "undo" "e") (princ) lst)
;----- Check xem 2 lines ent1 vµ ent2 n»m trªn cïng ®­êng th¼ng kh«ng?
(defun HA:2LineCollinear-p(ent1 ent2)
 (setq p1 (vlax-curve-getStartPoint ent1) p2 (vlax-curve-getEndPoint ent1)
       q1 (vlax-curve-getStartPoint ent2) q2 (vlax-curve-getEndPoint ent2))
 (and
  ((lambda(a b c) (or (equal (+ a b) c 1e-8) (equal (+ b c) a 1e-8) (equal (+ c a) b 1e-8))) (distance p1 p2) (distance p2 q1) (distance q1 p1))
  ((lambda(a b c) (or (equal (+ a b) c 1e-8) (equal (+ b c) a 1e-8) (equal (+ c a) b 1e-8))) (distance p1 p2) (distance p2 q2) (distance q2 p1))))
;----- Check xem ®iÓm p co n»m trong/ngoµi obj kin hay kh«ng?
(defun HA:PointInOut (p obj flag / flag1 obj1 obj2 lon nho)
 (setq obj1 (car (vlax-invoke obj 'Offset 1E-3))
       obj2 (car (vlax-invoke obj 'Offset -1E-3)))
 (if (> (vla-get-area obj1)(vla-get-area obj2))
  (setq lon obj1 nho obj2)
  (setq lon obj2 nho obj1))
 (if (> (distance p (vlax-curve-getClosestPointTo lon p))(distance p (vlax-curve-getClosestPointTo nho p)))
  (if (= flag "T")
   (setq flag1 T)))
 (mapcar 'vla-delete (list lon nho))
 flag1)
;----- Offset ent vµo bªn trong polygon, víi dis mçi c¹nh kh¸c nhau.
(defun HA:OffsetInOut(ent lstx flag / obj0 obj obj1 obj2 i mid objc objl lst lst1 lst2 lst3 lst4)
 (setq obj0 (vlax-ename->vla-object ent))
 (setq lst (mapcar 'cdr (vl-remove-if-not '(lambda(x) (= (car x) 10)) (entget ent))))
 (setq entlst (vl-remove-if 'listp (mapcar 'cadr (ssnamex (ssget "cp" lst '((0 . "LINE")))))))
 (setq lst1 (append lst lst))
 (setq i 0)
 (repeat (length lst)
  (setq obj (vlax-ename->vla-object (setq ent1 (entmakex (list (cons 0 "LINE") (cons 10 (nth i lst1)) (cons 11 (nth (1+ i) lst1)))))))
  (foreach ent2 entlst
   (if (HA:2LineCollinear-p ent1 ent2) (setq entL ent2)))
  (foreach ent lstx
   (if (equal entL (car ent)) (setq kcx (cadr ent))))
  (setq obj1 (car (vlax-invoke obj 'Offset (/ kcx 2))) obj2 (car (vlax-invoke obj 'Offset (/ kcx -2))))
  (setq mid (mapcar '(lambda(x y) (/ (+ x y) 2)) (vlax-curve-getStartPoint obj1) (vlax-curve-getEndPoint obj1)))
  (if (HA:PointInOut mid obj0 flag)
   (setq objc obj1 objl obj2)
   (setq objc obj2 objl obj1))
  (setq lst2 (cons objc lst2))
  (mapcar 'vla-delete (list objl obj))
  (setq i (1+ i)))
 (setq lst3 (append lst2 lst2))
 (setq i 0)
 (repeat (length lst2)
  (if (setq giao (HA:Giao (nth i lst3) (nth (1+ i) lst3) acExtendBoth))
   (setq lst4 (cons (car giao) lst4)))
  (setq i (1+ i)))
 (LWPoly lst4 1)
 (mapcar 'vla-delete (cons obj0 lst2)))
(defun LWPoly(lst cls)
 (entmakex (append (list 
    (cons 0 "LWPOLYLINE") (cons 100 "AcDbEntity") (cons 100 "AcDbPolyline") (cons 90 (length lst)) (cons 70 cls)) (mapcar (function (lambda (p) (cons 10 p))) lst))))
(defun HA:Giao(obj1 obj2 mode / l r)
 (setq l (vlax-invoke obj1 'intersectwith obj2 mode))
 (repeat (/ (length l) 3)
  (setq r (cons (list (car l) (cadr l) (caddr l)) r) l (cdddr l)))
 r)
(defun HA:hcn(p1 p3 kc / p1x p3x)
 (setq p1x (list (+ (min (car p1) (car p3)) kc) (+ (min (cadr p1) (cadr p3)) kc))
       p3x (list (- (max (car p1) (car p3)) kc) (- (max (cadr p1) (cadr p3)) kc)))
 (command "rectang" p1x p3x))
(defun LM:UniqueFuzz(l fz)
 (if l 
  (cons (car l) (LM:UniqueFuzz (vl-remove-if '(lambda(x) (equal x (car l) fz)) (cdr l)) fz))))
(defun HA:DisMinMax(lst func / ghan)
 (if (= (strcase func) "MIN") (setq func min ghan 1E15) (setq func max ghan -1E15))
 (apply 'func (apply 'append (mapcar '(lambda(p) (mapcar '(lambda(q) (if (equal p q 1E-8) ghan (distance p q))) lst)) lst))))

  • 1

* Chỉ nên yêu cầu Lisp khi bạn làm việc đó mất cả ngày nhưng họ chỉ viết 1 giờ. Đừng nêu yêu cầu Lisp khi bạn chỉ làm 1 giờ nhưng bắt họ phải mất cả ngày.

* Nhờ viết lisp cũng như đi khám bệnh. Chỉ gởi căn cước và than sắp chết thì không bác sỹ nào cứu sống được.


#62 phongtran86

phongtran86

    biết lệnh offset

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

Đã gửi 22 May 2013 - 09:12 PM

Liên kết một số comment lại, đọc thấy vui vui!

 

Xin LISP cũng nhiệt tình:

 

Kêu gọi:

 

Chuyển mục đích, từ chỗ cần xin chuyển sang giúp người ta sửa LISP:

 

Đe dọa!

 

Chuyển hướng đối tượng:

 

Không hiểu, nếu anh Doan Van Ha và anh Tue_NV không viết giúp, thì có bị bạn đe dọa, hay kêu gọi cứ mạnh dạn viết đi, sai thì bạn sửa dzùm không nhỉ? Hi hi, spam tý, để mọi người relax phát thôi!

Ha ha. Lyky bóc mẽ mình rồi :))


  • 0

#63 phongtran86

phongtran86

    biết lệnh offset

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

Đã gửi 22 May 2013 - 09:30 PM

Lisp của anh Hà đỉnh của đỉnh rồi :D. Cảm ơn nhiều nhiều. ha ha 100like luôn. :)).

.

.

.

.

Có chút là khi mình chọn đường trục cho bề rộng trước rồi, thi về sau chọn lại nó vẫn theo cái chọn trước rồi. HI HI HI HI. Thui chú ý 1 chút là được.

Anh Hà mệt với líp này quá.


  • 0

#64 Doan Van Ha

Doan Van Ha

    biết lệnh adcenter

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 5447 Bài viết
Điểm đánh giá: 2624 (tuyệt vời)

Đã gửi 23 May 2013 - 08:17 AM

Lisp của anh Hà đỉnh của đỉnh rồi :D. Cảm ơn nhiều nhiều. ha ha 100like luôn. :)).

.

.

.

.

Có chút là khi mình chọn đường trục cho bề rộng trước rồi, thi về sau chọn lại nó vẫn theo cái chọn trước rồi. HI HI HI HI. Thui chú ý 1 chút là được.

Anh Hà mệt với líp này quá.

Tôi quên mất việc đánh dấu các đối tượng đã chọn. Bạn bổ sung như sau:

1). Thêm dòng này:

(mapcar '(lambda(ent) (grdraw (vlax-curve-getStartPoint ent) (vlax-curve-getEndPoint ent) 2)) lsti)

Vào ngay dưới dòng này:

(setq lsti (vl-remove-if 'listp (mapcar 'cadr (ssnamex ss))))

2). Và thêm đoạn này:

(redraw)

Vào ngay trước đoạn này:

(princ)

Số 2 ở dòng trên tượng trưng màu vàng. Bạn thích màu nào thì sửa con số đó. Chúc thành công!


  • 1

* Chỉ nên yêu cầu Lisp khi bạn làm việc đó mất cả ngày nhưng họ chỉ viết 1 giờ. Đừng nêu yêu cầu Lisp khi bạn chỉ làm 1 giờ nhưng bắt họ phải mất cả ngày.

* Nhờ viết lisp cũng như đi khám bệnh. Chỉ gởi căn cước và than sắp chết thì không bác sỹ nào cứu sống được.


#65 phongtran86

phongtran86

    biết lệnh offset

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

Đã gửi 23 May 2013 - 08:56 AM

cái này là cái đánh dấu, khá hay. ý em là nếu mình đã lỡ chọn trục nhập kích thước 220 rồi chẳng hạn. mà về sau chọn này trục này nhập 150 thì nó vẫn theo cái bề rông ban đầu, ý em muốn là nó theo cái bề rông sau cùng mà mình chọn ấy. :D:D, như thế hay hơn. he he


  • 0

#66 Doan Van Ha

Doan Van Ha

    biết lệnh adcenter

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 5447 Bài viết
Điểm đánh giá: 2624 (tuyệt vời)

Đã gửi 23 May 2013 - 09:16 AM

cái này là cái đánh dấu, khá hay. ý em là nếu mình đã lỡ chọn trục nhập kích thước 220 rồi chẳng hạn. mà về sau chọn này trục này nhập 150 thì nó vẫn theo cái bề rông ban đầu, ý em muốn là nó theo cái bề rông sau cùng mà mình chọn ấy. :D:D, như thế hay hơn. he he

Sửa tất tần tật các yêu cầu cho bạn đây!

 

;Doan Van Ha - CADViet.com - Ngay 22/05/2013
;Chuc nang: ve luoi dam/tuong theo he truc // XOY, be rong tuy chon, luoi break bat ky nhung o ngoai cung phai la HCN.
(defun C:HA(/ ss lsti lst lstg1 giao lstg kcm ptx pty ent)
 (vl-load-com) (command "undo" "be") (redraw)
 (setq cmd (getvar "cmdecho") osm (getvar "osmode") hpb (getvar "hpbound")) (setvar "cmdecho" 0) (setvar "osmode" 0) (setvar "hpbound" 1)
 (while
  (and
   (princ "\nChon cac Line duong truc...")
   (setq ss (ssget '((0 . "LINE"))))
   (setq lsti (vl-remove-if 'listp (mapcar 'cadr (ssnamex ss))))
   (or kc (setq kc 110))
   (setq kc (cond ((getdist (strcat "\nBe rong tuong/dam <" (rtos kc 2 2) ">:"))) (kc)))
   (mapcar '(lambda(ent) (grdraw (vlax-curve-getStartPoint ent) (vlax-curve-getEndPoint ent) 2)) lsti))
  (setq lst (reverse (append (mapcar '(lambda(ent) (list ent kc)) lsti) lst))))
 (foreach n1 lst
  (setq lstg1 nil)
  (foreach n2 lst
   (if (setq giao (car (HA:Giao (vlax-ename->vla-object (car n1)) (vlax-ename->vla-object (car n2)) acExtendNone)))
    (setq lstg1 (cons giao lstg1))))
  (if lstg1 (setq lstg (append lstg1 lstg))))
 (setq lstg (LM:UniqueFuzz (vl-sort lstg '(lambda(p q) (if (equal (car p) (car q) 1E-8) (< (cadr p) (cadr q)) (< (car p) (car q))))) 1E-8))
 (HA:hcn (car lstg) (last lstg) 0)
 (HA:OffsetInOut (entlast) lst "N")
 (setq kcm (* 0.9 (HA:DisMinMax lstg "min")))
 (setq ss (ssadd) ptx (polar (car lstg) 0 kcm))
 (while (< (car ptx) (car (last lstg)))
  (setq pty (polar ptx (/ pi 2) kcm))
  (while (< (cadr pty) (cadr (last lstg)))
   (setq ent (entlast))
   (command "boundary" pty "")
   (if (setq ent (entnext ent)) (setq ss (ssadd ent ss)))
   (setq pty (polar pty (/ pi 2) kcm)))
  (setq ptx (polar ptx 0 kcm)))
 (load "overkillsup.lsp") (acet-overkill2 (list ss 1E-8 nil "N" "N" "N"))
 (foreach ent (vl-remove-if 'listp (mapcar 'cadr (ssnamex (ssget "w" (car lstg) (last lstg) '((0 . "LWPOLYLINE"))))))
  (HA:OffsetInOut ent lst "T"))
 (acet-overkill2 (list (ssget "w" (car lstg) (last lstg) '((0 . "LWPOLYLINE"))) 1E-8 nil "N" "N" "N"))
 (setvar "cmdecho" cmd) (setvar "hpbound" hpb) (command "undo" "e") (redraw) (princ) lst)
;----- Check xem 2 lines ent1 vµ ent2 n»m trªn cïng ®­êng th¼ng kh«ng?
(defun HA:2LineCollinear-p(ent1 ent2)
 (setq p1 (vlax-curve-getStartPoint ent1) p2 (vlax-curve-getEndPoint ent1)
       q1 (vlax-curve-getStartPoint ent2) q2 (vlax-curve-getEndPoint ent2))
 (and
  ((lambda(a b c) (or (equal (+ a b) c 1e-8) (equal (+ b c) a 1e-8) (equal (+ c a) b 1e-8))) (distance p1 p2) (distance p2 q1) (distance q1 p1))
  ((lambda(a b c) (or (equal (+ a b) c 1e-8) (equal (+ b c) a 1e-8) (equal (+ c a) b 1e-8))) (distance p1 p2) (distance p2 q2) (distance q2 p1))))
;----- Check xem ®iÓm p co n»m trong/ngoµi obj kin hay kh«ng?
(defun HA:PointInOut (p obj flag / flag1 obj1 obj2 lon nho)
 (setq obj1 (car (vlax-invoke obj 'Offset 1E-3))
       obj2 (car (vlax-invoke obj 'Offset -1E-3)))
 (if (> (vla-get-area obj1)(vla-get-area obj2))
  (setq lon obj1 nho obj2)
  (setq lon obj2 nho obj1))
 (if (> (distance p (vlax-curve-getClosestPointTo lon p))(distance p (vlax-curve-getClosestPointTo nho p)))
  (if (= flag "T")
   (setq flag1 T)))
 (mapcar 'vla-delete (list lon nho))
 flag1)
;----- Offset ent vµo bªn trong polygon, víi dis mçi c¹nh kh¸c nhau.
(defun HA:OffsetInOut(ent lstx flag / obj0 obj obj1 obj2 i mid objc objl lst lst1 lst2 lst3 lst4)
 (setq obj0 (vlax-ename->vla-object ent))
 (setq lst (mapcar 'cdr (vl-remove-if-not '(lambda(x) (= (car x) 10)) (entget ent))))
 (setq entlst (vl-remove-if 'listp (mapcar 'cadr (ssnamex (ssget "cp" lst '((0 . "LINE")))))))
 (setq lst1 (append lst lst))
 (setq i 0)
 (repeat (length lst)
  (setq obj (vlax-ename->vla-object (setq ent1 (entmakex (list (cons 0 "LINE") (cons 10 (nth i lst1)) (cons 11 (nth (1+ i) lst1)))))))
  (foreach ent2 entlst
   (if (HA:2LineCollinear-p ent1 ent2) (setq entL ent2)))
  (foreach ent lstx
   (if (equal entL (car ent)) (setq kcx (cadr ent))))
  (setq obj1 (car (vlax-invoke obj 'Offset (/ kcx 2))) obj2 (car (vlax-invoke obj 'Offset (/ kcx -2))))
  (setq mid (mapcar '(lambda(x y) (/ (+ x y) 2)) (vlax-curve-getStartPoint obj1) (vlax-curve-getEndPoint obj1)))
  (if (HA:PointInOut mid obj0 flag)
   (setq objc obj1 objl obj2)
   (setq objc obj2 objl obj1))
  (setq lst2 (cons objc lst2))
  (mapcar 'vla-delete (list objl obj))
  (setq i (1+ i)))
 (setq lst3 (append lst2 lst2))
 (setq i 0)
 (repeat (length lst2)
  (if (setq giao (HA:Giao (nth i lst3) (nth (1+ i) lst3) acExtendBoth))
   (setq lst4 (cons (car giao) lst4)))
  (setq i (1+ i)))
 (LWPoly lst4 1)
 (mapcar 'vla-delete (cons obj0 lst2)))
(defun LWPoly(lst cls)
 (entmakex (append (list 
    (cons 0 "LWPOLYLINE") (cons 100 "AcDbEntity") (cons 100 "AcDbPolyline") (cons 90 (length lst)) (cons 70 cls)) (mapcar (function (lambda (p) (cons 10 p))) lst))))
(defun HA:Giao(obj1 obj2 mode / l r)
 (setq l (vlax-invoke obj1 'intersectwith obj2 mode))
 (repeat (/ (length l) 3)
  (setq r (cons (list (car l) (cadr l) (caddr l)) r) l (cdddr l)))
 r)
(defun HA:hcn(p1 p3 kc / p1x p3x)
 (setq p1x (list (+ (min (car p1) (car p3)) kc) (+ (min (cadr p1) (cadr p3)) kc))
       p3x (list (- (max (car p1) (car p3)) kc) (- (max (cadr p1) (cadr p3)) kc)))
 (command "rectang" p1x p3x))
(defun LM:UniqueFuzz(l fz)
 (if l 
  (cons (car l) (LM:UniqueFuzz (vl-remove-if '(lambda(x) (equal x (car l) fz)) (cdr l)) fz))))
(defun HA:DisMinMax(lst func / ghan)
 (if (= (strcase func) "MIN") (setq func min ghan 1E15) (setq func max ghan -1E15))
 (apply 'func (apply 'append (mapcar '(lambda(p) (mapcar '(lambda(q) (if (equal p q 1E-8) ghan (distance p q))) lst)) lst))))

  • 1

* Chỉ nên yêu cầu Lisp khi bạn làm việc đó mất cả ngày nhưng họ chỉ viết 1 giờ. Đừng nêu yêu cầu Lisp khi bạn chỉ làm 1 giờ nhưng bắt họ phải mất cả ngày.

* Nhờ viết lisp cũng như đi khám bệnh. Chỉ gởi căn cước và than sắp chết thì không bác sỹ nào cứu sống được.


#67 tien2005

tien2005

    biết lệnh properties

  • Members
  • PipPipPipPip
  • 257 Bài viết
Điểm đánh giá: 94 (tàm tạm)

Đã gửi 23 May 2013 - 10:07 AM

Tuyệt lắm bác HA.

Để thêm màu sinh động hơn Bạn đổi màu grdraw sau mỗi lần chọn


  • 0

#68 phongtran86

phongtran86

    biết lệnh offset

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

Đã gửi 23 May 2013 - 10:16 AM

ok anh. thanks anh nhiều. cơ mà sao bây h sau khi ấn enter cuối cùng, nó đơ 1 lúc luôn. hiện 1 loạt code ở dòng cmd:

((<Entity name: -5902b00> 220.0) (<Entity name: -5902b08> 220.0) (<Entity name:
-5902b10> 220.0) (<Entity name: -5902b18> 220.0) (<Entity name: -5902b20>
220.0) (<Entity name: -5902b28> 220.0) (<Entity name: -5902b30> 220.0) (<Entity
name: -5902b00> 150.0)). mặt bằng kc to to tí thì đơ khá là lâu.

Code này sửa chọn dầm được 1 lần thôi phải không anh, chọn tất cả trục bề rộng 220 này, chọn lại 1 số trục để 150 này thì đc. Nhưng nếu để 1 số trục 150 này, chọn tiếp số trục khác để 110 chẳng hạn thì chỉ cái chọn cuối thay đổi. cái 150 kia ko đổi dc. :D, Nói chung vấn đề nhỏ anh nhỉ. Quá tuyệt vời rồi.

Với lại mình định thêm code (COMMAND "OSNAP" "END,INT,INS,NOD,CEN,MID,QUA,PERP,NEA") vào sau cái (princ) lst để nó bật bắt điểm. Sau khi lệnh thực hiện mất hết bắt điểm mà :D


  • 0

#69 Doan Van Ha

Doan Van Ha

    biết lệnh adcenter

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 5447 Bài viết
Điểm đánh giá: 2624 (tuyệt vời)

Đã gửi 23 May 2013 - 11:06 AM

1). Bổ sung đãng trí quên reverse osnap.

2). Bỏ mấy dòng đãng trí in ra trên screen.

3). Bổ sung chọn lần sau thay lần trước.

4). Bổ sung xanh đỏ tím vàng lục lam cam chàm tím cho mỗi lần chọn theo y/c của bạn Tien05.

 

;Doan Van Ha - CADViet.com - Ngay 23/05/2013
;Chuc nang: ve luoi dam/tuong theo he truc // XOY, be rong tuy chon, luoi break bat ky nhung o ngoai cung phai la HCN.
(defun C:HA(/ ss lsti lst lstg1 giao lstg kcm ptx pty ent col)
 (vl-load-com) (command "undo" "be") (redraw)
 (setq cmd (getvar "cmdecho") osm (getvar "osmode") hpb (getvar "hpbound")) (setvar "cmdecho" 0) (setvar "osmode" 0) (setvar "hpbound" 1)
 (setq col 1)
 (while
  (and
   (princ "\nChon cac Line duong truc...")
   (setq ss (ssget '((0 . "LINE"))))
   (setq lsti (vl-remove-if 'listp (mapcar 'cadr (ssnamex ss))))
   (or kc (setq kc 110))
   (setq kc (cond ((getdist (strcat "\nBe rong tuong/dam <" (rtos kc 2 2) ">:"))) (kc))))
  (mapcar '(lambda(ent) (grdraw (vlax-curve-getStartPoint ent) (vlax-curve-getEndPoint ent) col)) lsti)
  (setq lst (append (mapcar '(lambda(ent) (list ent kc)) lsti) lst))
  (setq col (1+ col)))
 (setq lst (reverse lst))
 (foreach n1 lst
  (setq lstg1 nil)
  (foreach n2 lst
   (if (setq giao (car (HA:Giao (vlax-ename->vla-object (car n1)) (vlax-ename->vla-object (car n2)) acExtendNone)))
    (setq lstg1 (cons giao lstg1))))
  (if lstg1 (setq lstg (append lstg1 lstg))))
 (setq lstg (LM:UniqueFuzz (vl-sort lstg '(lambda(p q) (if (equal (car p) (car q) 1E-8) (< (cadr p) (cadr q)) (< (car p) (car q))))) 1E-8))
 (HA:hcn (car lstg) (last lstg) 0)
 (HA:OffsetInOut (entlast) lst "N")
 (setq kcm (* 0.9 (HA:DisMinMax lstg "min")))
 (setq ss (ssadd) ptx (polar (car lstg) 0 kcm))
 (while (< (car ptx) (car (last lstg)))
  (setq pty (polar ptx (/ pi 2) kcm))
  (while (< (cadr pty) (cadr (last lstg)))
   (setq ent (entlast))
   (command "boundary" pty "")
   (if (setq ent (entnext ent)) (setq ss (ssadd ent ss)))
   (setq pty (polar pty (/ pi 2) kcm)))
  (setq ptx (polar ptx 0 kcm)))
 (load "overkillsup.lsp") (acet-overkill2 (list ss 1E-8 nil "N" "N" "N"))
 (foreach ent (vl-remove-if 'listp (mapcar 'cadr (ssnamex (ssget "w" (car lstg) (last lstg) '((0 . "LWPOLYLINE"))))))
  (HA:OffsetInOut ent lst "T"))
 (acet-overkill2 (list (ssget "w" (car lstg) (last lstg) '((0 . "LWPOLYLINE"))) 1E-8 nil "N" "N" "N"))
 (setvar "cmdecho" cmd) (setvar "hpbound" hpb) (setvar "osmode" osm) (command "undo" "e") (redraw) (princ))
;----- Check xem 2 lines ent1 vµ ent2 n»m trªn cïng ®­êng th¼ng kh«ng?
(defun HA:2LineCollinear-p(ent1 ent2)
 (setq p1 (vlax-curve-getStartPoint ent1) p2 (vlax-curve-getEndPoint ent1)
       q1 (vlax-curve-getStartPoint ent2) q2 (vlax-curve-getEndPoint ent2))
 (and
  ((lambda(a b c) (or (equal (+ a b) c 1e-8) (equal (+ b c) a 1e-8) (equal (+ c a) b 1e-8))) (distance p1 p2) (distance p2 q1) (distance q1 p1))
  ((lambda(a b c) (or (equal (+ a b) c 1e-8) (equal (+ b c) a 1e-8) (equal (+ c a) b 1e-8))) (distance p1 p2) (distance p2 q2) (distance q2 p1))))
;----- Check xem ®iÓm p co n»m trong/ngoµi obj kin hay kh«ng?
(defun HA:PointInOut (p obj flag / flag1 obj1 obj2 lon nho)
 (setq obj1 (car (vlax-invoke obj 'Offset 1E-3))
       obj2 (car (vlax-invoke obj 'Offset -1E-3)))
 (if (> (vla-get-area obj1)(vla-get-area obj2))
  (setq lon obj1 nho obj2)
  (setq lon obj2 nho obj1))
 (if (> (distance p (vlax-curve-getClosestPointTo lon p))(distance p (vlax-curve-getClosestPointTo nho p)))
  (if (= flag "T")
   (setq flag1 T)))
 (mapcar 'vla-delete (list lon nho))
 flag1)
;----- Offset ent vµo bªn trong polygon, víi dis mçi c¹nh kh¸c nhau.
(defun HA:OffsetInOut(ent lstx flag / obj0 obj obj1 obj2 i mid objc objl lst lst1 lst2 lst3 lst4)
 (setq obj0 (vlax-ename->vla-object ent))
 (setq lst (mapcar 'cdr (vl-remove-if-not '(lambda(x) (= (car x) 10)) (entget ent))))
 (setq entlst (vl-remove-if 'listp (mapcar 'cadr (ssnamex (ssget "cp" lst '((0 . "LINE")))))))
 (setq lst1 (append lst lst))
 (setq i 0)
 (repeat (length lst)
  (setq obj (vlax-ename->vla-object (setq ent1 (entmakex (list (cons 0 "LINE") (cons 10 (nth i lst1)) (cons 11 (nth (1+ i) lst1)))))))
  (foreach ent2 entlst
   (if (HA:2LineCollinear-p ent1 ent2) (setq entL ent2)))
  (foreach ent lstx
   (if (equal entL (car ent)) (setq kcx (cadr ent))))
  (setq obj1 (car (vlax-invoke obj 'Offset (/ kcx 2))) obj2 (car (vlax-invoke obj 'Offset (/ kcx -2))))
  (setq mid (mapcar '(lambda(x y) (/ (+ x y) 2)) (vlax-curve-getStartPoint obj1) (vlax-curve-getEndPoint obj1)))
  (if (HA:PointInOut mid obj0 flag)
   (setq objc obj1 objl obj2)
   (setq objc obj2 objl obj1))
  (setq lst2 (cons objc lst2))
  (mapcar 'vla-delete (list objl obj))
  (setq i (1+ i)))
 (setq lst3 (append lst2 lst2))
 (setq i 0)
 (repeat (length lst2)
  (if (setq giao (HA:Giao (nth i lst3) (nth (1+ i) lst3) acExtendBoth))
   (setq lst4 (cons (car giao) lst4)))
  (setq i (1+ i)))
 (LWPoly lst4 1)
 (mapcar 'vla-delete (cons obj0 lst2)))
(defun LWPoly(lst cls)
 (entmakex (append (list 
    (cons 0 "LWPOLYLINE") (cons 100 "AcDbEntity") (cons 100 "AcDbPolyline") (cons 90 (length lst)) (cons 70 cls)) (mapcar (function (lambda (p) (cons 10 p))) lst))))
(defun HA:Giao(obj1 obj2 mode / l r)
 (setq l (vlax-invoke obj1 'intersectwith obj2 mode))
 (repeat (/ (length l) 3)
  (setq r (cons (list (car l) (cadr l) (caddr l)) r) l (cdddr l)))
 r)
(defun HA:hcn(p1 p3 kc / p1x p3x)
 (setq p1x (list (+ (min (car p1) (car p3)) kc) (+ (min (cadr p1) (cadr p3)) kc))
       p3x (list (- (max (car p1) (car p3)) kc) (- (max (cadr p1) (cadr p3)) kc)))
 (command "rectang" p1x p3x))
(defun LM:UniqueFuzz(l fz)
 (if l 
  (cons (car l) (LM:UniqueFuzz (vl-remove-if '(lambda(x) (equal x (car l) fz)) (cdr l)) fz))))
(defun HA:DisMinMax(lst func / ghan)
 (if (= (strcase func) "MIN") (setq func min ghan 1E15) (setq func max ghan -1E15))
 (apply 'func (apply 'append (mapcar '(lambda(p) (mapcar '(lambda(q) (if (equal p q 1E-8) ghan (distance p q))) lst)) lst))))

  • 1

* Chỉ nên yêu cầu Lisp khi bạn làm việc đó mất cả ngày nhưng họ chỉ viết 1 giờ. Đừng nêu yêu cầu Lisp khi bạn chỉ làm 1 giờ nhưng bắt họ phải mất cả ngày.

* Nhờ viết lisp cũng như đi khám bệnh. Chỉ gởi căn cước và than sắp chết thì không bác sỹ nào cứu sống được.


#70 phongtran86

phongtran86

    biết lệnh offset

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

Đã gửi 23 May 2013 - 02:00 PM

Cái này người ta gọi là pơ phẹc đấy anh Hà ah. Quá tuyệt vời, hoàn hảo há há


  • 0

#71 Tue_NV

Tue_NV

    KS Võ Quang Tuệ

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

Đã gửi 23 May 2013 - 03:01 PM

Cái này người ta gọi là pơ phẹc đấy anh Hà ah. Quá tuyệt vời, hoàn hảo há há

 

Chưa pơ phẹc đâu. Lisp còn có điểm hạn chế, tác giả đã ghi như vầy, xử được điểm này nữa mới "pơ phẹc" được

 

;Chuc nang: ve luoi dam/tuong theo he truc // XOY, be rong tuy chon, luoi break bat ky nhung o ngoai cung phai la HCN.


  • 0

#72 Doan Van Ha

Doan Van Ha

    biết lệnh adcenter

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 5447 Bài viết
Điểm đánh giá: 2624 (tuyệt vời)

Đã gửi 23 May 2013 - 03:11 PM

Chưa pơ phẹc đâu. Lisp còn có điểm hạn chế, tác giả đã ghi như vầy, xử được điểm này nữa mới "pơ phẹc" được

 

;Chuc nang: ve luoi dam/tuong theo he truc // XOY, be rong tuy chon, luoi break bat ky nhung o ngoai cung phai la HCN.

Xử lý được cái gọi là "pơ phẹc" ấy thì cũng chưa pơ phẹc đâu. Còn vô vàn thứ nữa, bởi ai biết được mặt bằng đường trục ấy gồm những gì?

Quan trọng gì cái gọi là pơ phẹc kia nhỉ?


  • 0

* Chỉ nên yêu cầu Lisp khi bạn làm việc đó mất cả ngày nhưng họ chỉ viết 1 giờ. Đừng nêu yêu cầu Lisp khi bạn chỉ làm 1 giờ nhưng bắt họ phải mất cả ngày.

* Nhờ viết lisp cũng như đi khám bệnh. Chỉ gởi căn cước và than sắp chết thì không bác sỹ nào cứu sống được.


#73 phongtran86

phongtran86

    biết lệnh offset

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

Đã gửi 23 May 2013 - 03:21 PM

Ha ha. Anh TUe_NV đam mê sự hoàn hảo ah. Nếu nói thế thì đúng là còn vô vàn thứ thật. Hehe. Thế anh Tuệ tiếp tục phát triển đi. Em ủng hộ 2 chân 2 tay.


  • 0

#74 Tue_NV

Tue_NV

    KS Võ Quang Tuệ

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

Đã gửi 23 May 2013 - 03:32 PM

Xử lý được cái gọi là "pơ phẹc" ấy thì cũng chưa pơ phẹc đâu. Còn vô vàn thứ nữa, bởi ai biết được mặt bằng đường trục ấy gồm những gì?

Quan trọng gì cái gọi là pơ phẹc kia nhỉ?

 

- Chỉ đơn thuần là MB nhà không phải là Hình chữ nhật thôi bác ạ.

Trục đơn thuần chỉ là trục dầm, tạo nên các ô sàn


  • 0

#75 Doan Van Ha

Doan Van Ha

    biết lệnh adcenter

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 5447 Bài viết
Điểm đánh giá: 2624 (tuyệt vời)

Đã gửi 23 May 2013 - 03:47 PM

- Chỉ đơn thuần là MB nhà không phải là Hình chữ nhật thôi bác ạ.

Trục đơn thuần chỉ là trục dầm, tạo nên các ô sàn

Cái này đã nghĩ rồi, le lói giải thuật rồi, nhưng còn vài thứ lăn tăn quanh quẩn nó mà lại tốn khá nhiều noron and time nên tạm ngừng. Chừng nào hứng mần tiếp, hoặc bác đang hứng thì mần giùm mọi người đi!


  • 0

* Chỉ nên yêu cầu Lisp khi bạn làm việc đó mất cả ngày nhưng họ chỉ viết 1 giờ. Đừng nêu yêu cầu Lisp khi bạn chỉ làm 1 giờ nhưng bắt họ phải mất cả ngày.

* Nhờ viết lisp cũng như đi khám bệnh. Chỉ gởi căn cước và than sắp chết thì không bác sỹ nào cứu sống được.


#76 phongtran86

phongtran86

    biết lệnh offset

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

Đã gửi 23 May 2013 - 05:07 PM

Yahooooooooooooo. Chờ đợi anh Tue_nv phát triển tiếp :)


  • 0

#77 phongtran86

phongtran86

    biết lệnh offset

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

Đã gửi 24 May 2013 - 01:51 PM

Yahoooooooooooooooooo hù hu


  • 0

#78 phongtran86

phongtran86

    biết lệnh offset

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

Đã gửi 24 May 2013 - 10:26 PM

Anh Hà ơi em hỏi chút: Select objects:
Be rong tuong/dam <110.00>:
Chon cac Line duong truc...
Select objects:  ; error: bad argument type: lselsetp nil

Một số trục khi em copy của ktruc để vẽ nó bị lỗi thế va ko hiện bản vẽ dầm. Lỗi do đâu. Copy riêng trục sang bản vẽ khác vẫn bị lỗi trên. :)


  • 0

#79 Doan Van Ha

Doan Van Ha

    biết lệnh adcenter

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 5447 Bài viết
Điểm đánh giá: 2624 (tuyệt vời)

Đã gửi 24 May 2013 - 10:34 PM

Sao bạn không gởi cái bản vẽ ấy lên để "xem dung nhan ấy bây giờ ra sao"?


  • 0

* Chỉ nên yêu cầu Lisp khi bạn làm việc đó mất cả ngày nhưng họ chỉ viết 1 giờ. Đừng nêu yêu cầu Lisp khi bạn chỉ làm 1 giờ nhưng bắt họ phải mất cả ngày.

* Nhờ viết lisp cũng như đi khám bệnh. Chỉ gởi căn cước và than sắp chết thì không bác sỹ nào cứu sống được.


#80 phongtran86

phongtran86

    biết lệnh offset

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

Đã gửi 25 May 2013 - 07:47 AM

Sao bạn không gởi cái bản vẽ ấy lên để "xem dung nhan ấy bây giờ ra sao"?

http://www.cadviet.c...8_new_block.dwg

anh xem giúp em nhé :)


  • 0


Trở lại AutoLisp