Chuyển đến nội dung
Diễn đàn CADViet

avi612

Thành viên
  • Số lượng nội dung

    118
  • Đã tham gia

  • Lần ghé thăm cuối

Bài đăng được đăng bởi avi612


  1. Trimthep.jpg


    Mô tả yêu cầu như sau:


    1. Gọi lệnh: (Vidu: TThep)


    2. Chọn các thanh thép là các đường Line hoặc Polyline. (là các đường màu xanh nằm theo phương ngang).


    3. Chọn điểm bắt đầu cắt thép (là chọn 1 điểm trên đường màu đỏ hoặc màu vàng tùy phía) hoặc đường gióng (chọn đường màu đỏ hoặc màu vàng tùy phía mình muốn cắt) để xác định vị trí.


    4. Nhập giá trị của đoạn nối chồng gọi là Ls (Vidu: D12 là 520 chẳng hạn).


    5. Cho phép xác định phía cắt thép (nếu như giống hình minh họa thì khi mình chọn đường màu đỏ ở bước 3 và muốn cắt về phía bên trái đường này thì ta chọn thêm 1 điểm tùy ý để xác định phía muốn cắt) và chiều dài của thanh thép đầu tiên (vì là cắt so le nên 1 khi bên trái đã là 1 đoạn dài 520 thì phía bên phải chiều dài bắt đầu cắt sẽ là 2x520=1040).


     


    Đây là mô tả của mình cho thép theo phương ngang còn theo phương dọc thì tương ứng, phương xiên thì mình nghĩ sẽ dễ hiểu hơn nếu đã làm được theo 2 phương ngang, dọc.


    • Vote giảm 1

  2. Mình thường hay làm các bản vẽ kết cấu thép, và có 1 thao tác thường lăp đi lặp lại là bố trí thép sole (50% mối nối trên cùng 1 mặt cắt).

    Hôm nay xin nhờ các cao thủ hỗ trợ viết giúp cho 1 đoạn Lisp hỗ trợ công tác này:

     

    Mô tả yêu cầu như sau:

    1. Gọi lệnh: (Vidu: TThep)

    2. Chọn các thanh thép là các đường Line hoặc Polyline.

    3. Chọn điểm bắt đầu cắt thép hoặc đường gióng để xác định vị trí.

    4. Nhập giá trị của đoạn nối chồng gọi là Ls (Vidu: D12 là 520 chẳng hạn).

    5. Cho phép xác định phía cắt thép và chiều dài của thanh thép đầu tiên.

     

    Cho nói rõ chỗ mục 5 một xíu là sẽ có trường hợp mình muốn thanh đầu tiên có đoạn thép chờ ra là 520 thanh 2 sẽ là 2x520=1040. Thì nếu bên trái mình đã làm vậy thì bên phải mình phải làm ngược lại là thanh 1 bắt đầu bằng 1040 và thanh 2 sẽ là 520.

     

    Thêm nữa là có thể giúp mình trước theo 2 phương X và Y luôn nhé. theo phương xiên thì đôi khi mình cũng có gặp nhưng mà mình nghĩ thuật toán để sử lý theo phương xiên chắc sẽ khó hơn nên chắc thôi  :) .

     

    Rất mong sự nhiệt tình giúp đỡ của mọi người. Tks

     

    • Vote giảm 1

  3. Em upload lisp CUT DIM được rồi nhưng khi gõ lệnh CD thì trên con trỏ chuột lại không thấy có lệnh đó xuất hiện mà lại là  cdate, cdorder, cdyndisplaymode. Lúc trước em đã dùng lệnh cutdim được rồi nhưng không hiểu sao lần này không hiệu quả. Rất mong các pro giúp em!!!

     

    Chắc vấn đề ở chổ load lisp của bạn đó...nếu lisp load thành công thì tên lệnh CD sẽ hiện ra cho bạn chọn, còn nếu ko thấy nghĩa là lisp chưa load được roài...

     

    Có cái lisp chức năng tương tự share cho bạn...cái này đi lang thang gõ Google có được đó...cho bạn 3 lựa chọn (cắt chân, cắt đường thể hiện, cắt chân và đường thể hiện)

     

    (DEFUN C:CD (/ CMD SS LTH DEM PT DS KDL N70 GOCX GOCY PT13 PT14 PTI PT13I PT14I

    PT13N PT14N O13 O14 N13 N14 OSM OLDERR PT10 PT11)

     

    (defun myerror (s) ; If an error (such as CTRL-C) occurs

    ; while this command is active...

    (cond

    ((= s "quit / exit abort") (princ))

    ((/= s "Function cancelled") (princ (strcat "\nError: " s)))

    )

    (setvar "cmdecho" CMD) ; Restore saved modes

    (setvar "osmode" OSM)

    (setq *error* OLDERR) ; Restore old *error* handler

    (princ)

    )

     

     

    (SETQ CMD (GETVAR "CMDECHO"))

    (SETQ OSM (GETVAR "OSMODE"))

    (SETQ OLDERR *error*

    *error* myerror)

    (PRINC "Please select Dimension object!")

    (SETQ SS (SSGET))

    (SETVAR "CMDECHO" 0)

    (SETQ PT (GETPOINT "Point to trim or extend:"))

    (SETQ PT (TRANS PT 1 0))

    (COMMAND "UCS" "W")

    (SETQ LTH (SSLENGTH SS))

    (SETQ DEM 0)

    (WHILE (< DEM LTH)

    (PROGN

    (SETQ DS (ENTGET (SSNAME SS DEM)))

    (SETQ KDL (CDR (ASSOC 0 DS)))

    (IF (= "DIMENSION" KDL)

    (PROGN

    (SETQ PT10 (CDR (ASSOC 10 DS)))

    (SETQ PT11 (CDR (ASSOC 11 DS)))

    (SETQ PT13 (CDR (ASSOC 13 DS)))

    (SETQ PT14 (CDR (ASSOC 14 DS)))

    (SETQ N70 (CDR (ASSOC 70 DS)))

    (IF (OR (= N70 32) (= N70 33) (= N70 160) (= N70 161))

    (PROGN

    (SETQ GOCY (ANGLE PT10 PT14))

    (SETQ GOCX (+ GOCY (/ PI 2)))

    )

    )

    (SETVAR "OSMODE" 0)

    (SETQ PTI (POLAR PT GOCX 2))

    (SETQ PT13I (POLAR PT13 GOCY 2))

    (SETQ PT14I (POLAR PT14 GOCY 2))

    (SETQ PT13N (INTERS PT PTI PT13 PT13I NIL))

    (SETQ PT14N (INTERS PT PTI PT14 PT14I NIL))

    (SETQ O13 (ASSOC 13 DS))

    (SETQ O14 (ASSOC 14 DS))

    (SETQ N13 (CONS 13 PT13N))

    (SETQ N14 (CONS 14 PT14N))

    (SETQ DS (SUBST N13 O13 DS))

    (SETQ DS (SUBST N14 O14 DS))

    (ENTMOD DS)

    )

    )

    (SETQ DEM (+ DEM 1))

    )

    )

    (COMMAND "UCS" "P")

    (SETVAR "CMDECHO" CMD)

    (SETVAR "OSMODE" OSM)

    (setq *error* OLDERR) ; Restore old *error* handler

    (PRINC)

    )

    ;=======================================================

    ;Cat duong DIM

    (DEFUN C:CX (/ CMD SS LTH DEM PT DS KDL N70 GOCX GOCY PT13 PT14 PTI

    PT10 PT10I PT10N O10 N10 PT11 PT11N O11 N11 KC OSM OLDERR)

     

    (defun myerror (s) ; If an error (such as CTRL-C) occurs

    ; while this command is active...

    (cond

    ((= s "quit / exit abort") (princ))

    ((/= s "Function cancelled") (princ (strcat "\nError: " s)))

    )

    (setvar "cmdecho" CMD) ; Restore saved modes

    (setvar "osmode" OSM)

    (setq *error* OLDERR) ; Restore old *error* handler

    (princ)

    )

     

    (SETQ CMD (GETVAR "CMDECHO"))

    (SETQ OSM (GETVAR "OSMODE"))

    (SETQ OLDERR *error*

    *error* myerror)

    (PRINC "Please select dimension object!")

    (SETQ SS (SSGET))

    (SETVAR "CMDECHO" 0)

    (SETQ PT (GETPOINT "Point to trim or extend:"))

    (SETQ PT (TRANS PT 1 0))

    (COMMAND "UCS" "W")

    (SETQ LTH (SSLENGTH SS))

    (SETQ DEM 0)

    (WHILE (< DEM LTH)

    (PROGN

    (SETQ DS (ENTGET (SSNAME SS DEM)))

    (SETQ KDL (CDR (ASSOC 0 DS)))

    (IF (= "DIMENSION" KDL)

    (PROGN

    (SETQ PT13 (CDR (ASSOC 13 DS)))

    (SETQ PT14 (CDR (ASSOC 14 DS)))

    (SETQ PT10 (CDR (ASSOC 10 DS)))

    (SETQ PT11 (CDR (ASSOC 11 DS)))

    (SETQ N70 (CDR (ASSOC 70 DS)))

    (IF (OR (= N70 32) (= N70 33) (= N70 160) (= N70 161))

    (PROGN

    (SETQ GOCY (ANGLE PT10 PT14))

    (SETQ GOCX (+ GOCY (/ PI 2)))

    )

    )

    (SETVAR "OSMODE" 0)

    (SETQ PTI (POLAR PT GOCX 2))

    (SETQ PT10I (POLAR PT10 GOCY 2))

    (SETQ PT10N (INTERS PT PTI PT10 PT10I NIL))

    (SETQ KC (DISTANCE PT10 PT10N))

    (SETQ O10 (ASSOC 10 DS))

    (SETQ N10 (CONS 10 PT10N))

    (SETQ DS (SUBST N10 O10 DS))

    (SETQ PT11N (POLAR PT11 (ANGLE PT10 PT10N) KC))

    (SETQ O11 (ASSOC 11 DS))

    (SETQ N11 (CONS 11 PT11N))

    (SETQ DS (SUBST N11 O11 DS))

    (ENTMOD DS)

    )

    )

    (SETQ DEM (+ DEM 1))

    )

    )

    (COMMAND "UCS" "P")

    (SETVAR "CMDECHO" CMD)

    (SETVAR "OSMODE" OSM)

    (setq *error* OLDERR)

    (PRINC)

    )

     

    ;=======================================================

    ;Cat chan va duong DIM

    (defun c:cdx (/ entdt dcat1 dcat2 sodimsua index sodt ssdt tt)

    (defun cdim (entdt pchan pduong / tt old10

    old13 old14 new10 new13 new14 p10n

    p13n p14n p10o p13o p14o gocduong

    gocchan pchanb pduongb loaidim

    )

    (defun chanvuonggoc (ph p1 p2 / ptemp pkq goc)

    (setq

    goc (+ (angle p1 p2) (/ pi 2.0))

    ptemp (polar ph goc 1000.0)

    pkq (inters ph ptemp p1 p2 nil)

    )

    pkq

    )

    (setq

    tt (entget entdt)

    old10 (assoc '10 tt)

    old13 (assoc '13 tt)

    old14 (assoc '14 tt)

    p10o (cdr old10)

    p13o (cdr old13)

    p14o (cdr old14)

    loaidim (logand (cdr (assoc '70 tt)) 7)

    gocduong (cond

    ((= loaidim 1) (angle p13o p14o))

    ((= loaidim 0) (cdr (assoc '50 tt)))

    (t nil)

    )

    pchan (cond

    (pchan (list (car pchan) (cadr pchan) 0.0))

    (t pchan)

    )

    pduong (cond

    (pduong (list (car pduong) (cadr pduong) 0.0))

    (t pduong)

    )

     

    )

    (if gocduong

    (progn

    (if pchan

    (setq

    pchanb (polar pchan gocduong 1000.0)

    p13n (chanvuonggoc (list (car p13o) (cadr p13o) 0.0) pchan pchanb)

    p14n (chanvuonggoc (list (car p14o) (cadr p14o) 0.0) pchan pchanb)

    new13 (cons 13 p13n)

    new14 (cons 14 p14n)

    tt (subst new13 old13 tt)

    tt (subst new14 old14 tt)

    )

    )

    (if pduong

    (setq

    pduongb (polar pduong gocduong 1000.0)

    p10n (chanvuonggoc (list (car p10o) (cadr p10o) 0.0) pduong pduongb)

    new10 (cons 10 p10n)

    tt (subst new10 old10 tt)

    )

    )

    (entmod tt)

    )

    )

    gocduong

    )

    (setq ssdt (ssget '((0 . "DIMENSION")))

    dcat1 (getpoint "\n\U+0110i\U+1EC3m c\U+1EAFt chân DIM: ")

    dcat2 (getpoint "\n\U+0110i\U+1EC3m c\U+1EAFt \U+0111\U+01B0\U+1EDDng DIM: ")

     

    dcat1 (cond

    (dcat1 (trans dcat1 1 0))

    (t nil)

    )

    dcat2 (cond

    (dcat2 (trans dcat2 1 0))

    (t nil)

    )

    sodt (sslength ssdt)

    index 0

    sodimsua 0

    )

    (repeat sodt

    (setq entdt (ssname ssdt index)

    index (1+ index)

    tt (entget entdt)

     

    )

    (if (cdim entdt dcat1 dcat2)

    (setq sodimsua (1+ sodimsua))

    )

    )

    (prompt (strcat "\n*** \U+0110ã ch\U+1EC9nh s\U+1EEFa [" (itoa sodimsua) "] Dimension ***"))

    (princ)

    (princ)

    )

     

    nguồn: http://www.tramx.vn/Baiviet.aspx?id=Mr.Cùi422201312006

    • Vote tăng 1

  4. cây nhà lá vườn!!!!
    Cái này viết lâu rồi chỉ để dành sài...lâu ngày lên CADviet thấy bà con bàn tới nên post tham khảo.
     
     

     ;>>> SUB FUNTION <<< ;======================================================================================================================================================================= ; >>> HAM SAP XEP CAC DOI TUONG <<< (defun Soft-Value (ss / ss_t kq luu j tam) (setq ss_t (ssadd)) (repeat (sslength ss) (setq tam (ssname ss 0)) (setq j 1) (repeat (- (sslength ss) 1) (if (> (atof (cdr (assoc 1 (entget tam)))) (atof (cdr (assoc 1 (entget (ssname ss j)))))) (setq tam (ssname ss j)) ) (setq j (+ j 1)) ) (setq ss (ssdel tam ss)) (setq ss_t (ssadd tam ss_t)) ) (setq ss ss_t) ) ;======================================================================================================================================================================= ; >>> HAM XAC DINH KHUNG BAN VE <<< (defun c:kt (/ path) (setq path (getvar "dwgprefix")) (setq Drawings-Frame (getfiled ">> Select Frame Objects" path "dwg" 0)) (princ) (princ) ) ;======================================================================================================================================================================= ; >>> HAM CHEN KHUNG TEN VAO BAN VE BANG XREF <<< (defun Insert-New-Frame (pt / th thl i thi list_thi loai default old new tmode) (setq tmode (getvar "TILEMODE")) (If (= tmode 1) (Setvar "TILEMODE" 0)) (setvar "INSUNITS" 4) (command "xref" "a" Drawings-Frame pt 1 1 0) (command ".zoom" "e") ) ;======================================================================================================================================================================= ; >>> HAM THAY DOI GIA TRI Customscale CUA HANG LOAT Viewport <<< (defun Custom-View (Obj New-customscale / SSlen i Ename) (vl-load-com) ;(Prompt "\n>> Nhap gia tri ti le: ") ;(setq New-customscale (getreal "\n>> Nhap gia tri ti le: ")) ;(setq Obj (ssget ":N" '((0 . "VIEWPORT")))) (setq SSlen (sslength Obj)) (setq i 0) (while (< i SSlen) (setq Ename (vlax-ename->vla-object (ssname Obj i))) (vla-put-customscale Ename New-customscale) (setq i (1+ i)) ) ) ;======================================================================================================================================================================= (defun VT-AddLayer(Lname Ltype Color Desc / *kpblc-activedoc* layer) (setq *kpblc-activedoc* (vla-get-activedocument (vlax-get-acad-object))) (setq layer (vla-add (vla-get-layers *kpblc-activedoc*) Lname)) (vla-put-Linetype layer Ltype) (vla-put-color layer Color) (vla-put-Description layer Desc) ;(vla-put-Lineweight layer Lweight) (princ) (princ) ) ;======================================================================================================================================================================= ;>>> MAIN FUNTION <<< (defun c:dlo (/ cl #Tilemode ss Insert-point X-Point Y-Point i OSluu entkhung entp Insert-point P1-frame P2-frame vieww tle new-scale) (command "undo" "be") (setq cl (getvar "CLAYER")) (setvar "cmdecho" 0) (setvar "blipmode" 0) (setq #Tilemode (getvar "TILEMODE")) (setvar "TILEMODE" 1) ;(Prompt "\nCh\U+1ECDn b\U+1EA3n v\U+1EBD khung tên") ;(setq path (getvar "dwgprefix")) ;(setq Drawings-Frame (getfiled "Ch\U+1ECDn b\U+1EA3n v\U+1EBD khung tên" path "dwg" 0)) (if (= Scale-Draw nil) (setq Scale-Draw2 5) (setq Scale-Draw2 Scale-Draw)) (setq Scale-Draw (getreal (strcat "\n - Nh\U+1EADp t\U+1EF7 l\U+1EC7 b\U+1EA3n v\U+1EBD: 1/<" (rtos Scale-Draw2 2 1) ">"))) (if (= Scale-Draw nil) (setq Scale-Draw Scale-Draw2)) (setq ss (ssget (list (cons 0 "TEXT") (cons 8 "sttchonkhung")))) (setq ss (Soft-Value ss)) (setvar "TILEMODE" 0) (setq Insert-point (getpoint "\n - Ch\U+1ECDn \U+0111i\U+1EC3m b\U+1EAFt \U+0111\U+1EA7u r\U+1EA3i: ")) (setq X-Point (car Insert-point)) (setq Y-Point (cadr Insert-point)) (setq Num-Frame (sslength ss)) (setq i 0) (if (= Drawings-Frame nil) (c:kt)) (setq OSluu (getvar "OSMODE")) (setvar "OSMODE" 0) (while (< i Num-Frame) (setq entkhung (ssname ss i)) (setq entp (cdr (assoc 11 (setq entam (entget entkhung)))));Diem chen cua Text (setq Insert-point (list (+ X-Point (* i 420)) Y-Point)) ;===== Chen khung ten bang lenh Xref ===== (Insert-New-Frame Insert-point) ;===== Ve khung viewport ===== (setq P1-frame (list (+ (car Insert-point) 27) (+ (cadr Insert-point) 41))) (setq P2-frame (list (+ (car Insert-point) 407) (+ (cadr Insert-point) 286))) (if (= (tblsearch "layer" "Defpoints") nil) ;(command ".-layer" "M" "Defpoints" "C" 250 "" "") (VT-ADDLAYER "Defpoints" "Continuous" 250 "Hide Frame") ) (setvar "CLAYER" "Defpoints") (command ".mview" P1-frame P2-frame) (setq vieww (entlast)) (command ".mspace") (command ".zoom" "c" entp 245);ZOOM 1:1 (setq tle (/ 1 Scale-Draw)) (setq new-scale (strcat (rtos tle 2 5) "XP"));ZOOM CUSTOME (command ".zoom" new-scale) (command ".pspace") (command ".zoom" "o" vieww "") (setq i (1+ i)) ) (setvar "CLAYER" cl) (setvar "OSMODE" OSluu) ;(alert "Lisp chay xong") (command ".zoom" "e") (command ".undo" "e") (Prompt (strcat "Chay xong " (rtos Num-Frame 2 0) " khung")) (princ) )
    

     
     
     Lisp này cũng có cái bất tiện là phải tạo 1 layer có tên là "sttchonkhung" để tạo trước các khung hình chữ nhật bên model sau đó mới tiến hành lệnh DLO.
    Đang làm cái video cho bà con...khi nào xong sẽ post lên.
    @Video hướng dẫn: http://www.youtube.com/watch?v=2A0JVh1GeYc
    ---------------------------------
    Lâu ngày không ghé.. giờ forum nâng cấp khác quá nên post lisp ko quen...ai sửa lại giúp nhá.
    • Vote tăng 1

  5. Code để bạn tham khảo, chứ có phải chép lại đâu Avi612

    Phần lấy tỉ lệ chính là chỗ CustomScale đó

     

    (vla-get-customscale (vlax-ename->vla-object(ssname (ssget ":S" (list (cons 0 "VIEWPORT"))) 0 )))
    

     

    @Ketxu: Thanks cái đã.

     

    Mình đã áp dụng được cú pháp trên và tìm được 1 cách khác nữa là dùng giá trị của mã DXF 41 chia cho giá trị của mã DXF 45 nó vẫn trả về đúng tỉ lệ customscale.

     

    Và cho mình hỏi thêm:

    -- Nếu như đã lấy được giá trị customscale của khung viewport bằng 2 cách trên rồi thì làm cách nào để có thể áp ngược lại cho nó 1 giá trị mới (do ta nhập vào).

    Ví dụ:

    Khung viewport có tỉ lệ customscale hiện tại là 2. --->mình muốn chuyển nó thành 5 (giá trị 5 do ta nhập vào).

    Nếu được xin mọi người hướng dẫn mình xử lý nó theo 2 cách luôn.

    1. Là dùng các hàm vla, vl....

    2. Là dùng các viết với các hàm thông thường khác.

    Mục đích để so sánh sự khác biệt và với những giá trị nhập vào là số thực thì sai số giữa 2 cách có nhiều ko.

    Thanks mọi người trước.


  6. Cho mình hỏi 1 vấn đề về sử lý đối tượng khung viewport bằng lisp.

    1. Làm thế nào đề xác định tỉ lệ của khung view và mã DXF của nó là bao nhiêu.

    2. Từ 1 viewport hình chữ nhật có sẵn trong nền Layout làm thế nào để xác định được 4 điểm của khung view tương ứng với các vị trí trong nền Model.


  7. Lần sau nhớ xác định rõ mục đích và yêu cầu của bạn trước khi nhờ người khác giúp nhá....

    ; Write by avi612
    (defun C:LTT( / ss n i oldDimzin e d v S)
    
     (defun etype (e) ;;;Entity Type
    (cdr (assoc 0 (entget e)))
     )
    
    (if (not n0) (setq n0 2))
    (setq
    ss (ssget '((0 . "TEXT,MTEXT")))
    n (getint (strcat "\nS\U+1ED1 ch\U+1EEF s\U+1ED1 th\U+1EADp phân: <" (itoa n0) ">"))
    i 0
    oldDimzin (getvar "dimzin")
    )
    (if n (setq n0 n) (setq n n0))
    (setvar "dimzin" 1)
    (repeat (sslength ss)
    (setq e (ssname ss i))
    (if (= (etype e) "MTEXT") (progn
       	(command "explode" e "")
       	(setq e (entlast))
    ))
    (setq
       	d (entget e)
       	v (atof (cdr (assoc 1 d)))
       	S (rtos v 2 n)
       	d (subst (cons 1 S) (assoc 1 d) d)
    )
    (entmod d)
    (setq i (1+ i))
    )
    (setvar "dimzin" oldDimzin)
    (princ)
    )
    

    • Vote tăng 4

  8. Gửi bạn đoạn Code này, mình đã vận dụng được.....thay tên menu và vận dụng nó theo cách của bạn nhé>

     

    (progn
     	(setq menu  "C:\\ISO-Vinx.cui")
     	(setq acadobj (vlax-get-acad-object))
     	(setq menus (vla-get-menuGroups acadobj))
     	(setq flag nil)
     	(vlax-for n menus
    (if (= (vla-get-name n) "ISO-Vinx")
      (setq flag T)
      )
    (terpri)
    )
     	(if (= flag nil)
    (progn
     	(vla-load menus menu)
     	(setq PD1 (vla-item (vla-get-menus (vla-item menus "ISO-Vinx")) 0))
     	(vla-InsertInMenubar PD1 15)
     	)
     	)    
     	(princ)
     	)
    

    • Vote tăng 1

  9. Ý mọi người là muốn thể hiện được Tiếng Việt trong những câu lệnh điều khiển như thế này đó hả?

    Lisp ví dụ:.

    (defun c:ATM(/ os #sset #chuoidau #chuoisau i #ssname #str #new)
     (setvar "CMDECHO" 0)
     (command ".undo" "BE")
     (command ".UCS" "W" ^C^C)
     (Prompt "\n- Ch\U+1ECDn Text c\U+1EA7n thay \U+0111\U+1ED5i:")
     (setq #sset (ssget ":N" '((0 . "*TEXT,DIMENSION")))) 
     (setq #chuoidau (getstring "\n- Thêm ti\U+1EC1n t\U+1ED1: "))
     (setq #chuoisau (getstring "\n- Thêm h\U+1EADu t\U+1ED1: "))
     (setq i 0)
     (while
    (setq #ssname (ssname #sset i))
    (setq #str (cdr (assoc 1 (entget #ssname))))
    (setq #new (strcat #chuoidau #str #chuoisau))
    (entmod (subst  (cons 1 #new) (assoc 1 (entget #ssname)) (entget #ssname)))
    (setq i (1+ i))
    )
     (command ".undo" "E")
     (princ)
     (princ) 
    )
    


  10. 1. Cho mình hỏi về cách sử dụng và chức năng của hàm "defun S::...." mình seach trên forum thì có 1 vài bài viết có sử dụng hàm này nhưng không thấy hướng dẫn cách vận dụng nó....

    2. Một điều nữa là nếu như mình đặt tên 1 biến "ABC" nào đó dùng cho 2 file Lisp khác nhau và mang giá trị khác nhau thì trong quá trình làm việc có xảy ra xung đột giữa 2 giá trị được gán của biến này ko.

    VD:

    (setq ABC "giá trị ở Lisp 1") --> Dòng này ở lisp 1

    (setq ABC "giá trị ở Lisp 2") --> Dòng này ở lisp 2

    Khi lisp 1 và lisp 2 được add vào và sử dụng thì có xảy ra lỗi ko.


  11. Mọi text nằm bên trong Block đều được xem như "ảnh", nghĩa là nó không chịu sự chi phối của biến "mirrtext". Riêng attribute thì không bị đảo ngược, tuy nhiên vị trí của nó lại bị đảo ngược. Chẳng hạn bạn có 1 block gồm 2 attribute, giá trị là 1+2 thì khi mirror (theo phương thẳng đứng) bạn sẽ có 2+1. Dĩ nhiên, chắc bạn không mong muốn như vậy!

     

    Không thể nào xảy ra trường hợp trên được, nếu nói như bạn LoveLisp thì nó "đối xứng nội dung" Text àh...... KO BAO GIỜ có chuyện đó.

    Nếu có thì khi đối xứng 1 attribute thì nó sẽ làm thay đổi điểm chèn của Text chứ ko ảnh hưởng gì đến nội dung cả.

×