Topograf Online

Software => LISP, AutoLISP => Subiect creat de: DorinMuresan din Oct 18, 2011, 02:31 AM

Titlu: lisp incompatibil cu Autocad 2010
Scris de: DorinMuresan din Oct 18, 2011, 02:31 AM
Salutare!ma poate ajuta si pe mine cineva astfel incat sa-mi modifice urmatorul lisp sa ruleze si pe autocad 2010?Nu vreau sa cer prea mult dar chiar nu am deloc cunostinte in programare si sper sa nu considerati ca ma repet sau ca mi-a fost lene sa dau un search pe forum,am vazut k a mai postat cineva aceiasi problema ca si a mea dar nu am vazut sa-i fie data o solutie. E lispul de generare a tabelului de coordonate pentru o polilinie: TABPOL.


(defun C:tabpol(/ ss e1 e l1 l2 vlist i l2)
;sx a blokkok halmaza amik a polilyne-on vannak
  (setq ss (car (entsel "\nPolylinia:")))
  (setq ss2 (ssget "x" (list (cons 0 "INSERT"))))
  (setq ename ss)
  (setq e1 ss)
  (setq e (entget e1))
  (setq lay (cdr (assoc 8 e)))
  (setq pon (cdr (assoc 70 e)))
  (setq l1 nil)
  (setq l2 nil)
  (setq vlist nil)
  (if (or (= (cdr (assoc 0 e)) "LWPOLYLINE") (= (cdr (assoc 0 e)) "POLYLINE"))
   (progn
    (if (= (cdr (assoc 0 e)) "POLYLINE")
      (progn
        (setq e1 (entnext e1))
        (setq e (entget e1))
        (setq l1 nil)
        (while (/= (cdr (assoc 0 e)) "SEQEND")
          (setq l1 (append (list (cdr (assoc 10 e))) l1))
;          (print (cdr (assoc 10 e)))
          (setq z (cdr (assoc 10 e)))
          (setq e1 (entnext e1))
          (setq e (entget e1))
        )
        (setq l2 (reverse l1))
        (setq i (1- (length l1)))
      ) ;end progn
      (progn
        (setq vlist (entget e1))
        (setq i 0)
        (while (< i (cdr (assoc 90 vlist)))
          (setq l1 (append (list (getLwVert i)) l1))
;          (print (getLwVert i))
          (setq i (1+ i))
        )
        (setq l2 (reverse l1))
        (setq i (1- (length l1)))
      ) ;end progn
    ) ;end if
    (setq ptx (getpoint "\nPunct de inceput tabel:"))
;    (command "text" "J" "R" ptx "" "" "Puncte")
    (command "text" ptx "" "" "==============================")
    (command "text" "" "| Numar|Coordonata|Coordonata|")
    (command "text" "" "| punct|     X    |     Y    |")
    (command "text" "" "|------+----------+----------|")
    (setq i 0)
    (setq sx (ssadd))
    (while (< i (length l1))
      (setq pt (nth i l1))
;(print i)
;a j valtozo vegigpasztazza a Blockkokat hogy melyik block van
;beszurva a csomopontra
      (setq j 0)
      (while (< j (sslength ss2))
        (if (equal (cdr (assoc 10 (entget (ssname ss2 j)))) pt 0.1)
          (progn
            (setq ee1 (entnext (ssname ss2 j)))
            (setq nrs (cdr (assoc 1 (entget ee1))))
            (setq nrs (strx nrs 6))

            (setq pt (cdr (assoc 10 (entget (ssname ss2 j)))))
            (setq x (car pt))
            (setq xs (rtos x 2 2))
            (setq xs (strx xs 10))

            (setq y (cadr pt))
            (setq ys (rtos y 2 2))
            (setq ys (strx ys 10))

            (command "text" "" (strcat "|" nrs "|" ys "|" xs "|"))
            (setq sx (ssadd (ssname ss2 j) sx))
          )
        )
        (setq j (1+ j))
      ) ;end while j
      (setq i (1+ i))
    ) ;end while i
    (command "text" "" "|------+----------+----------|")
    (command "area" "e" ename)
    (setq a (getvar "area"))
    (setq a1 (rtos a 2 2))
    (setq a2 (strcat "S = " a1 " mp"))
    (setq a2 (strx a2 18))
    (command "text" "" (strcat "|     " a2 "     |"))
    (command "text" "" "==============================")

;    (setq sx (ssadd ename sx))
     
;    (command "erase" ename "")
   ) ;end progn
   
   (print "Nu este polilinie")
  ) ;end if
)


(defun getLwVert (tmpctr / count tmp)
    (setq count 0)
    (while (/= (car (nth count vlist)) 10)
        (setq count (+ count 1))
    )
    ;; If the counter reaches the number of vertices,
    ;; reset ctr and tmpctr to zero again.
    (if (= tmpctr (cdr (assoc 90 vlist)))
        (progn
        (setq ctr 0)
        (setq tmpctr 0)
        )
    )
    (setq tmp (nth (+ count (* tmpctr 4)) vlist))
    (setq tmp (append tmp (list (cdr (assoc 38 vlist)))))
    (setq pt1 (trans (cdr tmp) (cdr (assoc -1 vlist)) 1))
;    (setq tmp (cons 10 pt1))
    (setq tmp pt1)
;    (setq tmp tmp)
)

(defun plmodi(lay pon)
       (setq e1 (entlast))
       (setq e_listx (entget e1))
       (setq e_listx
          (subst (cons 8 lay) (assoc 8 e_listx) e_listx)
       )
       (entmod e_listx)
       (entupd e1)
       (setq e_listx (entget e1))
       (setq e_listx
          (subst (cons 70 pon) (assoc 70 e_listx) e_listx)
       )
       (entmod e_listx)
       (entupd e1)
)

(defun strx( nrs nk)
  (setq k1 (strlen nrs))
  (setq k1 (- nk k1))
  (setq k 0)
  (setq sk "")
  (while (< k k1)
    (setq sk (strcat " " sk))
    (setq k (1+ k))
  )
  (setq nrs (strcat sk nrs))
  (princ nrs)
)

lispul il incarca imi cere sa selectez polylinia,dar cand dau click pe ea imi da urmatoarea eroare:Polylinia:; error: bad list: 0

Sper sa ma ajutati chiar daca de la prima postare va cer deja favoruri:), raman dator si sper ca pe viitor sa pot contribui si eu cu interventii utile chiar daca nu sunt legate de programare:D.
Titlu: Re: lisp incompatibil cu Autocad 2010
Scris de: advex din Oct 18, 2011, 12:25 PM
Incearca sa utilizezi aplicatia tabcord.lsp postata mai jos. Ea face parte din colectia AsmiTools disponibila la http://www.cadtutor.net/forum/showthread.php?43876-AsmiTools

;; ==================================================================== ;;
;;                                                                      ;;
;;  TABCORD.LSP - Fills the table in co-ordinates of LwPolyline         ;;
;;                vertexes, and also the centres and radiuses           ;;
;;                of arc segments. Marks vertexes of LwPolyline         ;;
;;                accordingly data in the table by digits or            ;;
;;                letters. Look section 'ADJUSTMENT' for                ;;
;;                acquaintance with options.                            ;;
;;                                                                      ;;
;; ==================================================================== ;;
;;                                                                      ;;
;;  Command(s) to call: TABCORD                                         ;;
;;                                                                      ;;
;;  Select LwPolyline and after the table will be generated             ;;
;;  insert it into the necessary place. After that vertexes of          ;;
;;  polylines will be marked by figures or letters.                     ;;
;;                                                                      ;;
;; ==================================================================== ;;
;;                                                                      ;;
;;  THIS PROGRAM AND PARTS OF IT MAY REPRODUCED BY ANY METHOD ON ANY    ;;
;;  MEDIUM FOR ANY REASON. YOU CAN USE OR MODIFY THIS PROGRAM OR        ;;
;;  PARTS OF IT ABSOLUTELY FREE.                                        ;;
;;                                                                      ;;
;;  THIS PROGRAM PROVIDES 'AS IS' WITH ALL FAULTS AND SPECIFICALLY      ;;
;;  DISCLAIMS ANY IMPLIED WARRANTY OF MERCHANTABILITY OR FITNESS        ;;
;;  FOR A PARTICULAR USE.                                               ;;
;;                                                                      ;;
;; ==================================================================== ;;
;;                                                                      ;;
;;  V1.3, 14th Aug 2008, Riga, Latvia                                   ;;
;;  © Aleksandr Smirnov (ASMI)                                          ;;
;;  For AutoCAD 2005 - 2008 (isn't tested in a next versions)           ;;
;;                                                                      ;;
;;                                   http://www.asmitools.com           ;;
;;                                                                      ;;
;; ==================================================================== ;;


(defun c:tabcord(/ aCen cAng cCen cPl cRad cReg
fDr it lCnt lLst mSp pCen pT1
pT2 ptLst R tHt tLst vlaPl vlaTab
vLst cTxt oldCol nPl clFlg actDoc
tPt1 tPt2 cAng tiPt oSnp *error*
mType mHt oZin cAcu dHead hStr
hHt w1 w2 w3 isPer isAre pMul aMul
lWrt aVal xVal yVal)
 

;;;  ****************************************************************
;;;  *************************** ADJUSTMENT *************************
;;;  ****************************************************************

  (setq mType nil) ; Markups mode. T - digits, NIL - letters
 
  (setq tHt -1.0)    ; Table text size. Positive - absolute,
                        ; negative multiplayer to TEXTSIZE variable
 
  (setq mHt -2.0) ; Markups text size. Positive - absolute,
                        ; negative - multiplayer to TEXTSIZE variable
 
  (setq cAcu 4)    ; Precision of coordinates (from 0 to 8)

  (setq dHead nil)    ; If T delete table header, if NIL not delete

  (setq hStr "Land # ") ; Standard header (if dHead not equal T)

  (setq hHt -1.25)      ; Header text size. Positive - absolute,
                        ; negative - multiplayer to TEXTSIZE variable
 
  (setq w1 -10.0)       ; 'Point' column width. Positive - absolute,
                        ; negative - multiplayer to TEXTSIZE variable

  (setq w2 -20.0)       ; 'X' and 'Y' colums width. Positive - absolute,
                        ; negative - multiplayer to TEXTSIZE variable

  (setq w3 -12.0)       ; 'Radius' column width. Positive - absolute,
                        ; negative - multiplayer to TEXTSIZE variable
 
  (setq isPer T) ; if T adds perimeter row

  (setq isAre T)        ; if T adds area row

  (setq isGCen T)       ; if T adds center of gravity row

  (setq pMul 0.001)     ; perimeter multiplayer

  (setq aMul 0.000001)  ; area  multiplayer

;;;  ****************************************************************
;;;  ************************* END ADJUSTMENT ***********************
;;;  ****************************************************************
 
  (if(minusp tHt)
    (setq tHt(getvar "TEXTSIZE"))
    ); end if

  (if(minusp mHt)
    (setq mHt(*(abs mHt)(getvar "TEXTSIZE")))
    ); end if

    (if(minusp hHt)
    (setq hHt(*(abs hHt)(getvar "TEXTSIZE")))
    ); end if

  (if(minusp w1)
    (setq w1(*(abs w1)(getvar "TEXTSIZE")))
    ); end if

  (if(minusp w2)
    (setq w2(*(abs w2)(getvar "TEXTSIZE")))
    ); end if

  (if(minusp w3)
    (setq w3(*(abs w3)(getvar "TEXTSIZE")))
    ); end if

  (vl-load-com)

  (defun Get_Acad_Ver(Gen_Only)
    (if Gen_Only
     (substr(getvar "ACADVER") 1 2)
     (substr(getvar "ACADVER") 1 4)
    ); end if
  ); and of Get_Acad_Ver
 
  (defun Extract_DXF_Values(Ent Code)
    (mapcar 'cdr
     (vl-remove-if-not
      '(lambda(a)(=(car a)Code))
(entget Ent)))
    ); end of


  (defun *error*(msg)
    (setvar "CMDECHO" 1)
    (if oSnp(setvar "OSMODE" oSnp))
    (if oZin(setvar "DIMZIN" oZin))
    (if mSp(vla-EndUndoMark actDoc))
    (princ)
    ); end of *error*

  (defun Alph_Num(Counter / lLst cRes)
  (setq lLst '("A" "B" "C" "D" "E" "F" "G" "H" "I" "J"
       "K" "L" "M" "N" "O" "P" "Q" "R" "S" "T"
       "U" "V" "W" "X" "Y" "Z"))
  (if(<= 1.0(setq cRes(/ Counter 26.0)))
     (strcat(itoa(fix cRes))
   (nth(- Counter(* 26(fix cRes)))lLst))
     (nth Counter lLst)
    ); end if
  ); end of Alph_Num


(if(<= 16.1(atof(Get_Acad_Ver nil)))
  (progn
  (if
    (and
      (setq cPl(entsel "\nSelect LwPoliline > "))
      (= "LWPOLYLINE"(car(Extract_DXF_Values(car cPl)0)))
      ); end and
(progn
  (princ "\nPlease Wait... \n")
  (setq vlaPl(vlax-ename->vla-object(car cPl))
ptLst(mapcar 'append
       (setq vLst(Extract_DXF_Values(car cPl)10))
       (mapcar 'list(Extract_DXF_Values(car cPl)42)))
r 2 lCnt 0
tLst '((1 0 "Point")(1 1 "X")(1 2 "Y")(1 3 "Radius"))
actDoc(vla-get-ActiveDocument
       (vlax-get-acad-object))
mSp(vla-get-ModelSpace actDoc)
    ); end setq
    (setvar "CMDECHO" 0)
    (setq oSnp(getvar "OSMODE"))
    (setq oZin(getvar "DIMZIN"))
    (setvar "DIMZIN" 0)
    (vla-StartUndoMark actDoc)
    (foreach vert ptLst
      (setq vert(trans vert 0 1)
    tLst(append tLst
  (list(list r 0(if mType
  (itoa(1+ lCnt))
    (Alph_Num lCnt)))
  (list r 1(rtos(car vert)2 cAcu))
  (list r 2(rtos(cadr vert)2 cAcu))
  (list r 3 ""))))
      (if(and
   (/= 0.0(last vert))
    (setq pt1(vlax-curve-GetPointAtParam vlaPl lCnt))
    (setq pt2(vlax-curve-GetPointAtParam vlaPl(1+ lCnt)))
   ); end and
(setq r(1+ r)
      cRad(abs(/(distance pt1 pt2)
  2(sin(/(* 4(atan(abs(last vert))))2))))
      aCen(vlax-curve-GetPointAtParam vlaPl(+ 0.5 lCnt))
      fDr(vlax-curve-getFirstDeriv vlaPl
   (vlax-curve-getParamAtPoint vlaPl aCen))
      pCen(trans
    (polar aCen(-(if(minusp(last vert)) pi(* 2 pi))
      (atan(/(car fDr)(cadr fDr))))cRad)0 1)
      tLst(append tLst(list
    (list r 0 "center")
    (list r 1(rtos(car pCen)2 cAcu))
    (list r 2(rtos(cadr pCen)2 cAcu))
    (list r 3(rtos cRad 2 cAcu))))
      ); end setq
); end if
      (setq r(1+ r) lCnt(1+ lCnt))
      ); end foreach
  (setq vlaTab(vla-AddTable mSp (vlax-3D-point '(0 0 0))
(+ 1(/(length tLst)4)) 4 (* 3 tHt)w2))
  (foreach i tLst
    (vl-catch-all-apply 'vla-SetText(cons vlaTab i)) 
    (vla-SetCellTextHeight vlaTab(car i)(cadr i)tHt)
    (vla-SetCellAlignment vlaTab(car i)(cadr i)acMiddleCenter)
    ); end foreach
  (if(or isPer isAre)
    (progn
   (vla-InsertRows vlaTab r(* 0.05 tHt)1)
   (vla-SetCellTextHeight vlaTab r 0(* 0.05 tHt))
   (setq r(1+ r))
      ); end progn
    ); end if
  (if isPer
    (progn
      (if(= :vlax-true(vla-get-Closed vlaPl))
        (setq lWrt "Perimeter")
(setq lWrt "Length")
       ); end if
      (vla-InsertRows vlaTab r tHt 1)
      (vla-SetText vlaTab r 0 lWrt)
      (vla-SetText vlaTab r 1
(rtos(*(vla-get-Length vlaPl)pMul)2 cAcu))
      (vla-SetCellTextHeight vlaTab r 0 tHt)
      (vla-SetCellTextHeight vlaTab r 1 tHt)
      (setq r(1+ r))
      ); end progn
    ); end if
  (if isAre
    (progn
      (if(= :vlax-true(vla-get-Closed vlaPl))
        (setq aVal (rtos(*(vla-get-Area vlaPl)aMul)2 cAcu))
(setq aVal "Not closed contour")
       ); end if
      (vla-InsertRows vlaTab r tHt 1)
      (vla-SetText vlaTab r 0 "Area")
      (vla-SetText vlaTab r 1 aVal)
      (vla-SetCellTextHeight vlaTab r 0 tHt)
      (vla-SetCellTextHeight vlaTab r 1 tHt)
      (setq r(1+ r))
      ); end progn
    ); end if
  (if(= :vlax-true(vla-get-Closed vlaPl))
    (progn
     (setq nPl(vla-Copy vlaPl))
     (command "_.region" (entlast) "")
     (setq cCen(vlax-get(setq cReg
(vlax-ename->vla-object(entlast)))'Centroid))
      (vla-Delete cReg)
      (setq clFlg T)
     ); end progn
    ); end if
  (if isAre
    (progn
      (if cCen
        (setq xVal(rtos(car cCen)2 cAcu)
      yVal (rtos(cadr cCen)2 cAcu))
(setq xVal "-"
      yVal "-")
       ); end if
      (vla-InsertRows vlaTab r tHt 1)
      (vla-SetText vlaTab r 0 "Gravity Center")
      (vla-SetText vlaTab r 1 xVal)
      (vla-SetText vlaTab r 2 yVal)
      (vla-SetCellTextHeight vlaTab r 0 tHt)
      (vla-SetCellTextHeight vlaTab r 1 tHt)
      (vla-SetCellTextHeight vlaTab r 2 tHt)
      (setq r(1+ r))
      ); end progn
    ); end if
  (vla-put-VertCellMargin vlaTab (* 0.75 tHt))
  (vla-SetColumnWidth vlaTab 0 w1)
  (vla-SetColumnWidth vlaTab 3 w3)
  (if(vlax-property-available-p vlaTab 'RepeatTopLabels)
    (vla-put-RepeatTopLabels vlaTab :vlax-true)
    ); end if
  (if(vlax-property-available-p vlaTab 'BreakSpacing)
    (vla-put-BreakSpacing vlaTab (* 3 tHt))
    ); end if
   (if dHead
     (vla-DeleteRows  vlaTab 0 1)
     (progn
       (vla-SetText vlaTab 0 0 hStr)
       (vla-SetCellTextHeight vlaTab 0 0 hHt)
      ); end progn
    ); end if
  (vla-put-Height vlaTab(* 1.75(/(length tLst)4)))
  (princ "\n<<< Place Table >>> ")
  (command "_.copybase" (trans '(0 0 0)0 1)(entlast) "")
  (command "_.erase" (entlast) "")
  (command "_.pasteclip" pause)
  (setq lCnt 0)
  (foreach v vLst
    (if clFlg
      (setq cAng(angle cCen(trans v 0 1))
            iPt(polar v cAng (* 2 mHt)))
      (setq tPt1(vlax-curve-GetPointAtParam vlaPl
  (- lCnt 0.0000001))
    tPt2(vlax-curve-GetPointAtParam vlaPl
  (+ lCnt 0.0000001))
    iPt(polar v(+(* pi 0.5)(if(minusp
(setq cAng(angle tPt1(if tPt2 tPt2
   (polar tPt1(* 0.5 pi)0.0000001)))))
cAng(- cAng)))(* 2 mHt))
    ); end setq
      ); end if
    (setvar "OSMODE" 0)
    (setq cTxt(vla-AddText mSp
      (if mType(itoa(1+ lCnt))(Alph_Num lCnt))
       (vlax-3d-point iPt) mHt)
  tiPt(vla-get-InsertionPoint cTxt)
  lCnt(1+ lCnt)
  ); end setq
    (vla-put-Alignment cTxt 10)
    (vla-put-TextAlignmentPoint cTxt tiPt)
    (setq oldCol(getvar "CECOLOR"))
    (setvar "CECOLOR" "1")
    (command "_.circle"(trans v 0 1) (/ mHt 4))
    (setvar "CECOLOR" oldCol)
    ); end foreach
  (setvar "DIMZIN" oZin)
  (setvar "OSMODE" oSnp)
  (setvar "CMDECHO" 1)
  (vla-EndUndoMark actDoc)
  ); end progn
     (princ "\n<!> It isn't LwPolyline! Quit. <!> ")
    ); end if
   ); end progn
  (princ "\n<!> This program works in AutoCAD 2005+ only! <!> " )
  );end if
    (gc)
  (princ)
 ); end of c:tabcord

(princ "\n[Info] http:\\\\www.AsmiTools.com [Info]")
(princ "\n[Info] Type TABCORD to fill table of LwPolyline coordinates [Info]")
Titlu: Re: lisp incompatibil cu Autocad 2010
Scris de: DorinMuresan din Oct 18, 2011, 03:35 PM
Am incercat lispul, scoate inventar de coordonate dar totodata imi si renumeroateaza el pctele incepand cu litera A si asa le si afiseaza in tabel, iar la suprafata imi spune ca "not closed contour",dar mie imi e inchisa polilinia. Cu tabpol reuseam sa scot inventaru si mi-l afisa cu nr. de puncte ce-l aveam eu in desen,imi afisa si suprafata . Imi e foarte util la anexa 11. Cine poate sa-mi spuna care e diferenta dintre Polylinie si LWPolylinie?sau sa ma ajute cu o modalitata sa extrag inventaru de coordonate(dar inclusiv Z) la toate punctele dintr-o lucrare fara sa mai fiu nevoit sa trag o polilinie prin fiecare punct (mentionez ca punctele sunt block`uri).

Merci Advex pentru alternativa pe care mi-ai oferit-o, dar totodata daca cineva reuseste sa ma ajute cu lispul tabpol raman indatorat
Titlu: Re: lisp incompatibil cu Autocad 2010
Scris de: John Doe din Oct 18, 2011, 04:17 PM
Nici pe 2007 nu merge, e o eroare undeva in aplicatie. Numai daca o iau linie cu linie pot vedea unde anume este, dar nu prea vad rostul.
Este undeva la sectiunea "Scripturi" o aplicatie care tot treaba asta o face, si chiar functioneaza.
Titlu: Re: lisp incompatibil cu Autocad 2010
Scris de: diagodose2009 din Oct 18, 2011, 06:14 PM
#delete

Modificat de diagodose2009 (18-10-2011 15:17:50)
Titlu: Re: lisp incompatibil cu Autocad 2010
Scris de: John Doe din Oct 18, 2011, 08:11 PM
Nu mai stiu unde am postat aplicatia de care ziceam; mai jos aveti o versiune care numeroteaza punctele si pune si tabelul de coordonate langa.  Tabelul e facut sub forma de bloc, daca dupa N încercari nu mai vrea dati un PURGE la desen. Cred ca am undeva si niste versiuni mai noi, care si aranjeaza punctele mai ca lumea. Salvati codul intr-un fisier text cu extensia LSP, il incarcati si merge.

Am pus si comentarii, cine vrea sa modifice ceva cred ca va intelege cam despre ce e vorba.

;;;pentru planse de parcelare OCPI - numeroteaza punctele de contur si face tabelul cu inventarul de coordonate

(defun C:TAB ()
(setq osn_old (getvar "osmode"))
(setvar "osmode" 0)
(command "pdmode" 35)
(command "pdsize" 1.5)
(command "ortho" "off")
(command "units" "2" "3" "3" "4" "0.0000" "N")
(graphscr)
(command "-style" "Arial" "Arial.ttf" 0 1 0 "N" "N")

(setq pi2 (/ pi 2))
(setq 5pi2 (/ (* 5 pi) 2))
(setq 2pi (* pi 2))
(setq 3pi2 (/ (* pi 3) 2))
(setq mselt (ssadd))


(setq sel (car(entsel "\nSelectati conturul:")));;;obiect
(setq msel (entget  sel));;;lista
(setq lng (length msel))

;;;ar trebui sa vedem cate vertexuri are, ca se suprapune ultimul cu primul
(setq index1 0)
(setq nmax 0)
(while (< index1 lng)
(setq nent1 (nth index1 msel))
(setq index1 (+ 1 index1))
(setq cod1 (car nent1))
(if (= 10 cod1)(setq nmax (+ 1 nmax)));;;asta e nr. maxim de puncte
);;;while
(setq nmax (- nmax 1))
;;;acuma le luam pe rand si scriem
(setq index 0)
(setq ncor 0)
(while (< index lng)
(setq nent (nth index msel));;;element de lista
(setq index (+ 1 index))
(setq cod (car nent))
(if (AND (= 10 cod)(<= ncor nmax))(progn
(setq ncor (+ 1 ncor))
(setq y (cadr nent))
(setq x (caddr nent))
(command "point" (list y x));;;parantezele se inchid mai incolo

(if (= ncor 1)(progn
(command "text" (list (+ 1 y) (+ 1 x)) 3 0 ncor)
(setq pant (list y x))
));;;PROGN+IF ncor=1
(if (> ncor 1)(progn
(setq alfa (angle pant (list y x)))
(setq dist (distance pant (list y x)))
(setq ofs 3)
(if (<= alfa pi2)(setq alfa1 (- alfa 5pi2)))
(if (> alfa pi2)(setq alfa1 (- alfa pi2)))
(if (< dist 5)(setq alfap 1)(setq alfap 0))
(if (AND (< distant 5)(= alfant 1))(setq alfap 0))
(setq alfa1 (+ alfa1 pi (* alfap pi)));;;daca sensul poliliniei e clockwise, se adauga un PI
;;;(setq alfa1 (+ alfa1 (* alfap pi)));;;asa e pentru inversul ceasului - sensul poliliniei
(setq aabs (abs alfa1))
(if (> aabs 2pi)(setq aabs (- aabs 2pi)))
(if (AND (>= aabs 0)(< aabs pi2))(setq jt "BL"))
(if (AND (>= aabs pi2)(< aabs pi))(setq jt "BR"))
(if (AND (>= aabs pi)(< aabs 3pi2))(setq jt "TR"))
(if (AND (>= aabs 3pi2)(< aabs 2pi))(setq jt "TL"))
(setq dx (* ofs (cos alfa1)))
(setq dy (* ofs (sin alfa1)))
(command "text" "J" jt (list (+ y dx) (+ x dy)) 3 0 ncor)
(setq pant (list y x))
(setq distant dist)
(setq alfant alfap)
));;;PROGN+IF ncor>1
;;;=================pentru liniile cap de tabel===========================luam X, Y pentru tabel de aici
(if (= ncor 1)(progn
(setq xs y)
(setq ys x)
(setq ps (list y x))
(command "text" (list xs (+ ys 5)) 3 0 "Nr            X                 Y")
(setq mselt (ssadd (entlast) mselt))
(command "line" (list (- xs 1) (+ ys 4)) (list (+ xs 55) (+ ys 4)) "");;;linia de sub Nr....X....Y
(setq mselt (ssadd (entlast) mselt))
(command "line" (list (- xs 1) (+ ys 9)) (list (+ xs 55) (+ ys 9)) "");;;linia de deasupra Nr...X...Y
(setq mselt (ssadd (entlast) mselt))
));;;PROGN si IF ncor=1
;;;==================================================================================
(if (< ncor 10)(setq sp "     "))
(if (AND (< ncor 100)(>= ncor 10))(setq sp "   "))
(if (>= ncor 100)(setq sp " "))
(setq lin (strcat (itoa ncor) sp (rtos x 2 3) " " (rtos y 2 3)))
(setq yc (- ys (* (- ncor 1) 4.8)))
(command "text" (list xs yc) 3 0 lin)
(setq mselt (ssadd (entlast) mselt))
(command "line" (list (- xs 1) (- yc 1)) (list (+ xs 55) (- yc 1)) "")
(setq mselt (ssadd (entlast) mselt))
));;PROGN si IF  cod=10
);;;WHILE de la index lista entitati

;;;acuma liniile verticale
(command "line" (list (- xs 1) (+ ys 9)) (list (- xs 1) (- yc 1)) "");;;verticala din stanga
(setq mselt (ssadd (entlast) mselt))
(command "line" (list (+ xs 7.7) (+ ys 9)) (list (+ xs 7.7) (- yc 1)) "");;;verticala dintre numar si X
(setq mselt (ssadd (entlast) mselt))
(command "line" (list (+ xs 30.85) (+ ys 9)) (list (+ xs 30.85) (- yc 1)) "");;;verticala dintre X si Y
(setq mselt (ssadd (entlast) mselt))
(command "line" (list (+ xs 55) (+ ys 9)) (list (+ xs 55) (- yc 1)) "");;;ultima
(setq mselt (ssadd (entlast) mselt))

;;;acuma sa vedem ce suprafata are
(command "area" "ob" sel)
(setq supraf (getvar "area"))
(setq sint (fix supraf))
(setq dif (- supraf sint))
(if (>= dif 0.5)(setq supraf (+ 1 sint)))
(setq supraf (rtos supraf 2 0))
(command "text" (list (+ xs 12) (- yc 5)) 3 0 (strcat "S=" supraf " mp"))
(setq mselt (ssadd (entlast) mselt))


;;;-------------acum sa facem conturul gros de 0.8 ca se vede mai bine
(command "pedit" sel "W" 0.8 "")

;;;======aici avem mai multe optiuni; se poate face bloc (mai usor de manipulat pe urma): =============
(if (= nil bn)(setq bn 1)(setq bn (+ 1 bn)))
(setq bname (strcat "b" (itoa bn)));;;facem numele blocului, ca sa nu se suprapuna cu altele
(command "-block" bname ps mselt "");;;il ascunde cu totul si trebe inserat dupa aia
(command "insert" bname pause 1 1 0)
(command "scale" "l" "" ps 1.2);;;scara 1:2000 nu se prea vede, scalam

;;;-------------------se poate lua in memorie, si paste dupa aia
;;(command "_cutclip" mselt "")
;;(command "_pasteclip")

;;;------------------sau se face tabelul normal, si pe urma se muta direct ca il face langa punctul nr. 1
;;;(command "move" mselt "" ps)
;;;==================================================================================
(setvar "osmode" osn_old);;;revenim la osnapul dinainte

);;;DEFUN

(princ "\nLansare cu comanda TAB")

Titlu: Re: lisp incompatibil cu Autocad 2010
Scris de: DorinMuresan din Oct 19, 2011, 02:59 AM
John Doe merci pt ajutor, am urmarit postarile tale si chiar esti foarte bun. Cred ca toti am avea multe de invatat de la tine. Referitor la lispul ce l-ai postat as avea nevoie de un pic de ajutor(am reusit sa fac sa nu-mi mai ingroase polilinia dar cam aici s-a oprit tot ceea ce am reusit eu sa modific), sper sa nu fiu luat in ras dar pana sa nu dau de forumul acesta chiar nu stiam mai nimic despre lispuri si cu ce se mananca, stiam doar ca ala face aia in autocad si celalalt face altceva daca sunt incarcate, nimic mai mult. Poti sa-mi spui unde trebuie sa sterg in lisp astfel incat sa nu-mi mai puna puncte si nici sa nu mi le mai numeroteze pe cele existene?si se poate modifica sa-mi extraga numarul de punct ce il am eu in plan pentru tabelul de coordonate ce il genereaza?
Titlu: Re: lisp incompatibil cu Autocad 2010
Scris de: advex din Oct 19, 2011, 09:01 AM
Nu strica sa faci ceva teste cu aplicatia CadTools disponibila la http://www.glamsen.se/CadTools.htm - s-ar putea sa corespunda pentru unele din cerintele tale....
Titlu: Re: lisp incompatibil cu Autocad 2010
Scris de: John Doe din Oct 19, 2011, 11:51 AM
Se poate.
Undeva scrie:
(if (= ncor 1)(progn
            (command "text" (list (+ 1 y) (+ 1 x)) 3 0 ncor)
            (setq pant (list y x))

Pui semnul de comentariu ; in fata randului unde e comanda TEXT:
(if (= ncor 1)(progn
            ;(command "text" (list (+ 1 y) (+ 1 x)) 3 0 ncor)
            (setq pant (list y x))
, si nu-ti mai scrie textul cu numarul punctului. La fel, pui punct si virgula in fata randului unde gasesti comanda POINT putin mai sus si nu-ti mai une nici punctele.

Ca sa-ti faca si un fisier cu punctele, in format CSV zic eu, trebuie adaugate vreo trei randuri, dar mai bine le adaug eu si postez inca o data; revin ceva mai incolo.

Si... nu cred ca sunt eu chiar asa de bun, probabil stiu atât cât sa-mi dau seama ce putine stiu de fapt. Iar de învatat avem cu totii unii de la altii, chiar daca uneori nu ne dam seama.
Titlu: Re: lisp incompatibil cu Autocad 2010
Scris de: zamfy din Oct 19, 2011, 12:33 PM
Dorin, ca sa te putem ajuta, posteaza un fisier dwg cu punctele ca sa vedem in ce format sunt. Din ce am vazut eu, aplicatia tabpol cauta punctele care sunt in desen sub forma de blocuri, apoi te pune sa selectezi o polilinie, iar daca blocurile respective trec prin polilinie, iti genereaza inventarul de coordonate al blocurilor, nu al vertecsilor poliliniei (asta asa, la o prima vedere).
John, aplicatia nu are greseli, numai ca daca ai doar polilinii in desen, fara blocuri, iti da eroare.
Entitatile de tip Polyline s-au folosit pana la AutoCAD R14, dar s-a renuntat la ele, deoarece generau desene uriase pentru acea vreme. La o entitate de tip Polyline, vertecsii sunt entitati distincte,segmentele sunt entitati distincte asa ca la o polilinie formata din 2 vertecsi, aveai de fapt 4 entitati in desen (vertecsii+segmentele).
Asa ca s-au introdus entitatile de tip LWPolyline, unde si vertecsii si segmentele s-au comprimat intr-o singura entitate (o LwPolyline formata din 2 vertecsi=o singura entitate in desen). Astfel, s-au redus si desenele si s-a marit performanta si stabilitatea.
Oricum, toate AutoCAD-urile de la R14 incoace genereaza entitati de tip LWPolyline (adica Light Weight Polyline).
Daca scrii la linia de comanda plinetype 0, o sa iti deseneze polilinii de tip vechi. Daca dai list pe una din ele, o sa vezi ca ai si Polyline si Vertex. Ca sa schimbi la loc, scrii plinetype 2 si o sa iti faca polilinii normale.
La aplicatia tabcord facuta de Smirnov, iti zice "not closed contour", nu pentru ca nu ai inchis tu polilinia, ci pentru ca, chiar daca ai inchis-o, ea este de tip "open", nu "closed" (adica are codul dxf 70 setat la 0, nu la 1). Ca sa o "inchizi", dai comanda pedit, selectezi polilinia, scrii c (de la close) si apoi dai un escape si daca dai list, vei vedea ca e de tip closed.
Bafta!
Titlu: Re: lisp incompatibil cu Autocad 2010
Scris de: advex din Oct 19, 2011, 01:01 PM
Pentru cei interesati sa obtina inventar care sa contina si coordonata z postez mai jos aplicatia lui Smirnov - 3cord.lsp:

;; ==================================================================== ;;
;;                                                                      ;;
;;  3CORD.LSP - Fills the table in co-ordinates of 3DPolyline           ;;
;;              vertexes. Marks vertexes of 3DPolyline                  ;;
;;              accordingly data in the table by digits or              ;;
;;              letters. Look section 'ADJUSTMENT' for                  ;;
;;              acquaintance with options.                              ;;
;;                                                                      ;;
;; ==================================================================== ;;
;;                                                                      ;;
;;  Command(s) to call: 3CORD                                           ;;
;;                                                                      ;;
;;  Select 3DPolyline and after the table will be generated             ;;
;;  insert it into the necessary place. After that vertexes of          ;;
;;  polylines will be marked by figures or letters.                     ;;
;;                                                                      ;;
;; ==================================================================== ;;
;;                                                                      ;;
;;  THIS PROGRAM AND PARTS OF IT MAY REPRODUCED BY ANY METHOD ON ANY    ;;
;;  MEDIUM FOR ANY REASON. YOU CAN USE OR MODIFY THIS PROGRAM OR        ;;
;;  PARTS OF IT ABSOLUTELY FREE.                                        ;;
;;                                                                      ;;
;;  THIS PROGRAM PROVIDES 'AS IS' WITH ALL FAULTS AND SPECIFICALLY      ;;
;;  DISCLAIMS ANY IMPLIED WARRANTY OF MERCHANTABILITY OR FITNESS        ;;
;;  FOR A PARTICULAR USE.                                               ;;
;;                                                                      ;;
;; ==================================================================== ;;
;;                                                                      ;;
;;  V1.3, 14th Aug 2008, Riga, Latvia                                   ;;
;;  © Aleksandr Smirnov (ASMI)                                          ;;
;;  For AutoCAD 2005 - 2008 (isn't tested in a next versions)           ;;
;;                                                                      ;;
;;                                   http://www.asmitools.com           ;;
;;                                                                      ;;
;; ==================================================================== ;;


(defun c:3cord(/ aCen cAng cCen cPl cRad cReg
fDr it lCnt lLst mSp pCen pT1
pT2 ptLst R tHt tLst vlaPl vlaTab
vLst cTxt oldCol nPl clFlg actDoc
tPt1 tPt2 cAng tiPt oSnp *error*
mType mHt oZin cAcu dHead hStr
hHt w1 w2)
 

;;;  ****************************************************************
;;;  *************************** ADJUSTMENT *************************
;;;  ****************************************************************

  (setq mType T) ; Markups mode. T - digits, NIL - letters
 
  (setq tHt -1.0)    ; Table text size. Positive - absolute,
                        ; negative multiplayer to TEXTSIZE variable
 
  (setq mHt -1.0) ; Markups text size. Positive - absolute,
                        ; negative - multiplayer to TEXTSIZE variable
 
  (setq cAcu 4)    ; Precision of coordinates (from 0 to 8)

  (setq dHead T)    ; If T delete table header, if NIL not delete

  (setq hStr "Bnd # ")  ; Standard header (if dHead not equal T)

  (setq hHt -1.25)      ; Header text size. Positive - absolute,
                        ; negative - multiplayer to TEXTSIZE variable
 
  (setq w1 -10.0)       ; 'Point' column width. Positive - absolute,
                        ; negative - multiplayer to TEXTSIZE variable

  (setq w2 -15.0)       ; 'X', 'Y' and 'Z' colums width. Positive - absolute,
                        ; negative - multiplayer to TEXTSIZE variable
 

;;;  ****************************************************************
;;;  ************************* END ADJUSTMENT ***********************
;;;  ****************************************************************
 
  (if(minusp tHt)
    (setq tHt(getvar "TEXTSIZE"))
    ); end if

  (if(minusp mHt)
    (setq mHt(*(abs mHt)(getvar "TEXTSIZE")))
    ); end if

    (if(minusp hHt)
    (setq hHt(*(abs hHt)(getvar "TEXTSIZE")))
    ); end if

  (if(minusp w1)
    (setq w1(*(abs w1)(getvar "TEXTSIZE")))
    ); end if

  (if(minusp w2)
    (setq w2(*(abs w2)(getvar "TEXTSIZE")))
    ); end if

  (vl-load-com)

  (defun Get_Acad_Ver(Gen_Only)
    (if Gen_Only
     (substr(getvar "ACADVER") 1 2)
     (substr(getvar "ACADVER") 1 4)
    ); end if
  ); and of Get_Acad_Ver
 

(defun Extract_3DPoly_Vertexes(Ent / cLst oLst)
    (if(= 'ENAME(type Ent))
      (setq Ent(vlax-ename->vla-object Ent))
      ); end if
    (if(= "AcDb3dPolyline"(vla-get-ObjectName Ent))
      (progn
        (setq cLst(vlax-safearray->list
    (vlax-variant-value
      (vla-get-Coordinates Ent))))
(while cLst
  (setq oLst(cons(list
   (car cLst)
   (cadr cLst)
   (nth 2 cLst))
      oLst)
); end setq
  (repeat 3(setq cLst(cdr cLst)))
   ); end while
(reverse oLst)
); end progn
      ); end if
    ); end of Extract_3DPoly_Vertexes

  (defun *error*(msg)
    (setvar "CMDECHO" 1)
    (if oSnp(setvar "OSMODE" oSnp))
    (if oZin(setvar "DIMZIN" oZin))
    (if mSp(vla-EndUndoMark actDoc))
    (princ)
    ); end of *error*

  (defun Alph_Num(Counter / lLst cRes)
  (setq lLst '("A" "B" "C" "D" "E" "F" "G" "H" "I" "J"
       "K" "L" "M" "N" "O" "P" "Q" "R" "S" "T"
       "U" "V" "W" "X" "Y" "Z"))
  (if(<= 1.0(setq cRes(/ Counter 26.0)))
     (strcat(itoa(fix cRes))
   (nth(- Counter(* 26(fix cRes)))lLst))
     (nth Counter lLst)
    ); end if
  ); end of Alph_Num


(if(<= 16.1(atof(Get_Acad_Ver nil)))
  (progn
  (if
    (and
      (setq cPl(entsel "\nSelect 3DPoliline > "))
      (setq vlaPl(vlax-ename->vla-object(car cPl)))
      (= "AcDb3dPolyline"(vla-get-ObjectName vlaPl))
      ); end and
(progn
  (princ "\nPlease Wait... \n")
  (setq ptLst(Extract_3DPoly_Vertexes vlaPl)
r 2 lCnt 0
tLst '((1 0 "Point")(1 1 "X")(1 2 "Y")(1 3 "Z"))
actDoc(vla-get-ActiveDocument
       (vlax-get-acad-object))
mSp(vla-get-ModelSpace actDoc)
    ); end setq
    (setvar "CMDECHO" 0)
    (setq oSnp(getvar "OSMODE"))
    (setq oZin(getvar "DIMZIN"))
    (setvar "DIMZIN" 0)
    (vla-StartUndoMark actDoc)
    (foreach vert ptLst
      (setq vert(trans vert 0 1)
    tLst(append tLst
  (list
    (list r 0(if mType
  (itoa(1+ lCnt))
    (Alph_Num lCnt)))
  (list r 1(rtos(car vert)2 cAcu))
  (list r 2(rtos(cadr vert)2 cAcu))
  (list r 3(rtos(nth 2 vert)2 cAcu))))
    ); end setq
      (setq r(1+ r) lCnt(1+ lCnt))
      ); end foreach
  (setq vlaTab(vla-AddTable mSp (vlax-3D-point '(0 0 0))
(+ 1(/(length tLst)4)) 4 (* 3 tHt)w2))
  (foreach i tLst
    (vl-catch-all-apply 'vla-SetText(cons vlaTab i)) 
    (vla-SetCellTextHeight vlaTab(car i)(cadr i)tHt)
    (vla-SetCellAlignment vlaTab(car i)(cadr i)acMiddleCenter)
    ); end foreach
  (vla-put-VertCellMargin vlaTab (* 0.75 tHt))
  (vla-SetColumnWidth vlaTab 0 w1)
  (if(vlax-property-available-p vlaTab 'RepeatTopLabels)
    (vla-put-RepeatTopLabels vlaTab :vlax-true)
    ); end if
  (if(vlax-property-available-p vlaTab 'BreakSpacing)
    (vla-put-BreakSpacing vlaTab (* 3 tHt))
    ); end if
   (if dHead
     (vla-DeleteRows  vlaTab 0 1)
     (progn
       (vla-SetText vlaTab 0 0 hStr)
       (vla-SetCellTextHeight vlaTab 0 0 hHt)
      ); end progn
    ); end if
  (vla-put-Height vlaTab(* 1.75(/(length tLst)4)))
  (princ "\n<<< Place Table >>> ")
  (command "_.copybase" (trans '(0 0 0)0 1)(entlast) "")
  (command "_.erase" (entlast) "")
  (command "_.pasteclip" pause)
  (setq lCnt 0)
  (foreach v ptLst
      (setq tPt1(vlax-curve-GetPointAtParam vlaPl
  (+ lCnt 0.0000001))
    tPt2(vlax-curve-GetPointAtParam vlaPl
  (- lCnt 0.0000001))
    iPt(polar v(+(* pi 0.5)(if(minusp
(setq cAng(angle(if tPt1 tPt1 tPt2)
(if tPt2 tPt2(polar tPt1(* 0.5 pi)0.0000001)))))
cAng(- cAng)))(* 2 mHt))
    ); end setq
    (setvar "OSMODE" 0)
    (setq cTxt(vla-AddText mSp
      (if mType(itoa(1+ lCnt))(Alph_Num lCnt))
       (vlax-3d-point iPt) mHt)
  tiPt(vla-get-InsertionPoint cTxt)
  lCnt(1+ lCnt)
  ); end setq
    (vla-put-Alignment cTxt 10)
    (vla-put-TextAlignmentPoint cTxt tiPt)
    (setq oldCol(getvar "CECOLOR"))
    (setvar "CECOLOR" "1")
    (command "_.circle"(trans v 0 1) (/ mHt 4))
    (setvar "CECOLOR" oldCol)
    ); end foreach
  (setvar "DIMZIN" oZin)
  (setvar "OSMODE" oSnp)
  (setvar "CMDECHO" 1)
  (vla-EndUndoMark actDoc)
  ); end progn
     (princ "\n<!> It isn't 3DPolyline! Quit. <!> ")
    ); end if
   ); end progn
  (princ "\n<!> This program works in AutoCAD 2005+ only! <!> " )
  );end if
    (gc)
  (princ)
 ); end of c:3cord

(princ "\n[Info] http:\\\\www.AsmiTools.com [Info]")
(princ "\n[Info] Type 3CORD to fill table of 3D-Polyline coordinates. [Info]")

Titlu: Re: lisp incompatibil cu Autocad 2010
Scris de: John Doe din Oct 19, 2011, 04:14 PM
@zamfy: asa este, eu am vazut doar asa din zbor ca e vorba si despre SEQUEND si mi-am zis ca pe alea le scrie, nu m-am gandit ca trebuie si blocuri fix in ele.
Titlu: Re: lisp incompatibil cu Autocad 2010
Scris de: DorinMuresan din Oct 20, 2011, 03:09 AM
JohnDoe merci,am reusit sa-l modific. Acuma e mult mai bine pt mine. De exemplu daca ai gasi in lispul acela ce l-am postat eu (tabpol) exact randurile din el care fac sa-si extraga nr. de punct din plan si le-ai copia in lispul tau nu ar fi mai usor sa-l modifici astfel incat sa faca si el asta?

Zamfy sa stii ca de la cine am primit eu lispul acesta mi-a spus ca a fost creat chiar pentru autocadR14 si ca e foarte vechi,eu l-am folosit doar pe Autocad2006 si acolo imi mergea. Am reusit sa-mi inchid si eu polylinia si mi-a  dat suprafata pana la urma cu lispul tabcord, dar observ ca suprafata e calculata in km2. Cum pot sa-mi setez polylinia in asa fel incat sa mi-o faca tot timpu closed? Si am atasat si un plan (http://fbx.ro/gzqwhbpxm2m10c21) cu tipul de puncte cu care lucrez eu(nr de punct si Z e pe 2 layere diferite),mentionez faptul ca pe acelasi tip de puncte lispul tabpol functioneaza in Autocad2006.

Advex activez lispul 3cord si imi spune ca polilinia nu e 3D, am reusit sa o fac 3D cu aplicatia cadtools de care mi-ai spus mai sus (si in care am gasit cateva chestii interesante, printre care sa-mi exporte coordonatele xyz din blocuri in excel,dar la multe inca nu m-am prins cum functioneaza) doar ca nu-mi scoate Z,la Z imi apare peste tot 0. Sa fie oare din cauza faptului ca punctele mele sunt blocuri?

Pentru cei care mai lucreaza cu puncte de tip block am reusit sa fac rost de un template care scoate Inventaru XYZ:
0              C006000
000            C006000
BL:NAME        C007000
BL:Y            N012003
BL:X            N012003
0,0            N012003
Z              N012003

se copiaza intr-un fisier .txt dupa care se incarca in autocad cu comanda attext
Titlu: Re: lisp incompatibil cu Autocad 2010
Scris de: John Doe din Oct 20, 2011, 10:38 AM
@DorinMuresan: Pentru tine probabil ar fi misto dar... cum sa zic? ti-am dat un deget doar, nu lua toata mâna. Am si eu ale mele de rezolvat, te rog sa ma intelegi.

Exista si comanda EATTEXT (AutoCAD 2007, in Tools), se foloseste la extragerea atributelor blocurilor, poate fi utila uneori.
Titlu: Re: lisp incompatibil cu Autocad 2010
Scris de: advex din Oct 20, 2011, 02:07 PM
Citat din: DorinMuresanAdvex activez lispul 3cord si imi spune ca polilinia nu e 3D, am reusit sa o fac 3D cu aplicatia cadtools de care mi-ai spus mai sus (si in care am gasit cateva chestii interesante, printre care sa-mi exporte coordonatele xyz din blocuri in excel,dar la multe inca nu m-am prins cum functioneaza) doar ca nu-mi scoate Z,la Z imi apare peste tot 0. Sa fie oare din cauza faptului ca punctele mele sunt blocuri?

Toate blocurile tale au cota 0.00, informatiile despre valoarea z sunt pastrate in atributele blocului. Este necesara mutarea la cota z din atributul 0,0 al blocului 1 (ciudate denumiri ai mai ales!!!).
Dupa ce ai blocurile plasate la z corect, vei obtine si o polilinie 3D.

Incearca aplicatia de mai jos pentru pozitionare blocuri inainte de trasare polilinii:

(defun C:schimbz (/ bname elist ent i ip next next_data sset)
  (setvar "cmdecho" 0)
  (command "._undo" "_e")
  (command "._undo" "_g")
  (setq bname (getstring T "\nIntrodu nume block (case-sensitive)\n"))
 
  (prompt "\nSelectie blocuri pentru schimbare z\n")
  (setvar "nomutt" 1)
  (if (setq sset (ssget (list (cons 2 bname))) i -1)
    (progn
    (setvar "nomutt" 0)
    (while (setq ent (ssname sset (setq i (1+ i))))
      (setq elist (entget ent)
    ip (cdr (assoc 10 elist)))
      (setq next ent)
      (setq next    (entnext next)
           next_data (entget next))
      (while (not (eq "SEQEND" (cdr (assoc 0 next_data))))
(if
; (eq "ELEV" (cdr (assoc 2 next_data)))
(eq "0,0" (cdr (assoc 2 next_data)))
  (progn
    (entmod
      (subst
(cons 10 (list (car ip)(cadr ip)(atof (cdr (assoc 1 next_data)))))
(assoc 10 elist) elist))
    (entupd ent)))
    (setq next_data (entget (entnext (cdr (assoc -1 next_data)))))
  )
)
      )
 
    (prompt (strcat "\n\tNu sunt blocuri cu acest nume: "
    "\""      bname
    "\""      " in desen."
   )
    )
  )

  (command "regen")
  (setvar "cmdecho" 1)
  (command "._undo" "_e")
  (princ)
)
(prompt "\nType SCHIMBZ to execute ...")
(princ)
Titlu: Re: lisp incompatibil cu Autocad 2010
Scris de: DorinMuresan din Oct 21, 2011, 11:59 PM
John Doe deci scuze, nu am vrut sa profit de bunatatea ta doar ca ai scris:"Ca sa-ti faca si un fisier cu punctele, in format CSV zic eu, trebuie adaugate vreo trei randuri, dar mai bine le adaug eu si postez inca o data; revin ceva mai incolo." si am crezut ca te-ai referit la treaba asta. Chiar nu am avut nici o intentie de a-ti forta mana,doar ca am inteles eu gresit. Si te inteleg perfect cand spui ca ai altceva mai bun de facut. Oricum merci de toate sfaturile de pana acuma,au ajutat.
Advex am reusit acuma cu inventaru dupa ce am ridicat blocurile la z corect,merci si tie.
Titlu: Re: lisp incompatibil cu Autocad 2010
Scris de: John Doe din Oct 23, 2011, 12:36 AM
Stiu ca asa am zis si asa o sa fac, doar ca ti s-au oferit si alte solutii intre timp si nu mai stiam pentru care ai optat. O sa revin luni sau marti cu modificarile la LISP-ul meu - nu pot mai repede, asta este.

Chestia cu degetul si mana era cu referire la modificarea lispului "tabpol" al tau - asta insemnand ca da, pe forum poti gasi unele rezolvari la unele chestiuni dar nu la orice ai tu nevoie; pentru asta trebuie sa pui tu singur mana si sa muncesti multi ani la rand, asa cum fac de obicei aceia care acum ajuta pe altii. Atat cat pot si ei.
Nu-ti spun astea cu rautate, dar uneori lucrurile pe care ni le dorim pot avea si alta fata decat ne inchipuim noi la un moment dat - cam asta am vrut sa spun in esenta, nu sa te admonestez.
Titlu: Re: lisp incompatibil cu Autocad 2010
Scris de: DorinMuresan din Oct 25, 2011, 03:05 AM
Atunci inseamna ca eu m-am facut inteles gresit, deoarece eu m-am referit sa modifici lispul tau "tab" ajutandu-te de lispul "tabpol". M-am gandit doar ca ar fi mai usor si ca poate ai gasi ceva folositor in "tabpol"...Si chiar apreciez toata munca ce o depui tu si ceilalti colegi de pe forum, ce postati sfaturi utile pt. a ajuta niste persoane total straine voua si care probabil daca ar avea ocazia sa va intoarca favoarea nu ar face-o. Momentan eu sunt la inceput,dar sper sa pot fi si eu de folos cu timpul asa cum si altii au fost si sper ca vor fi pt mine.
Titlu: Re: lisp incompatibil cu Autocad 2010
Scris de: John Doe din Oct 25, 2011, 11:07 AM
@Dorin: ieri (luni) am avut o zi... grea. Astazi vreau sa ma apuc sa modific lispul acela, dar citind inca o data ce ai scris tu mai sus s-ar putea sa nu fi inteles eu bine ce vrei sa faca:  vrei sa-ti faca si un fisier (CSV, in principiu) cu punctele care ti le pune el pe contur sau vrei sa-ti faca un tabel cu coordonatele punctelor dar cu numerele punctelor care sunt deja in desen?
Daca vrei coordonatele dar cu numerele existente deja e cam nashpa, nu stiu altfel decat daca selectezi manual fiecare punct si îi spui ce numar are. S-a mai discutat asta, nu stiu ce algoritm ar fi suficient de universal ca sa poata recunoaste numarul care este atasat unui set de coordonate.
Explica putin ce vrei sa faci de fapt, te astept.
Titlu: Re: lisp incompatibil cu Autocad 2010
Scris de: advex din Oct 25, 2011, 01:18 PM
Daca ne luptam sa modificam programe, sa le adaptam cerintelor noastre este bine sa amintim ca a incetat din viata, la 84 ani, John McCarthy, inventatorul limbajului de programare lisp.
(http://news.cnet.com/i/tim/2011/10/24/800px-John_McCarthy_Stanford_610x406.jpg)
vezi: http://news.cnet.com/8301-1001_3-20125026-92/john-mccarthy-creator-of-lisp-programming-language-dies/
Titlu: Re: lisp incompatibil cu Autocad 2010
Scris de: John Doe din Oct 25, 2011, 08:19 PM
Pentru mine e cumva reconfortant gândul ca exista sau au existat si asemenea oameni. Dumnezeu sa-l odihneasca.
Titlu: Re: lisp incompatibil cu Autocad 2010
Scris de: zamfy din Oct 25, 2011, 09:09 PM
Eu am descarcat planul dwg incarcat de Dorin, am incarcat lisp-ul tabpol si a functionat perfect. Inseamna ca e de vina AutoCAD 2010.
Titlu: Re: lisp incompatibil cu Autocad 2010
Scris de: DorinMuresan din Oct 26, 2011, 12:12 AM
John ma gandeam ca se poate modificat astfel incat sa faca un tabel cu coordonatele punctelor dar cu numerele punctelor care sunt deja in desen. Sa stii ca am citit si topicul acela in care s-a mai discutat despre asta si de aceea m-am gandit ca poate ar fi de ajutor lispul "tabpol", deoarece lispul "tabpol" face asta. Face tabel cu coordonatele punctelor dar cu numerele punctelor care sunt deja in desen si de aceea m-am gandit ca daca ai copia din "tabpol" in "tab" exact algoritmii respectivi,o sa faca si "tab" asta.
Zamfy tie in ce versiune de autocad ti-a functionat lispul?
Titlu: Re: lisp incompatibil cu Autocad 2010
Scris de: John Doe din Oct 26, 2011, 11:20 AM
In cazu asta particular cred ca s-ar putea, cu anumite restrictii dar e destul de complicat si chiar nu am timp. Coordonatele din plan se extrag usor, asocierea cu numele punctului din desen e mai pacatoasa.

Sub AutoCAD 2007 merge "tabpol" , nu-mi dau seama ce poate fi la 2010 de nu merge.
Titlu: Re: lisp incompatibil cu Autocad 2010
Scris de: Marian din Oct 26, 2011, 11:35 AM
Citat din: John DoeIn cazu asta particular cred ca s-ar putea, cu anumite restrictii dar e destul de complicat si chiar nu am timp. Coordonatele din plan se extrag usor, asocierea cu numele punctului din desen e mai pacatoasa.

Sub AutoCAD 2007 merge "tabpol" , nu-mi dau seama ce poate fi la 2010 de nu merge.
Mie mi-a facut cineva acum multi ani un program care extragea din desen coord pct si numarul lui. Deci: raportam cu toposys-ul punctele radiate. Toposys-ul, in functie de scara planului pe care i-o dai, raporteaza punctele, si la 45 de grade dreapta sus, pune si numarul punctului. Distanta dintre punct si pct de insertie al cifrei este totdeauna aceeasi(in fct de scara planului) Ei bine, constanta asta a fost folosita ptr realizarea programului respectiv. Eu nu ma pricep la programare, insa am dat aceste detalii poate va vin idei!
Titlu: Re: lisp incompatibil cu Autocad 2010
Scris de: John Doe din Oct 26, 2011, 02:19 PM

                  Si daca omul are punctele raportate cu altceva, altfel? Si daca dupa ce le-a raportat le-a si mutat nitel pe unele ca nu se vedeau ca lumea, si pe urma vrea tabelul? Punctele sunt POINT sau blocuri? Cu sau fara atribute?  S-a mai discutat asta.
Concluzia mea este ca nu exista programe care sa faca tot ce vrea fiecare utilizator, de multe ori cel mai bine e sa te descurci cum poti, cu un pic de imaginatie. Cred ca cu TopoLT s-ar putea descurca treaba asta foarte bine.



               
Titlu: Re: lisp incompatibil cu Autocad 2010
Scris de: Marian din Oct 26, 2011, 07:52 PM

                  Intr-adevar, sint f multi de "daca", eu nu am incercat decit sa ajut.


               
Titlu: Re: lisp incompatibil cu Autocad 2010
Scris de: John Doe din Oct 26, 2011, 10:00 PM

                  Am inteles, apreciez.