Đến nội dung


Hình ảnh
- - - - -

[Nhờ giúp đỡ] lisp chia viewport trong layout


  • Please log in to reply
32 replies to this topic

#21 Tot77

Tot77

    biết lệnh adcenter

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

Đã gửi 18 August 2014 - 07:42 AM

Bạn thêm dòng này ở đầu ct : (setvar 'clayer "defpoints")


  • 2

#22 nhoclangbat

nhoclangbat

    Edu level: li10

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

Đã gửi 18 August 2014 - 08:46 AM

anh @Tot77 ơi anh có thể sữa lips 1 chút xíu là sau khi chia vp sẽ trả lại layer cũ của vp đồng thời khóa các vp đã đc chia ^^

thanks anh nhiều 


  • 0
"...................][)e\/i][_ /\/\@Y CrY....................."

(defun THỔ_DÂN_HỌC_CAD (xxxx) ...) ^_^








#23 Tot77

Tot77

    biết lệnh adcenter

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

Đã gửi 18 August 2014 - 09:37 AM

Bạn dùng cái này.

(defun c:cvp(/ os vp tt10 tt12 tt40 tt41 tyle p1 p2 b c layer)
  (defun dxf (id v) (cdr (assoc id (entget v))))
  (defun dtim (pt) (polar tt12 (angle tt10 pt) (* tyle (distance tt10 pt))))
  (defun make (a b / obj)
    (command "mview" a b)
    (vla-put-CustomScale (setq obj (vlax-ename->vla-object (entlast))) (/ 1.0 tyle))
    (vla-put-Layer obj layer)    
    (command "MSPACE")
    (command "zoom" (dtim a) (dtim b))
    (command "PSPACE")
    (vla-put-DisplayLocked obj :vlax-true)
  )
  
  (command "undo" "be")
  (setq os (getvar 'osmode))
  (mapcar 'setvar (list 'orthomode 'tilemode 'cmdecho 'osmode) (list 1 0 0 0))
  (setq vp  (car (entsel "\nChon viewport: "))
tt10 (dxf 10 vp)
tt12 (dxf 12 vp)
tt40 (dxf 40 vp)
tt41 (dxf 41 vp)
layer (dxf 8 vp)
tyle (/ (dxf 45 vp) tt41 1.0)
p1 (polar (polar tt10 pi (* 0.5 tt40)) (* -0.5 pi) (* 0.5 tt41))
p2 (polar (polar tt10 0 (* 0.5 tt40)) (* 0.5 pi) (* 0.5 tt41))
b (getpoint "\Diem chia: ")
c (getpoint b "\nTheo huong <Enter neu chia 4>: "))
 
  (cond ((eq (car b) (car c))
           (make p1 (list (car b) (cadr p2)))
  (make (list (car b) (cadr p1)) p2))
 
((eq (cadr b) (cadr c)) 
           (make p1 (list (car p2) (cadr b)))
  (make (list (car p1) (cadr b)) p2))
 
        (t (make p1 b) (make b p2)
  (make b (list (car p1) (cadr p2)))
  (make b (list (car p2) (cadr p1))))
  )
  (entdel vp)
  (command "undo" "e")
  (mapcar 'setvar (list 'orthomode 'tilemode 'cmdecho 'osmode) (list 0 0 1 os))  
)

  • 3

#24 proconeng86

proconeng86

    biết lệnh break

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

Đã gửi 18 August 2014 - 09:54 AM

Bạn dùng cái này.

 

(defun c:cvp(/ os vp tt10 tt12 tt40 tt41 tyle p1 p2 b c layer)
  (defun dxf (id v) (cdr (assoc id (entget v))))
  (defun dtim (pt) (polar tt12 (angle tt10 pt) (* tyle (distance tt10 pt))))
  (defun make (a b / obj)
    (command "mview" a b)
    (vla-put-CustomScale (setq obj (vlax-ename->vla-object (entlast))) (/ 1.0 tyle))
    (vla-put-Layer obj layer)    
    (command "MSPACE")
    (command "zoom" (dtim a) (dtim b))
    (command "PSPACE")
    (vla-put-DisplayLocked obj :vlax-true)
  )
  
  (command "undo" "be")
  (setq os (getvar 'osmode))
  (mapcar 'setvar (list 'orthomode 'tilemode 'cmdecho 'osmode) (list 1 0 0 0))
  (setq vp  (car (entsel "\nChon viewport: "))
tt10 (dxf 10 vp)
tt12 (dxf 12 vp)
tt40 (dxf 40 vp)
tt41 (dxf 41 vp)
layer (dxf 8 vp)
tyle (/ (dxf 45 vp) tt41 1.0)
p1 (polar (polar tt10 pi (* 0.5 tt40)) (* -0.5 pi) (* 0.5 tt41))
p2 (polar (polar tt10 0 (* 0.5 tt40)) (* 0.5 pi) (* 0.5 tt41))
b (getpoint "\Diem chia: ")
c (getpoint b "\nTheo huong <Enter neu chia 4>: "))
 
  (cond ((eq (car b) (car c))
           (make p1 (list (car b) (cadr p2)))
  (make (list (car b) (cadr p1)) p2))
 
((eq (cadr b) (cadr c)) 
           (make p1 (list (car p2) (cadr b)))
  (make (list (car p1) (cadr b)) p2))
 
        (t (make p1 b) (make b p2)
  (make b (list (car p1) (cadr p2)))
  (make b (list (car p2) (cadr p1))))
  )
  (entdel vp)
  (command "undo" "e")
  (mapcar 'setvar (list 'orthomode 'tilemode 'cmdecho 'osmode) (list 0 0 1 os))  
)

 

Bạn Tot77 sửa lại lisp trên giúp mình là chuyển layer vp thành defpoint được không. Lisp trên mình cho thêm dòng (setvar 'clayer "defpoints") vào nhưng không được

Mình cám ơn nhiều


  • 0

#25 Tot77

Tot77

    biết lệnh adcenter

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

Đã gửi 18 August 2014 - 10:04 AM

BẠn dùng cái lsp ở #23 cũng được.


  • 0

#26 proconeng86

proconeng86

    biết lệnh break

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

Đã gửi 18 August 2014 - 11:37 AM

BẠn dùng cái lsp ở #23 cũng được.

 

Tuy nhiên cái lisp đó là giữ nguyên layer của vp. Tại vì thì thoảng không để ý, mình chưa đổi layer về defpoint đã tạo vp, khi đó khi in ra sẽ bị thấy vp. Do đó mình muốn nó luôn mặc định layer là defpoint, sẽ ít bị lỗi hơn khi làm


  • 0

#27 Tot77

Tot77

    biết lệnh adcenter

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

Đã gửi 18 August 2014 - 01:03 PM

Vì trg hợp của bạn đặc biệt nên làm thêm cho bạn cái lệnh đổi layer của tất ca viewport sang defpoints, cứ để cái lsp trên như thế.

Bạn dùng lệnh này trước khi dùng lsp chia vp.

 

(defun c:dlay()
  (mapcar '(lambda(x) (vla-put-Layer (vlax-ename->vla-object x) "DEFPOINTS"))
   (vl-remove-if 'listp (mapcar 'cadr (ssnamex (ssget "X" '((0 . "VIEWPORT")))))))
  (princ)
)

  • 1

#28 proconeng86

proconeng86

    biết lệnh break

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

Đã gửi 18 August 2014 - 02:36 PM

Vì trg hợp của bạn đặc biệt nên làm thêm cho bạn cái lệnh đổi layer của tất ca viewport sang defpoints, cứ để cái lsp trên như thế.

Bạn dùng lệnh này trước khi dùng lsp chia vp.

 

(defun c:dlay()
  (mapcar '(lambda(x) (vla-put-Layer (vlax-ename->vla-object x) "DEFPOINTS"))
   (vl-remove-if 'listp (mapcar 'cadr (ssnamex (ssget "X" '((0 . "VIEWPORT")))))))
  (princ)
)

 

Thế này thì hơi mất công nhỉ, phải gõ 2 lệnh. bạn không gộp vào cho mình được ah. Cái lisp trên của mình, bạn bảo thêm 1 dòng vô đó, lisp đó là được, chỉ thêm khóa vp cho lisp đó thôi mà. Mình tưởng đơn giản chứ


  • 0

#29 Tot77

Tot77

    biết lệnh adcenter

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

Đã gửi 18 August 2014 - 03:42 PM

Vì có thể có những ng khác không dùng layer defpoints như bạn cho nên mới làm riêng cho bạn cái đổi layer.

Bạn có thể gộp chung và đặt tên lệnh theo ý mình, bạn cứ chép 2 cái trên vào 1 file rồi thêm 1 dòng nữa như thế này:

 

(defun c:tenlenhbanmuon() (c:dlay) (c:cvp))

 

Đây cũng là cách để đổi tên những lệnh của file vlx khi không trực tiếp sửa file được.


  • 1

#30 proconeng86

proconeng86

    biết lệnh break

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

Đã gửi 18 August 2014 - 04:24 PM

Vì có thể có những ng khác không dùng layer defpoints như bạn cho nên mới làm riêng cho bạn cái đổi layer.

Bạn có thể gộp chung và đặt tên lệnh theo ý mình, bạn cứ chép 2 cái trên vào 1 file rồi thêm 1 dòng nữa như thế này:

 

(defun c:tenlenhbanmuon() (c:dlay) (c:cvp))

 

Đây cũng là cách để đổi tên những lệnh của file vlx khi không trực tiếp sửa file được.

 

 

Quá hay, lisp thật là kì diệu, giờ mình biết thêm 1 chiêu mới rồi.

Cám ơn bạn Tot77 nhiều nhiều nhé  :)  :)  :)


  • 0

#31 proconeng86

proconeng86

    biết lệnh break

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

Đã gửi 19 August 2014 - 12:54 AM

Vì có thể có những ng khác không dùng layer defpoints như bạn cho nên mới làm riêng cho bạn cái đổi layer.

Bạn có thể gộp chung và đặt tên lệnh theo ý mình, bạn cứ chép 2 cái trên vào 1 file rồi thêm 1 dòng nữa như thế này:

 

(defun c:tenlenhbanmuon() (c:dlay) (c:cvp))

 

Đây cũng là cách để đổi tên những lệnh của file vlx khi không trực tiếp sửa file được.

 

Lisp này khi chia vp xong tự động tắt chế độ orthor nhỉ, bạn Tot77 chỉnh lại giúp mình chút nữa là nó giữ nguyên chế độ orthor sau khi chia vp

Mình cám ơn nhiều


  • 0

#32 nhoclangbat

nhoclangbat

    Edu level: li10

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

Đã gửi 19 August 2014 - 07:22 AM

đơn giản là bạn bấm f8 lại thui mà :)), còn bạn mún lisp làm lun thì dân nữa mùa như nhoc góp ý xíu ^^, bạn thấy dòng lệnh cuối ko sữa như vậy nè :

-cũ: (mapcar 'setvar (list 'orthomode 'tilemode 'cmdecho 'osmode) (list 0 0 1 os))

=> mới : (mapcar 'setvar (list 'orthomode 'tilemode 'cmdecho 'osmode) (list 1 0 1 os))  => sữa số 0 thành số 1 màu đỏ là ok :))


  • 1
"...................][)e\/i][_ /\/\@Y CrY....................."

(defun THỔ_DÂN_HỌC_CAD (xxxx) ...) ^_^








#33 proconeng86

proconeng86

    biết lệnh break

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

Đã gửi 19 August 2014 - 08:40 AM

đơn giản là bạn bấm f8 lại thui mà :)), còn bạn mún lisp làm lun thì dân nữa mùa như nhoc góp ý xíu ^^, bạn thấy dòng lệnh cuối ko sữa như vậy nè :

-cũ: (mapcar 'setvar (list 'orthomode 'tilemode 'cmdecho 'osmode) (list 0 0 1 os))

=> mới : (mapcar 'setvar (list 'orthomode 'tilemode 'cmdecho 'osmode) (list 1 0 1 os))  => sữa số 0 thành số 1 màu đỏ là ok :))

 

Đơn giản nhỉ,hay thật đó, cám ơn bạn nhoclangbat nhé


  • 0