Đến nội dung


Hình ảnh
- - - - -

[Yêu Cầu] Lisp Đổi Dấu Scale X, Scale Y Của Block


  • Please log in to reply
5 replies to this topic

#1 colombus

colombus

    biết vẽ ellipse

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

Đã gửi 23 May 2016 - 09:10 AM

Xin các bạn giúp cho cái lisp này để thuận tiện hơn trong công việc.
 
Tôi muốn đổi dấu cho tỷ lệ X và Y của block (từ + sang - hoặc từ - sang +) để nó có thể lật qua , lật lại quanh điểm insert theo các hướng X và Y
 
Cái này nó cũng giống như FLIP trong dynamic block. Nhưng ở đây tôi phải chọn nhiều block cùng lúc và thực hiện lệnh thì mới nhanh được , chứ click vào từng block ròi flip từng cái thì lâu quá.
 
Chẳng hạn tôi muốn gọi lệnh bx để đổi dấu cho scale X, lệnh by để đổi dấu cho scale Y.
 
gọi lệnh trước rồi chọn đối tượng hay chọn đối tượng trước rồi gọi lệnh đều được.
 
tôi cũng muốn học lisp rồi tự viết cho tiện. Khổ nỗi thời gian ngặt nghèo quá nên đành nhờ trợ giúp. Hy vọng lisp này cũng có ích với nhiều người khác và như vậy thì sự đòi hỏi của tôi cũng không đến nỗi "ích kỷ"
XIN CẢM ƠN.

  • -1

#2 quocmanh04tt

quocmanh04tt

    biết lệnh imageclip

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

Đã gửi 23 May 2016 - 09:48 AM

 

Xin các bạn giúp cho cái lisp này để thuận tiện hơn trong công việc.
 
Tôi muốn đổi dấu cho tỷ lệ X và Y của block (từ + sang - hoặc từ - sang +) để nó có thể lật qua , lật lại quanh điểm insert theo các hướng X và Y
 
Cái này nó cũng giống như FLIP trong dynamic block. Nhưng ở đây tôi phải chọn nhiều block cùng lúc và thực hiện lệnh thì mới nhanh được , chứ click vào từng block ròi flip từng cái thì lâu quá.
 
Chẳng hạn tôi muốn gọi lệnh bx để đổi dấu cho scale X, lệnh by để đổi dấu cho scale Y.
 
gọi lệnh trước rồi chọn đối tượng hay chọn đối tượng trước rồi gọi lệnh đều được.
 
tôi cũng muốn học lisp rồi tự viết cho tiện. Khổ nỗi thời gian ngặt nghèo quá nên đành nhờ trợ giúp. Hy vọng lisp này cũng có ích với nhiều người khác và như vậy thì sự đòi hỏi của tôi cũng không đến nỗi "ích kỷ"
XIN CẢM ƠN.

 

Bạn thử cái này xem:

(defun getscale_blk  (/ ent i ss)
 (if (setq ss (ssget '((0 . "INSERT"))))
  (repeat (setq i (sslength ss))
   (setq ent (ssname ss (setq i (1- i)))
         blk (vlax-ename->vla-object ent)
         scx (* (vlax-get blk 'XScaleFactor) -1)
         scy (* (vlax-get blk 'YScaleFactor) -1)))))
(defun c:bx (/ blk scx scy)
 (and (getscale_blk)
      (vlax-put blk 'XScaleFactor scx))(princ))
(defun c:by (/ blk scx scy)
 (and (getscale_blk)
      (vlax-put blk 'YScaleFactor scy))(princ))
(vl-load-com)

  • 1

#3 colombus

colombus

    biết vẽ ellipse

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

Đã gửi 23 May 2016 - 01:25 PM

Xin cảm ơn quocmanh04tt. Vấn đề đã được giải quyết nhanh chóng và hoàn hảo.


  • 0

#4 Tot77

Tot77

    biết lệnh adcenter

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

Đã gửi 23 May 2016 - 01:51 PM

quocmanh04tt xem lại nếu chọn nhiều block thì chỉ 1 cái cuối cùng đổi thôi, mấy cái kia không đổi.


  • 1

#5 colombus

colombus

    biết vẽ ellipse

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

Đã gửi 23 May 2016 - 01:54 PM

quocmanh04tt xem lại nếu chọn nhiều block thì chỉ 1 cái cuối cùng đổi thôi, mấy cái kia không đổi.

Ừ NHỈ ĐÚNG THẾ THẬT. kiểm tra vội vàng nên không thấy. 


  • 0

#6 quocmanh04tt

quocmanh04tt

    biết lệnh imageclip

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

Đã gửi 23 May 2016 - 02:12 PM

Xin lỗi các bác...! Sai cơ bản :D

Em sửa lại đây:

(vl-load-com)
(defun getscale_blk  (x / blk ent i scx scy ss)
 (if (setq ss (ssget '((0 . "INSERT"))))
  (repeat (setq i (sslength ss))
   (setq ent (ssname ss (setq i (1- i)))
         blk (vlax-ename->vla-object ent)
         scx (* (vlax-get blk 'XScaleFactor) -1)
         scy (* (vlax-get blk 'YScaleFactor) -1))
   (if (eq x t)
    (vlax-put blk 'XScaleFactor scx)
    (vlax-put blk 'YScaleFactor scy))))(princ))
(defun c:bx () (getscale_blk t))
(defun c:by () (getscale_blk nil))

  • 2