FastFiber

Decimalen bij selecteren in Lisp

Gestart door Joop, ma 30 06 2008, 13:33:18

Vorige topic - Volgende topic

Joop

Beste collegas,

Als ik met list een poly line weergeef krijg ik coordinaten in twee decimalen.
Dit is correct.
Als ik dezelfde pline in lisp selecteer krijg ik de coordinaten maar dan afgerond naar beneden.
De coordinaten kunnen tot 16 decimalen hebben (absurd, maar goed), ik heb er echter maar maximaal 5 nodig.

Alvast bedankt.

Joop

(defun MakeXYZList ()
  (Setq Flag "Not determent")
  (setq PlineData (entget (car (nentsel))))
  (setq CurrentPath (dos_path))
  (foreach Item PlineData
    (if (= (car item) 10)
      (progn
(setq Flag "YES")
(princ Item)
(princ "\n")
      )
      (setq Flag "NO")
    )
  )
)

PS
De flag zit er in voor debug doeleinden.
J
Een gelovig volger van
"de Sacrale Kunst van Luiheid",
zijn leider "Lisp" en acoliet "Script".

EddyBeerke

Ik heb een keer iets gemaakt om coord met een leader te plaatsen en dit heb ik toen verzonnen:


;;;stel de decimalen in
  (setq dm (getint "\nType aantal decimalen : <3>"))
  (if dm "" (setq dm 3)) 

...
...

  ;;;De tekst wordt geformateerd naar x dec. achter de comma/punt
  (setq str "\nWaarde omgevormd naar: ")
  (setq X4 (rtos X3 2 dm))     
  (princ (strcat str X4))
Civil3d 2026, Blender 4.x gebruiker
Gebruiker sinds AutoCAD R12

http://eddylucas.c1.biz/
https://www.google.com/maps/contrib/109381066561676463628/photos/

HofCAD

#2
Citaat van: Joop op ma 30 06 2008, 13:33:18
Beste collegas,

Als ik met list een poly line weergeef krijg ik coordinaten in twee decimalen.
Dit is correct.
Als ik dezelfde pline in lisp selecteer krijg ik de coordinaten maar dan afgerond naar beneden.
De coordinaten kunnen tot 16 decimalen hebben (absurd, maar goed), ik heb er echter maar maximaal 5 nodig.

Alvast bedankt.

Joop

(defun MakeXYZList ()
  (Setq Flag "Not determent")
  (setq PlineData (entget (car (nentsel))))
  (setq CurrentPath (dos_path))
  (foreach Item PlineData
    (if (= (car item) 10)
      (progn
(setq Flag "YES")
(princ Item)
(princ "\n")
      )
      (setq Flag "NO")
    )
  )
)

PS
De flag zit er in voor debug doeleinden.
J

Beste Joop,

'Absurd, maar goed' snap ik niet goed met mijn blonde kopje. :oops:
Kijk eens naar mijn blond bericht van 22 09 2005:
http://www.cadsite.be/smf/index.php/topic,804.0.html
Geschiedenis vond ik altijd een prachtig vak. :lol:

Met vriendelijke groet, HofCAD CSI
ACADcadabra

Joop

HofCAD,

De tekeningen waar ik mee bezig ben zijn persleidingen voor riolering.
De tekeningen zijn getekend in rijks-coordinaten op een schaal van 1 unit = 1 meter.
IK teken nooit op een miljardste millimeter nauwkeurig.

Jouw topic heb ik inderdaad al gelezen voordat ik deze vraag op de site zette.

Hier zie je een deel van de lijst gemaakt met list commando:

  • at point  X=198770.78  Y=372076.70  Z=     0.00
              at point  X=198770.84  Y=372079.02  Z=     0.00
              at point  X=198770.93  Y=372082.01  Z=     0.00
              at point  X=198770.99  Y=372084.05  Z=     0.00
              at point  X=198771.04  Y=372086.00  Z=     0.00
              at point  X=198771.08  Y=372087.29  Z=     0.00
              at point  X=198771.51  Y=372102.14  Z=     0.00
              at point  X=198772.35  Y=372126.98  Z=     0.00
en hier een lijst gemaakt met bovengenoemde routine:


  • (10 198619.0 372021.0)
    (10 198642.0 372030.0)
    (10 198665.0 372038.0)
    (10 198688.0 372046.0)
    (10 198711.0 372055.0)
    (10 198735.0 372064.0)
    (10 198758.0 372072.0)
    (10 198771.0 372077.0)
Dus, al gebruik ik jouw routine dan nog begint hij met de verkeerde waarde.
Of zie ik dit totaal verkeerd?

Even voor de duidelijkheid: dit is tot nu toe alleen in deze tekening (ik moet er nog ongeveer 200 doen).
Eeen lijst gemaakt met mijn routine van een andere tekening zie je hier:

  • (10 6526.18 234.6)
    (10 6529.87 234.698)
    (10 6573.07 236.713)
    (10 6603.04 236.8 )
    (10 6630.33 236.9)
    (10 6679.83 237.1)
Een gelovig volger van
"de Sacrale Kunst van Luiheid",
zijn leider "Lisp" en acoliet "Script".

HofCAD

#4
Citaat van: Joop op di 01 07 2008, 09:27:48
HofCAD,
De tekeningen waar ik mee bezig ben zijn persleidingen voor riolering.
De tekeningen zijn getekend in rijks-coordinaten op een schaal van 1 unit = 1 meter.
IK teken nooit op een miljardste millimeter nauwkeurig.
Beste Joop,

Sorry, maar ik kan met mijn blonde kopje zelf niet bepalen met welke nauwkeurigheid
AutoCAD tekent (LUPREC is alleen weergaveprecisie).
AutoCAD kan volgens mij niet bepalen of de ingevoerde waarden wiskundig exact zijn of
afgeronde maten zijn, en rekent daarom alles uit met een zelfde vastgelegde
nauwkeurigheid.
De gewenste nauwkeurigheid van een tekenaar is een andere nauwkeurigheid die AutoCAD
wenst, omdat de nauwkeurigheid van belang is om te bepalen of iets bijv sluitend
of bijv tangentieel is zowel bij een tekening van het universum of bij een tekening van een
microchip; hierbij weet AutoCAD namelijk niet of je tekeneenheid een kilometer of een nanometer is.

Ik laad eerst de volgende procedure:

(defun MakeXYZList2 ()
  (setq ~zin (getvar "DIMZIN"))
  (setvar "DIMZIN" 0)(setvar "UNITMODE" 0)
  (setq PlineData (entget (car (nentsel))))
  (setq vertex 0)
  (foreach Item PlineData
    (if (= (car item) 10)
      (progn
(setq vertex (1+ vertex))
(princ (strcat "\n(princ item) bij vertex " (itoa Vertex) " geeft:\n"))
(princ item)
(setvar "DIMZIN" 0)
(princ (strcat "\n(princ (strcat \"(10 \" (rtos (cadr item) 2 14) \" \"  (rtos (caddr item) 2 14) \")\"))"
" bij vertex " (itoa Vertex) " geeft met Dimzin op 0:\n"))
(princ (strcat "(10 " (rtos (cadr item) 2 14) " "  (rtos (caddr item) 2 14) ")"))
(setvar "DIMZIN" 12)
(princ (strcat "\n(princ (strcat \"(10 \" (rtos (cadr item) 2 14) \" \"  (rtos (caddr item) 2 14) \")\"))"
" bij vertex " (itoa Vertex) " geeft met Dimzin op 12:\n"))
(princ (strcat "(10 " (rtos (cadr item) 2 14) " "  (rtos (caddr item) 2 14) ")"))
(setvar "DIMZIN" 12)
(princ (strcat "\n(princ (strcat \"(10 \" (rtos (cadr item) 2 2) \" \"  (rtos (caddr item) 2 2) \")\"))"
" bij vertex " (itoa Vertex) " geeft met Dimzin op 12:\n"))
(princ (strcat "(10 " (rtos (cadr item) 2 2) " "  (rtos (caddr item) 2 2) ")"))
(princ "\n")
      )

    )
  )
(setvar "DIMZIN" ~zin)
)


Daarna maak ik eerst je polylijn met:

(command "_PLINE" '(198770.78 372076.70 0.00) '(198770.84 372079.02 0.00) '(198770.93 372082.01 0.00)
'(198770.99 372084.05 0.00) '(198771.04 372086.00 0.00) '(198771.08 372087.29 0.00) '(198771.51 372102.14 0.00)
'(198772.35 372126.98 0.00) "")


Dan geef ik in:
(MakeXYZList2)
Select object:  ;ik selecteer nu de polylijn en ik krijg het volgende:

(princ item) bij vertex 1 geeft:
(10 198771.0 372077.0)
(princ (strcat "(10 " (rtos (cadr item) 2 14) " "  (rtos (caddr item) 2 14)
")")) bij vertex 1 geeft met Dimzin op 0:
(10 198770.7800000000 372076.7000000000)
(princ (strcat "(10 " (rtos (cadr item) 2 14) " "  (rtos (caddr item) 2 14)
")")) bij vertex 1 geeft met Dimzin op 12:
(10 198770.78 372076.7)
(princ (strcat "(10 " (rtos (cadr item) 2 2) " "  (rtos (caddr item) 2 2) ")"))
bij vertex 1 geeft met Dimzin op 12:
(10 198770.78 372076.7)

(princ item) bij vertex 2 geeft:
(10 198771.0 372079.0)
(princ (strcat "(10 " (rtos (cadr item) 2 14) " "  (rtos (caddr item) 2 14)
")")) bij vertex 2 geeft met Dimzin op 0:
(10 198770.8400000000 372079.0200000001); zeer raar
(princ (strcat "(10 " (rtos (cadr item) 2 14) " "  (rtos (caddr item) 2 14)
")")) bij vertex 2 geeft met Dimzin op 12:
(10 198770.84 372079.0200000001) ; zeer raar
(princ (strcat "(10 " (rtos (cadr item) 2 2) " "  (rtos (caddr item) 2 2) ")"))
bij vertex 2 geeft met Dimzin op 12:
(10 198770.84 372079.02)

(princ item) bij vertex 3 geeft:
(10 198771.0 372082.0)
(princ (strcat "(10 " (rtos (cadr item) 2 14) " "  (rtos (caddr item) 2 14)
")")) bij vertex 3 geeft met Dimzin op 0:
(10 198770.9300000000 372082.0100000000)
(princ (strcat "(10 " (rtos (cadr item) 2 14) " "  (rtos (caddr item) 2 14)
")")) bij vertex 3 geeft met Dimzin op 12:
(10 198770.93 372082.01)
(princ (strcat "(10 " (rtos (cadr item) 2 2) " "  (rtos (caddr item) 2 2) ")"))
bij vertex 3 geeft met Dimzin op 12:
(10 198770.93 372082.01)

(princ item) bij vertex 4 geeft:
(10 198771.0 372084.0)
(princ (strcat "(10 " (rtos (cadr item) 2 14) " "  (rtos (caddr item) 2 14)
")")) bij vertex 4 geeft met Dimzin op 0:
(10 198770.9900000000 372084.0500000000)
(princ (strcat "(10 " (rtos (cadr item) 2 14) " "  (rtos (caddr item) 2 14)
")")) bij vertex 4 geeft met Dimzin op 12:
(10 198770.99 372084.05)
(princ (strcat "(10 " (rtos (cadr item) 2 2) " "  (rtos (caddr item) 2 2) ")"))
bij vertex 4 geeft met Dimzin op 12:
(10 198770.99 372084.05)

(princ item) bij vertex 5 geeft:
(10 198771.0 372086.0)
(princ (strcat "(10 " (rtos (cadr item) 2 14) " "  (rtos (caddr item) 2 14)
")")) bij vertex 5 geeft met Dimzin op 0:
(10 198771.0400000000 372086.0000000000)
(princ (strcat "(10 " (rtos (cadr item) 2 14) " "  (rtos (caddr item) 2 14)
")")) bij vertex 5 geeft met Dimzin op 12:
(10 198771.04 372086)
(princ (strcat "(10 " (rtos (cadr item) 2 2) " "  (rtos (caddr item) 2 2) ")"))
bij vertex 5 geeft met Dimzin op 12:
(10 198771.04 372086)

(princ item) bij vertex 6 geeft:
(10 198771.0 372087.0)
(princ (strcat "(10 " (rtos (cadr item) 2 14) " "  (rtos (caddr item) 2 14)
")")) bij vertex 6 geeft met Dimzin op 0:
(10 198771.0800000000 372087.2900000000)
(princ (strcat "(10 " (rtos (cadr item) 2 14) " "  (rtos (caddr item) 2 14)
")")) bij vertex 6 geeft met Dimzin op 12:
(10 198771.08 372087.29)
(princ (strcat "(10 " (rtos (cadr item) 2 2) " "  (rtos (caddr item) 2 2) ")"))
bij vertex 6 geeft met Dimzin op 12:
(10 198771.08 372087.29)

(princ item) bij vertex 7 geeft:
(10 198772.0 372102.0)
(princ (strcat "(10 " (rtos (cadr item) 2 14) " "  (rtos (caddr item) 2 14)
")")) bij vertex 7 geeft met Dimzin op 0:
(10 198771.5100000000 372102.1400000000)
(princ (strcat "(10 " (rtos (cadr item) 2 14) " "  (rtos (caddr item) 2 14)
")")) bij vertex 7 geeft met Dimzin op 12:
(10 198771.51 372102.14)
(princ (strcat "(10 " (rtos (cadr item) 2 2) " "  (rtos (caddr item) 2 2) ")"))
bij vertex 7 geeft met Dimzin op 12:
(10 198771.51 372102.14)

(princ item) bij vertex 8 geeft:
(10 198772.0 372127.0)
(princ (strcat "(10 " (rtos (cadr item) 2 14) " "  (rtos (caddr item) 2 14)
")")) bij vertex 8 geeft met Dimzin op 0:
(10 198772.3500000000 372126.9800000000)
(princ (strcat "(10 " (rtos (cadr item) 2 14) " "  (rtos (caddr item) 2 14)
")")) bij vertex 8 geeft met Dimzin op 12:
(10 198772.35 372126.98)
(princ (strcat "(10 " (rtos (cadr item) 2 2) " "  (rtos (caddr item) 2 2) ")"))
bij vertex 8 geeft met Dimzin op 12:
(10 198772.35 372126.98)
12

De conclusie is: Dat de originele  waarden terug te krijgen zijn, maar met
(princ item) verkeerd worden weergegeven.
Alleen bij vertex 2 wijkt de tiende decimaal af.

Met vriendelijke groet, HofCAD CSI

ACADcadabra

HofCAD

#5
Beste Joop,

Ik denk dat het onderwerp 'Entmake function' op
http://www.theswamp.org/index.php?topic=4814.15
interresant voor je is.
Van latere datum is: 'Table Maker Anyone?'
http://www.theswamp.org/index.php?topic=23231.0

Met vriendelijke groet, HofCAD CSI

PS: Zie ook de twee bijgevoegde Lisps
ACADcadabra

Joop

HofCAD bedankt.
Komende maandag zit ik weer bij Waterschapsbedrijf Limburg en kan ik weer verder met de betreffende tekening.
Ik laat je het resultaat weten.

Joop
Een gelovig volger van
"de Sacrale Kunst van Luiheid",
zijn leider "Lisp" en acoliet "Script".

Joop

Bedankt, HofCAD.
Het resultaat is inderdaad bevredigend, waaruit dua maar weer blijkt dat blondje niet synonym is aan dummy.
Maar de vraag blijft: Waarom krijg ik, in deze tekening, bij list waarden afgerond op 1 cijfer achter de komma en is dat altijd nul :vraagteken:

Een gelovig volger van
"de Sacrale Kunst van Luiheid",
zijn leider "Lisp" en acoliet "Script".

HofCAD

Citaat van: Joop op ma 07 07 2008, 12:14:29
Bedankt, HofCAD.
Het resultaat is inderdaad bevredigend, waaruit dua maar weer blijkt dat blondje niet synonym is aan dummy.
Maar de vraag blijft: Waarom krijg ik, in deze tekening, bij list waarden afgerond op 1 cijfer achter de komma en is dat altijd nul :vraagteken:

Beste Joop,

Bedoel je bij het commando LIST of bedoel je met (princ Item).
Ik snap ook niet goed, hoe je waarden bij een eerdere inzending zover
uit elkaar kunnen liggen.
Je hebt ooit dit gestuurd:
Jouw topic heb ik inderdaad al gelezen voordat ik deze vraag op de site zette.

Hier zie je een deel van de lijst gemaakt met list commando:

at point  X=198770.78  Y=372076.70  Z=     0.00
          at point  X=198770.84  Y=372079.02  Z=     0.00
          at point  X=198770.93  Y=372082.01  Z=     0.00
          at point  X=198770.99  Y=372084.05  Z=     0.00
          at point  X=198771.04  Y=372086.00  Z=     0.00
          at point  X=198771.08  Y=372087.29  Z=     0.00
          at point  X=198771.51  Y=372102.14  Z=     0.00
          at point  X=198772.35  Y=372126.98  Z=     0.00

en hier een lijst gemaakt met bovengenoemde routine:

(10 198619.0 372021.0)
(10 198642.0 372030.0)
(10 198665.0 372038.0)
(10 198688.0 372046.0)
(10 198711.0 372055.0)
(10 198735.0 372064.0)
(10 198758.0 372072.0)
(10 198771.0 372077.0)


Dus, al gebruik ik jouw routine dan nog begint hij met de verkeerde waarde.
Of zie ik dit totaal verkeerd?

Even voor de duidelijkheid: dit is tot nu toe alleen in deze tekening (ik moet er nog ongeveer 200 doen).
Eeen lijst gemaakt met mijn routine van een andere tekening zie je hier:

(10 6526.18 234.6)
(10 6529.87 234.698)
(10 6573.07 236.713)
(10 6603.04 236.8 )
(10 6630.33 236.9)
(10 6679.83 237.1)


Onbegrijpelijk voor mij, als het om dezelfde polylijn gaat.
Een vriendelijke groet, HofCAD CSI
ACADcadabra

yoin