FastFiber

Staalprofiel 3d (dwarsprofielen)

Gestart door Lyrix, ma 26 04 2010, 12:38:27

Vorige topic - Volgende topic

Lyrix

Ik heb al eens gemeld dat ik met een 3d staalprofiel lisp bezig was.
Heb ook eens hier tips gevraagd ivm probleempjes.
Het project heeft een tijdje stil gelegen maar ben er nu weer mee begonnen.
Ik heb nu de warmgewalste profielen klaar en wilde jullie uiteraard laten zien wat het geworden is.

Deze lips bevat de volgende profielen, HEA, HEB, HEM, INP, IPE, UNP, hoek profiel gelijkzijdig en ongelijkzijdig, t profiel gelijk en ongelijkzijdig.

De koud gewalste en getrokken profielen moet ik nog verder uitwerken, dus deze zitten nog niet verwerkt in deze lisp.

Bijgaand in de zip vind je alle bestanden die je nodig hebt om het aan de gang te krijgen.
Alles in een mapje zetten, deze map toevoegen in je search path.
Menu inladen en het moet allemaal werken.

Uiteraard is deze lisp ook als 2d te gebruiken.

Op of aanmerkingen, tips suggesties, ik hoor ze graag!




roy_043

:vreegoe: Goed dat je het programma hebt afgemaakt.
:vreegoe: Fijn dat je het met de rest van het forum wil delen.
:vreegoe: Het progamma werkt ook op Bricscad 10.

Maar...
1. De gebruiker kan op OK klikken zonder een keuze te maken.
2. Je schakelt de osmode uit voordat de gebruiker een punt heeft aangegeven, dat is te vroeg.
3. Als de gebruiker op Cancel klikt dan wordt er ook een profiel getekend.

De code is moeilijk leesbaar, maar om de OK-knop te schakelen tussen enabled en disabled kun je het volgende doen:

Vervang dit:
(defun reset()
  (set_tile "ip" " ")
  (set_tile "value" (rtos 1)) ; deze tile ontbreekt
)

Door dit:
(defun reset (str modeAccept)
  (set_tile "ip" str)
  (mode_tile "accept" modeAccept)
)


Vervang overal dit:
(action_tile "staalprofiel" "(reset)") ; deze tile ontbreekt
Door dit:
(reset "" 1)

Vervang overal dit:
(set_tile "ip" ip)
Door dit:
(reset ip 0)

Lyrix

Roy,

Tnx voor de feedback.
Je hebt gelijk wat betreft de OSMODE.
Dit zal ik oplossen.
Wat betreft je verhaal op cancel, klopt ook. Was bij mij nog niet opgevallen omdat ik na cancel rechtermuis klik, dan tekend ie geen profiel.
Jouw oplossing is prima. Ik zal dit verwerken.

TNX!

Atwist

Beste Lyrix,

Ik heb geprobeerd om de lisp te starten maar dat lukte niet

Staalprofiel.lsp geladen

Gestart met staalprofiel

Maar helaas er gebeurt niets.
Atwist

AutoCad 2008.

roy_043

Atwist, welke (fout-)melding krijg je? En heb je hieraan gedacht?:
Citaat van: Lyrix op ma 26 04 2010, 12:38:27deze map toevoegen in je search path.

Atwist

Hallo Roy,

Heb de map map ook toegevoegd aan het zoekpad.

Als ik het programma start krijg ik geen foutmelding type staalprofiel in en mijn commando regel blijft leeg.

Atwist
Atwist

AutoCad 2008.

roy_043

Staat de map lokaal of op het netwerk?

Lyrix

#7
Je probeert waarschijnlijk de lisp te laden en te gebruiken zonder de toolbar. Je moet de toolbar inladen via het commando menuload. Dan het bestand staalprofiel.mns selecteren. Dan load klikken. Nu verschijnt warm staalprofiel toolbar. Als je op 1 van de knopjes drukt laad de lisp vanzelf incl de gekozen optie. Dit kan ook zonder de toolbar maar dan moet je weten wat de opties zijn. Laad de lisp maar. Typ staalprofielen, enter, de regel blijft leeg zoal je zegt. Tik nu hea en enter. Dan verschijnt ook het staalprofiel dcl menu. Via de toolbar hoef je niet steeds het commando in te tikken. Dat zit verwerkt in de knoppen.  Via het netwerk werkt het ook prima. Ik draai alles op het netwerk. Dat je geen foutmelding krijg is een teken dat ie het doet. Je moet em zoals gezegd via de toolbar gebruiken. Ik heb de regel met opties uit gezet juist omdat dit overbodig is als je de toolbar inlaad en gebruikt. Toolbars maken het leven zoveel gemakkelijker. :)  

julien

Dank je wel om dit te delen!
Mag ik deze lisp ook hier plaatsen:
http://www.cadsite.be/lisp/download/
?

Lyrix

#9
Julien, uiteraard mag je de lisp hier op het forum plaatsen.
Alleen je kan beter even wachten tot deze compleet is.
Zoals ik zei, de koud en getrokken profielen ben ik nu aan het uitwerken.
Ook had roy nog goede kritiek punten die ik zeker wil verbeteren.
Zodra de aangepaste complete versie er is mag je em zeker plaatsen in de download sectie.

Atwist, is het nog gelukt om de toolbar geladen te krijgen?


Lyrix

#10
Citaat van: roy_043 op ma 26 04 2010, 16:15:01

Vervang dit:
(defun reset()
 (set_tile "ip" " ")
 (set_tile "value" (rtos 1)) ; deze tile ontbreekt
)

Door dit:
(defun reset (str modeAccept)
 (set_tile "ip" str)
 (mode_tile "accept" modeAccept)
)


Vervang overal dit:
(action_tile "staalprofiel" "(reset)") ; deze tile ontbreekt
Door dit:
(reset "" 1)

Vervang overal dit:
(set_tile "ip" ip)
Door dit:
(reset ip 0)

Roy, ik kom niet helemaal uit jou aanwijzingen.
Het eerste deel is duidelijk.
Het tweede stukje moet ik dan alleen in de regel (action_tile "staalprofiel" "(reset)") het stukje (reset) vervangen voor (reset "" 1)?
Het derde stukje snap ik ook niet, ik zie namelijk nergens dit stukje (set_tile "ip" ip) waarvan je zegt dat ik dat moet vervangen.

Om 1 deel te pakken:

(defun reset (str modeAccept)
     (set_tile "ip" str)
     (mode_tile "accept" modeAccept)
)

(defun heaprofiel ()
   (setq convert_card (load_dialog "staalprofiel.dcl"))
   (if (not (new_dialog "staalprofiel" convert_card)) (exit))
   (action_tile "staalprofiel" "(reset "" 1)") ;       (reset) vervangen voor (reset "" 1)  
   (action_tile "accept" "(done_dialog) (setq userclick T)")
   (action_tile "cancel" "(done_dialog) (setq userclick nil)")
   (start_image "logo")
   (setq xx (dimx_tile "logo"))
   (setq yy (dimy_tile "logo"))
   (fill_image 0 0 xx yy -15)
   (slide_image 0 0 xx yy "logo")
   (end_image)
   (set_tile "value" (rtos value 2 2))
   (action_tile "value" "(setq value (distof $value))")
   (action_tile "close" "(clos_e) (setq xyz (done_dialog))")
   (start_list "input_list")
   (mapcar 'add_list in_list_HEA)
   (end_list)
   (action_tile "input_list" "(setq ip_no (atoi $value)) (do_set_ip_HEA)")
   (start_image "img")
   (setq xx (dimx_tile "img"))
   (setq yy (dimy_tile "img"))
   (fill_image 0 0 xx yy -15)
   (slide_image 0 0 xx yy "hea")
   (end_image)
   (start_dialog)      
   (unload_dialog convert_card)
   (setq pt1 (getpoint "\nGeef invoegpunt: "))
   (setq ds1 (sqrt (* lne lne 2.0)))
   (setq hk2 (+ hk1 (* 0.25 pi)))
   (setq hk3 (+ hk1 (* 0.5 pi)))
   (setq hk4 (+ hk1 (* 0.75 pi)))
   (setq pt2 (polar pt1 hk1 (/ lnb -2.0)))
   (setq pt3 (polar pt2 hk1 lnb))
   (setq pt4 (polar pt3 hk3 lnd))
   (setq pt5 (polar pt4 hk1 (+ (/ (- lnc lnb) 2.0) lne)))
   (setq pt6 (polar pt5 hk4 ds1))
   (setq pt7 (polar pt6 hk3 (- lna (* 2 (+ lnd lne)))))
   (setq pt8 (polar pt7 hk2 ds1))
   (setq pt9 (polar pt8 hk1 (- (/ (- lnb lnc) 2.0) lne)))
   (setq pt10 (polar pt9 hk3 lnd))
   (setq pt11 (polar pt10 hk1 (* -1.0 lnb)))
   (setq pt12 (polar pt11 hk3 (* -1.0 lnd)))
   (setq pt13 (polar pt12 hk1 (- (/ (- lnb lnc) 2.0) lne)))
   (setq pt14 (polar pt13 hk4 (* -1.0 ds1)))
   (setq pt15 (polar pt14 (+ pi hk3) (- lna (* 2 (+ lnd lne)))))
   (setq pt16 (polar pt15 hk2 (* -1.0 ds1)))
   (setq pt17 (polar pt16 hk1 (+ (/ (- lnc lnb) 2.0) lne)))
   (command "pline" pt2 "w" "0.0" "0.0" pt3 pt4 pt5 "a" pt6 "l" pt7 "a" pt8 "l" pt9 pt10 pt11 pt12 pt13 "a" pt14 "l" pt15 "a" pt16 "l" pt17 "cl")
   (command "region" "l" "")
   (command "extrude" "l" "")
   (setvar "osmode" OS)
)


roy_043

2.
In jouw programma staat nu 11x deze regel:
(action_tile "staalprofiel" "(reset)")
Omdat de tile "staalprofiel" ontbreekt in de dialoog "doet" deze regel nooit iets.
Deze regel moet je 11x helemaal vervangen door:
(reset "" 1)
De functie reset wordt hierdoor automatisch aangeroepen en de "accept" tile wordt ge-disabled.

3.
Dit tekstfragment komt 323x voor (dus hoezo "ik zie nergens..." :D):
(set_tile "ip" ip)
Precies dit tekstfragment moet je steeds vervangen door dit:
(reset ip 0)
Bijvoorbeeld:
Regel 151 oud:
( (= ip_no 0)  (setq ip "HEA 100" lna 96.00 lnb 100.00 lnc 5.00 lnd 8.00 lne 12.00 hk1 0)   (set_tile "ip" ip)  )

Regel 151 nieuw:
( (= ip_no 0)  (setq ip "HEA 100" lna 96.00 lnb 100.00 lnc 5.00 lnd 8.00 lne 12.00 hk1 0)   (reset ip 0)  )

Lyrix

Roy, GEWELDIG! Het werkt perfekt. De knop wordt nu pas aktief als je een maat geselecteerd hebt.



Lyrix

Bijgaand de laatste versie voor de warmgewalste profielen.
Door mijn drukke werkzaamheden ben ik nog niet aan de overige profielen toe gekomen.


Installatie is heel eenvoudig. Plaats alles in 1 map ergens op je harde schijf of server.
Voeg deze map in je Support File Search Path toe.

Laad het menu staalprofiel in via het commando load menu.
Als het menu geladen is wordt de lisp automatisch geladen als er een icoon aangeklikt wordt.


Julien je kan deze in de download plaatsen.

roy_043

@ Lyrix: Er is veel over jouw programma te zeggen. Ik beperk mij hier tot drie kritische opmerkingen. Het zijn dingen die de veel gebruikers zullen storen:

  • De oude osmode kun je beter aan het begin van de functies opslaan i.p.v. deze vast in te bouwen.
  • Voor de cancel-knop gebruik je de error-functie. Dit is weinig elegant. Bovendien heeft de error-functie een argument nodig en dat lever jij niet.
  • Je overschrijft de standaard error-functie zonder deze naderhand terug te zetten.

FastFiber