Chuyển đến nội dung
Diễn đàn CADViet
  • Thông báo

    • Nguyen Hoanh

      CADViet đã hoàn tất nâng cấp   14/09/2017

      Chào các bạn, CADViet đã hoàn tất việc nâng cấp lên phiên bản mới. Tất cả các chức năng đã hoạt động theo kỳ vọng của ban quản trị. Nếu có vấn đề gì cần phản hồi, các bản post ở đây nhé: Trân trọng, Nguyễn Hoành.
Jin Yong

Hỏi về Lisp (thuật toán, ý tưởng, coding,...)

Các bài được khuyến nghị

Dạo này cad toàn tạo LWPolyline chứ không còn Polyline nửa nên mình thấy đoạn đỉnh pline cua Tuệ là ok .

Theo mình dòm ngó thì kết thúc của block là ENDBLK còn của Polyline là SEQEND mà nhỉ? Chắc mình laiọ nhầm cái gì rồi.

Tại vì mình nghĩ rằng vì 1 nhu cầu nào đó bạn phải dùng cad đời thấp (không có LWPolyline), chỉ sử dụng được Autolisp nên mới nói như trên. Hóa ra là bạn tự ép buộc bản thân không dùng VL ư? Thật lạ lùng! Giống như ăn chay í nhỉ.

các đối tượng Polyline và Block (insert) đều là các đối tượng phức. đều kết thúc là SEQEND. Endblk thì đúng như bạn Ketxu noi đó bạn

  • Vote tăng 1

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

Code của bạn Tue_NV sẽ chỉ chạy với LWPolyline thôi. cho dù bạn viết *Polyline thì chắc chắn nó vẫn không thể chạy được với Polyline

.....

 

Thì mình mới chỉ viết cho LWPOLYLINE thôi, muốn viết thêm cho POLYLINE nữa thì có thể duyệt từng "VERTEX" của Polyline -> Lấy ra toạ độ đỉnh (như code của bạn)

Hoặc có thể dùng cách convert POLYLINE thành LWPOLYLINE -> Lấy toạ độ đỉnh -> trả lại Polyline trước khi convert

  • Vote tăng 1

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

Có 1 nhu cầu đơn giản thế này nhưng TL nghĩ hoài không ra là: Làm thế nào để khi con trỏ đang ở trạng thái multiselect (chọn nhiều đối tượng bằng Cross window) ta có thể rẽ nhánh bằng cách gõ 1 phím nào đó trên bàn phím? Giống như việc gọi hộp thoại setting của lệnh MA đó các bạn. Giúp mình với!

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

Có 1 nhu cầu đơn giản thế này nhưng TL nghĩ hoài không ra là: Làm thế nào để khi con trỏ đang ở trạng thái multiselect (chọn nhiều đối tượng bằng Cross window) ta có thể rẽ nhánh bằng cách gõ 1 phím nào đó trên bàn phím? Giống như việc gọi hộp thoại setting của lệnh MA đó các bạn. Giúp mình với!

 

Dùng Sendcommand đi bạn

(defun c:abc() (vla-sendcommand (vla-get-activedocument (vlax-get-acad-object)) "\r\r (alert \"Chuc thanh cong\") "))

 

Ví dụ :

 

Command: select
Select objects: 'abc

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

Dạo này cad toàn tạo LWPolyline chứ không còn Polyline nửa nên mình thấy đoạn đỉnh pline cua Tuệ là ok .

Theo mình dòm ngó thì kết thúc của block là ENDBLK còn của Polyline là SEQEND mà nhỉ? Chắc mình laiọ nhầm cái gì rồi.

seqend cũng là kết thúc của các thuộc tính có trong block thuộc tính.

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

@Tue_NV: Hix. Mình chưa lưu bản vẽ, thử code của bạn phát là công vẽ của mình từ gần 1 tiếng vừa rồi tèo luôn :'(
 
Mình muốn rẽ nhánh trong khi con trỏ đang chờ ở hàm ssget hoặc 1 hàm nào đó cho phép multiselect, cách này không dùng được bạn ạ. hoặc nếu có dùng được cũng không mang lại hiệu quả cao khi sử dụng vì buộc fải thêm 1 phím '

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

@Tue_NV: Hix. Mình chưa lưu bản vẽ, thử code của bạn phát là công vẽ của mình từ gần 1 tiếng vừa rồi tèo luôn :'(

 

Mình muốn rẽ nhánh trong khi con trỏ đang chờ ở hàm ssget hoặc 1 hàm nào đó cho phép multiselect, cách này không dùng được bạn ạ. hoặc nếu có dùng được cũng không mang lại hiệu quả cao khi sử dụng vì buộc fải thêm 1 phím '

 

Nếu vậy thì bạn phải can thiệp vào chính lệnh gốc select của ACAD rồi. Điều đó chắc là không cách nào làm được với người sử dụng.

Với hàm grread thì có thể rẽ nhánh được. Tuy nhiên, grread chỉ có thể pick từng đối tượng một mà thôi

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

Nếu pick từng đối tượng kèm điều kiện rẽ nhánh thì sử dụng initget cũng được rồi mà bác. Em nhớ có lần chính bác trả lời cho em vấn đề này trong topic "undo trong quá trình chạy lisp.

về hàm grread, hoàn toàn có thể viết để chọn được nhiều đối tượng. Em đã làm trong lisp chuyển nhanh các text vào trọng tâm miền kín gần nhất đã post trong forum. Cách này dùng để chữa cháy, khi tập hợp đối tượng chọn đơn giản,không cần áp dụng các điều kiện lọc fức tạp thì tạm chấp nhận được.

 

Em Linh cần cái này chắc để áp dụng vào lisp chọn nhanh đối tượng thì fải. A nghĩ là không làm được đâu, bởi trước đây anh đã thử làm rồi nhưng không thành công.

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

Nếu pick từng đối tượng kèm điều kiện rẽ nhánh thì sử dụng initget cũng được rồi mà bác. Em nhớ có lần chính bác trả lời cho em vấn đề này trong topic "undo trong quá trình chạy lisp.

về hàm grread, hoàn toàn có thể viết để chọn được nhiều đối tượng. Em đã làm trong lisp chuyển nhanh các text vào trọng tâm miền kín gần nhất đã post trong forum. Cách này dùng để chữa cháy, khi tập hợp đối tượng chọn đơn giản,không cần áp dụng các điều kiện lọc fức tạp thì tạm chấp nhận được.

 

Em Linh cần cái này chắc để áp dụng vào lisp chọn nhanh đối tượng thì fải. A nghĩ là không làm được đâu, bởi trước đây anh đã thử làm rồi nhưng không thành công.

 

- Hàm initget có tác dụng với họ nhà GET*** chứ đâu có tác dụng với pick chọn đối tượng của nhà ENTSEL

- Nếu có thể, bạn post luôn code về hàm grread để chọn nhiều đối tượng và rẽ nhánh, có thể trong TH giống như lệnh MA nó ko thể làm đc

- Mình nghĩ Bạn Linh đang viết ứng dụng thay cho lệnh Filter và qselect -> cần rẽ nhánh để thực hiện thao tác setting đó mà

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

Bên .NET, có thể kết hợp các hàm get_entity và get_keyword bằng cách dùng Event - tương tự Reactor bên VLisp. Mình ko chắc VLisp có thể dùng Reactor để giải quyết đc ko? Bác nào thử xem ^^!

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

Grread thì mình cũng đã từng dùng, trang trước mình có trả lời hướng dẫn cho bạn ĐVH về hàm Grread cũng chính là ý này. Dùng phương pháp này thì chỉ cần chịu khó 1 chút là hoàn toàn có thể viết cho các điều kiện lọc phức tạp. nhưng mình không muốn dùng vì nó làm mất các đặc tính cơ bản của phương pháp select đối tượng thông thường, chẳng hạn như:

- Lọc đối tượng ngay từ thao tác kéo chuột để chọn;

- Kéo chuột từ trái sang phải và từ phải sang trái sẽ cho kết quả chọn khác nhau

- Không có hiệu ứng đồ họa đổi màu trong khung chọn...vv

Thiếu những đặc tính trên người dùng sẽ cảm thấy lạ lẫm khi sử dụng. Chỉ vì 1 cái option mà phải thay đổi cả phương pháp select đối tượng thì rõ ràng là không nên. mình hơi cầu toàn 1 chút ^^

 

@Ketxu có thể cho mình xin link không? Mình tìm hoài trong trang cá nhân của Lee nhưng không thấy. Cảm ơn bạn!

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

;;------------------=={ UCS Aligned ssget }==-----------------;;
;;                                                            ;;
;;  Provides the user with a selection interface akin to      ;;
;;  those options provided by ssget, but aligned to the       ;;
;;  active UCS                                                ;;
;;------------------------------------------------------------;;
;;  Author: Lee Mac, Copyright © 2011 - www.lee-mac.com       ;;
;;------------------------------------------------------------;;
;;  Arguments:                                                ;;
;;  msg    - prompt to be displayed                           ;;
;;  filter - optional SelectionSet filter                     ;;
;;------------------------------------------------------------;;
;;  Returns:  SelectionSet, else nil                          ;;
;;------------------------------------------------------------;;

(defun LM:UCS-ssget
     
    (
        msg filter /
     
        *error* _redrawss _getitem _getwindowselection
        acgrp e express g1 g2 gr grp i mss multiplemode pick pt removemode singlemode ss str
    )

    (defun *error* ( msg )
        (_redrawss ss 4)
        (if (not (wcmatch (strcase msg) "*BREAK,*CANCEL*,*EXIT*"))
            (princ (strcat "\nError: " msg))
        )
        (princ)
    )

    (defun _redrawss ( ss mode / i )
        (if ss
            (repeat (setq i (sslength ss))
                (redraw (ssname ss (setq i (1- i))) mode)
            )
        )
    )

    (defun _getitem ( collection item )
        (if
            (not
                (vl-catch-all-error-p
                    (setq item
                        (vl-catch-all-apply 'vla-item (list collection item))
                    )
                )
            )
            item
        )
    )

    (defun _getwindowselection ( msg p1 filter flag / gr p2 p3 p4 lst )
        (princ msg)
        (while (not (= 3 (car (setq gr (grread t 13 0)))))
            (cond
                (   (= 5 (car gr))
                    (redraw)
                    (setq p3 (cadr gr)
                          p2 (list (car p3) (cadr p1) (caddr p3))
                          p4 (list (car p1) (cadr p3) (caddr p3))
                    )
                    (grvecs
                        (setq lst
                            (list
                                (cond
                                    (   (eq "_C" flag)                 -256)
                                    (   (eq "_W" flag)                  256)
                                    (   (minusp (- (car p3) (car p1))) -256)
                                    (   256   )
                                )
                                p1 p2 p1 p4 p2 p3 p3 p4
                            )
                        )
                    )
                    t
                )
                (   (princ (strcat "\nInvalid Window Specification." msg))   )
            )
        )
        (redraw)
        (ssget (cond ( flag ) ( (if (minusp (car lst)) "_C" "_W") )) p1 p3 filter)
    )

    (setq express
        (and (vl-position "acetutil.arx" (arx))
            (not
                (vl-catch-all-error-p
                    (vl-catch-all-apply
                        (function (lambda nil (acet-sys-shift-down)))
                    )
                )
            )
        )
    )

    (setq acdoc (cond ( acdoc ) ( (vla-get-activedocument (vlax-get-acad-object)) ))
          acgrp (vla-get-groups acdoc)
    )

    (if
        (not
            (and
                (= 1 (getvar 'PICKFIRST))
                (setq ss (cadr (ssgetfirst)))
            )
        )   
        (setq ss (ssadd))
    )

    (setq str "")
    (sssetfirst nil nil)
    (princ msg)

    (while
        (progn
            (setq gr (grread t 13 2)
                  g1 (car  gr)
                  g2 (cadr gr)
            )
            (_redrawss ss 3)
            (cond
                (   (= 5 g1)   )
                (   (= 3 g1)
                    (cond
                        (   RemoveMode
                            (if
                                (and
                                    (setq pick (ssget g2 filter))
                                    (setq pick (ssname pick 0))
                                )
                                (if (ssmemb pick ss)
                                    (progn (ssdel pick ss) (redraw pick 4))
                                )
                                (if (setq pick (_getwindowselection "\nSpecify Opposite Corner: " g2 filter nil))
                                    (repeat (setq i (sslength pick))
                                        (if (ssmemb (setq e (ssname pick (setq i (1- i)))) ss)
                                            (progn (ssdel e ss) (redraw e 4))
                                        )
                                    )
                                )
                            )
                            (princ msg)
                        )
                        (   MultipleMode
                            (if
                                (and
                                    (setq pick (ssget g2 filter))
                                    (setq pick (ssname pick 0))
                                )
                                (ssadd pick mss)
                            )
                            t
                        )
                        (   t
                            (if
                                (and
                                    (setq pick (ssget g2 filter))
                                    (setq pick (ssname pick 0))
                                )
                                (if (and express (acet-sys-shift-down))
                                    (if (ssmemb pick ss)
                                        (progn (ssdel pick ss) (redraw pick 4))
                                    )
                                    (ssadd pick ss)
                                )
                                (if (setq pick (_getwindowselection "\nSpecify Opposite Corner: " g2 filter nil))
                                    (if (and express (acet-sys-shift-down))
                                        (repeat (setq i (sslength pick))
                                            (if (ssmemb (setq e (ssname pick (setq i (1- i)))) ss)
                                                (progn (ssdel e ss) (redraw e 4))
                                            )
                                        )
                                        (repeat (setq i (sslength pick))
                                            (ssadd (ssname pick (setq i (1- i))) ss)
                                        )
                                    )
                                )
                            )
                            (princ msg)
                            (not SingleMode)
                        )
                    )
                )
                (   (= 2 g1)
                    (cond
                        (   (member g2 '(32 13))
                            (cond
                                (   (zerop (strlen str))
                                    nil
                                )
                                (   t
                                    (if mss
                                        (progn
                                            (repeat (setq i (sslength mss))
                                                (ssadd (ssname mss (setq i (1- i))) ss)
                                            )
                                            (setq mss nil)
                                        )
                                    )
                                    (cond
                                        (   (wcmatch (setq str (strcase str)) "R,REMOVE")
                                            (setq
                                                MultipleMode nil
                                                SingleMode   nil
                                                RemoveMode    T
                                            )
                                        )
                                        (   (wcmatch str "M,MULTIPLE")
                                            (setq
                                                RemoveMode   nil
                                                SingleMode   nil
                                                MultipleMode  T
                                                mss (ssadd)
                                            )
                                        )
                                        (   (wcmatch str "A,ADD,AUTO")
                                            (setq
                                                MultipleMode nil
                                                RemoveMode   nil
                                                SingleMode   nil
                                            )
                                            t
                                        )
                                        (   (wcmatch str "SI,SINGLE")
                                            (setq
                                                MultipleMode nil
                                                RemoveMode   nil
                                                SingleMode    T
                                            )
                                        )
                                        (   (wcmatch str "G,GROUP")
                                            (while
                                                (progn (setq grp (getstring t "\nEnter group name: "))
                                                    (cond
                                                        (   (eq "" grp)
                                                            nil
                                                        )
                                                        (   (setq grp (_getitem acgrp grp))
                                                            (vlax-for obj grp
                                                                (if (not (ssmemb (setq e (vlax-vla-object->ename obj)) ss))
                                                                    (ssadd e ss)
                                                                )
                                                            )
                                                            nil
                                                        )
                                                        (   (princ "\nInvalid group name.")   )
                                                    )
                                                )
                                            )
                                            t
                                        )
                                        (   (or
                                                (eq str "ALL")
                                                (wcmatch str "P,PREVIOUS")
                                                (wcmatch str "L,LAST")
                                            )
                                            (princ
                                                (strcat "\n"
                                                    (if
                                                        (setq pick
                                                            (ssget
                                                                (cond
                                                                    (    (eq str "ALL")             "_X")
                                                                    (    (wcmatch str "P,PREVIOUS") "_P")
                                                                    (    (wcmatch str "L,LAST")     "_L")
                                                                )
                                                                filter
                                                            )
                                                        )
                                                        (progn
                                                            (repeat (setq i (sslength pick))
                                                                (ssadd (ssname pick (setq i (1- i))) ss)
                                                            )
                                                            (itoa (sslength pick))
                                                        )
                                                        "0"
                                                    )
                                                    " found"
                                                )
                                            )
                                            t
                                        )
                                        (   (or
                                                (eq str "BOX")
                                                (wcmatch str "W,WINDOW")
                                                (wcmatch str "C,CROSSING")
                                            )
                                            (princ
                                                (strcat "\n"
                                                    (if
                                                        (and
                                                            (setq pt (getpoint "\nSpecify first corner: "))
                                                            (setq pick
                                                                (_getwindowselection "\nSpecify opposite corner: " pt filter
                                                                    (cond
                                                                        (   (eq str "BOX")              nil)
                                                                        (   (wcmatch str "W,WINDOW")   "_W")
                                                                        (   (wcmatch str "C,CROSSING") "_C")
                                                                    )
                                                                )
                                                            )
                                                        )
                                                        (progn
                                                            (repeat (setq i (sslength pick))
                                                                (ssadd (ssname pick (setq i (1- i))) ss)
                                                            )
                                                            (itoa (sslength pick))
                                                        )
                                                        "0"
                                                    )
                                                    " found"
                                                )
                                            )
                                            t
                                        )
                                        (   (wcmatch str "U,UNDO")
                                            (if pick
                                                (cond
                                                    (   (eq 'ENAME (type pick))
                                                        (ssdel pick ss)
                                                        (redraw pick 4)
                                                    )
                                                    (   (eq 'PICKSET (type pick))
                                                        (repeat (setq i (sslength pick))
                                                            (setq e (ssname pick (setq i (1- i))))
                                                            (ssdel e ss)
                                                            (redraw e 4)
                                                        )
                                                    )
                                                )
                                            )
                                            t
                                        )
                                        (   (eq "?" str)
                                            (princ
                                                (strcat
                                                    "\nExpects a point or"
                                                    "\nWindow/Last/Crossing/BOX/ALL/Fence/WPolygon/CPolygon"
                                                    "/Group/Add/Remove/Multiple/Previous/Undo/AUto/SIngle"
                                                )
                                            )
                                        )
                                        (   (princ "\n** Invalid Keyword **")   )
                                    )
                                    (setq str "")
                                    (princ msg)
                                )
                            )
                        )
                        (   (< 32 g2 127)
                            (setq str (strcat str (princ (chr g2))))
                        )
                        (   (= g2 8)
                            (if (< 0 (strlen str))
                                (progn
                                    (princ (vl-list->string '(8 32 8)))
                                    (setq str (substr str 1 (1- (strlen str))))
                                )
                            )
                            t
                        )
                        ( t )
                    )
                )
            )
        )
    )
    (_redrawss ss 4)
    ss
)



 

 

 

;; Test function

 

 

(defun c:test nil
(sssetfirst nil (LM:UCS-ssget "\nSelect Objects: " nil))
(princ)
)
 

- Cần thêm Opt gì bạn tiếp tục ^^

  • Vote tăng 1

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

Lee viết hàm này khá giống hàm ssget, chỉ thiếu mỗi hiệu ứng đồ họa nữa là y chang. Việc thêm Method mới cũng đơn giản.

 

Nhưng có một điều làm mình tò mò: Nếu đây là code hoàn thiện thì anh chàng này viết nó làm gì nhỉ? bởi vì nó làm công việc y hệt hàm ssget. Thậm chí còn thiếu 1 vài Method như Fence, WPolygon, CPolygon so với ssget.

 

@Skywings: Mình đã thử rồi và có thể khẳng định chắn chắn là không được vì hàm callback của reactor không chấp nhận chứa bất cứ hàm chờ nhập dữ liệu nào bên trong nó. Đây là quy định hơi khó hiểu của reactor.

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

(Bạn hãy test khi ) Trục nghiêng. Đây cũng là một lisp ngày xưa có bạn yêu cầu muốn chọn đt theo một hcn isometric

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

Mình vừa nghĩ ra 1 ý tưởng mới cho yêu cầu rẽ nhánh khi select đối tượng bằng ssget: Thay vì rẽ nhánh bằng 1 phím nào đó trên bàn phím thì ta rẽ nhánh bằng việc click chuột phải. mình triển khai ý tưởng đó bằng hàm con dưới đây, post để các bạn có nhu cầu tham khảo

 

(defun ssget-rightclick (filter functions / ss reactor Callback-RightClick option)
 (if (setq ss (ssget "I" filter)) ss
  (progn
   (setq reactor (vlr-mouse-reactor nil '((:vlr-BeginRightClick . Callback-RightClick))))
   (defun Callback-RightClick (reactor point) (setq option T))
   (setq ss (ssget filter))
   (vlr-remove reactor)
   (if ss ss    
    (if option
     (progn
      (eval functions)
      (ssget-rightclick filter functions)))))))
 

Phuơng pháp này có ưu điểm:

- Ngắn gọn hơn (so với của Lee Mac)

- Bảo lưu hoàn toàn mọi đặc tính của hàm ssget bởi nó vẫn là ssget (của Lee là viết lại 1 hàm giống ssget)

- Rẽ nhánh bằng chuột phải nhanh và tiện hơn so với nhập phím.

- Và hoàn toàn không có nhược điểm. hihi

 

Test: (ssget-rightclick '((0 . "TEXT")) '(alert "ban vua kich chuot phai"))

  • Vote tăng 3

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

 Nếu muốn rẽ nhánh khi đã chọn đối tượng thì cũng được. chỉ cần sửa code 1 chút. Mình nghĩ điều đó hoàn toàn nằm trong khả năng của bạn

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

Trong hộp thoại mình có 2 edit_box và OK_cancel.

Mình muốn khi xuất hiệp hộp thoại, con trỏ sẽ xuất hiện trực tiếp trong edit_box thứ 2.

Sau khi nhập giá trị cho edit_box 2 này, mình enter sẽ nhận OK luôn.

 

Muốn nhập xong edit_box và OK thì nhận chạy luôn (vì OK đã default) thì mình dùng allow_accept cho edit_box.

Nhưng vấn đề khi hộp thoại xuất hiện, con trỏ đang trong edit_box thứ 2 mình không biết làm  thế nao.

 

Hỏi dài dòng khó hiểu quá phải không các bác!

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

Xin nhờ các anh giúp hiệu chỉnh Vẽ nhà qua 3 điểm và vẽ tạo tiếp kí hiệu mái ngói.

Lisp mình sưu tầm được thì vẽ như sau p1,p2,p3, tụ chọn p4. sau đó xác định p5 và p6 vẽ đường thẳng p5, p6 theo hướng giữa p2 và p3. Vẽ kí hiệu ngóc từ p1,p5.p3 và p3,p6,p4

ý mình muốn đường đỉnh nóc theo hướng p1 và p2 và nối theo chiều p1,p5,p4 và p2, p6,p3.  nối p5,p6

(while (/= pta nil)
		(command "undo" "begin")
		(command "color" 1 "circle" pta 1)
		(setq ss1 (ssget "L") ss (ssadd) ss (ssadd (ssname ss1 0) ss))
		(setvar "cecolor" colast)
		(setq ptb (getpoint (strcat "\n pick diem thu 2") pta))
		(command "color" 2 "circle" ptb 1)
		(setq ss2 (ssget "L") ss (ssadd (ssname ss2 0) ss))
		(setvar "cecolor" colast)
		(setq ptc (getpoint (strcat "\n pick diem thu 3") ptb))
		(command "color" 3 "circle" ptc 1)
		(setq ss3 (ssget "L") ss (ssadd (ssname ss3 0) ss))
		(setvar "cecolor" colast)
		(setq L1 (distance pta ptb) L2 (distance ptb ptc))
		(setq ptd (polar pta (angle ptb ptc) L2))
		(if (> L2 L1)
		(setq pt1 pta pt2 ptb pt3 ptc)
		(setq pt1 ptd pt2 pta pt3 ptb))
		(setq L1 (distance pt1 pt2) L2 (distance pt2 pt3))
		(setq goc1 (angle pt1 pt2))
		(setq goc2 (angle pt2 pt3))
		(setq pt4 (polar pt1 goc2 L2))
		;; THAY GOC VE
		(setq pt5 (polar pt1 (- goc1 (/ pi 6)) (/ L1 2 (cos (/ pi 6)))))
		(setq pt6 (polar pt3 (+ goc2 (/ pi 3)) (/ L1 -2 (cos (/ pi 6)))))
		;(setq pt5 (polar pt1 (- goc1 (/ pi 7.2)) (/ L1 2 (cos (/ pi 7.2)))))
		;(setq pt6 (polar pt3 (+ goc2 (/ pi 2.769)) (/ L1 -2 (cos (/ pi 7.2)))))
		;(setq pt5 (polar pt1 (- goc1 (/ pi 7.2)) (/ L1 2 (cos (/ pi 7.2)))))
		;(setq pt6 (polar pt3 (+ goc2 (/ pi 2.769)) (/ L1 -2 (cos (/ pi 7.2)))))
		(setq pt7 (polar pt5 goc2 (/ (distance pt5 pt6) 2)))

(setq nha (cond (nha) ("Ngoi")))
(initget "Ngoi Tang")
(setq Tmp1 (strcat "\nNha mai ngoi hay nha tang [Ngoi/Tang] <" nha ">: ") nha (cond ((getkword Tmp1)) (nha)))
(if (not (tblsearch "layer" "NHATOANDAC"))
(command "-layer" "N" "NHATOANDAC" "S" "NHATOANDAC" "color" 7 "" "")
(command "Clayer" "NHATOANDAC"))

(if (eq Nha "Ngoi")
(progn
(Command "color" bylayer "osmode" 0 "pline" pt1 pt2 pt3 pt4 pt1 "")
(if (not (tblsearch "layer" "layer1"))
	(command "-layer" "N" "layer1" "S" "layer1" "color" 8 "" "")
	(command "Clayer" "layer1"));if
	(command "pline" pt1 pt5 pt4 "")
	(command "pline" pt5 pt6 "")
	(command "pline" pt2 pt6 pt3 "")
	(command "osmode" 109)
(setq i1 (1+ i1))
(setvar "cecolor" colast)
(command "erase" ss "")
(command "undo" "end")
);progn

Nội dung Lisp này ở đây

http://www.cadviet.com/forum/topic/13203-viet-lisp-theo-yeu-cau-phan-2/page-5

Rất mong được giúp đỡ. Cám ơn

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

Tạo một tài khoản hoặc đăng nhập để nhận xét

Bạn cần phải là một thành viên để lại một bình luận

Tạo tài khoản

Đăng ký một tài khoản mới trong cộng đồng của chúng tôi. Điều đó dễ mà.

Đăng ký tài khoản mới

Đăng nhập

Bạn có sẵn sàng để tạo một tài khoản ? Đăng nhập tại đây.

Đăng nhập ngay


×