Jump to content

Moments of Inertia LISP


nicolas

Recommended Posts

Hi,

 

To Determine Moments of Inertia Ixx and Iyy:

 

Following conversion of objects into unions, I usually run MASSPROP to determine the centroid location, use UCS>Origin to move the UCS to the centroid and re-run MASSPROP to find Ixx and Iyy. During this procedure, I have to say no to write to file twice, divide the given Ixx and Iyy by 10x10x10x10 or 10000 to have the units to cm^4 and add cm^4 and do stacking at the end.

 

Hence my search for a lisp that can automatically do the above and convert the Ixx and Iyy results from mm4 to cm4 and add cm4 (with stack) at the end of the results even coloring the results to a given color for emphasis.

 

I have also found a lisp called modulus.vlx that calculate section modulus. However the results are in mm3 but the program add cm3 to the number. I want true cm3 results in spite of having drawn everything in acadiso.dwt and with mm units.

 

Thanking you in advance,

 

Regards,

 

Nicolas.

Link to comment
Share on other sites

  • Replies 20
  • Created
  • Last Reply

Top Posters In This Topic

  • Manila Wolf

    6

  • Lee Mac

    5

  • nicolas

    4

  • pBe

    3

I would have thought it would give me the same values for the Moment of Inertia Value as from MASSPOP when the UCS is located on the centroid of the solid object.

Strangely enough it still gives me the same value as before i moved the UCS, any ideas?

 

(defun c:mprop ()
(setq Sol (vlax-ename->vla-object        
(cadar (ssnamex (ssget "_+.:E:S")))))
  
(command "UCS" "_Origin"  (vlax-safearray->List
                              (variant-value
                                    (vlax-get-property
                                          sol
                                          'centroid))))
      (vlax-safearray->List
           (variant-value
                 (vlax-get-property
                       (vlax-ename->vla-object
                             (ssname (ssget "_P") 0))
                       'MomentOfInertia)))
           )

 

Moment of Inertia and Centroid at UCS World

Centroid: X: -4.17387

Y: 11.60698

Z: 1.86385

Moments of inertia: X: 10324.71866

Y: 1739.80075

Z: 11385.86527

Use centroid of first data for UCS Origin

Moment of Inertia and Centroid After UCS Origin

Centroid: X: -2.25548

Y: -2.17830

Z: 1.86385

Moments of inertia: X: 802.80898

Y: 836.23187

Z: 960.38671

 

Select previous object

invoke property for Moments of inertia

But is till get teh same value form when it was on UCS world

 

IF i can figure out how its supposed to be done. the covnersion would be easy.

I admit, math is one of my least favorite subject in school :D

Edited by pBe
additional info
Link to comment
Share on other sites

Attached you will find a dwg with moments of inertia calculation using a first massprop to find centroid and a second massprop after ucs origin has been set to the object centroid. I have tried to apply mprop lisp without success. Each time, I have the following error when selecting the unified region object:

 

; error: no function definition: VLAX-ENAME->VLA-OBJECT

 

001 ACAD Moments of Inertia Calc.dwg

 

Regards,

 

Nicolas.

Link to comment
Share on other sites

I have tried to apply mprop lisp without success. Each time, I have the following error when selecting the unified region object:

 

Read this:

http://www.cadtutor.net/forum/showthread.php?1390-How-to-use-the-LISP-routines-in-this-archive&p=339645&viewfull=1#post339645

Link to comment
Share on other sites

Following your described method, try something like this:

 

(defun c:test ( / *error* cmd m o s )

   (defun *error* ( msg )
       (if cmd (setvar 'CMDECHO cmd))
       (if (not (wcmatch (strcase msg) "*BREAK,*CANCEL*,*EXIT*"))
           (princ (strcat "\nError: " msg))
       )
       (princ)
   )

   (setq cmd (getvar 'CMDECHO))
   (setvar 'CMDECHO 0)

   (if (setq s (ssget "_+.:E:S" '((0 . "REGION,3DSOLID"))))
       (progn
           (setq o (vlax-ename->vla-object (ssname s 0)))
           (command "_.ucs" "_origin" (vlax-get o 'centroid))
           (setq m (vlax-get o 'momentofinertia))
           (command "_.ucs" "_p")
           (print (mapcar '(lambda ( x ) (/ x 10000.0)) m))
       )
   )
   (setvar 'CMDECHO cmd)
   (princ)      
)
(vl-load-com) (princ)

Link to comment
Share on other sites

Hi,

 

I have just test the lisp and it is working perfect with the unified region object and the result is set to cm^3. Thank you very much. I hope that you continue working on such lisp and add it to your extensive list of application. It would be great if you can add other information presented in massprop such as area, perimeter... and even modulus of inertia namely taking Ixx and divide it by the [greater of y-bounding box value] and taking Iyy and divide it by the [greater of x-bounding box value]. This time the lisp is working fine, I copy the texts directly into vlide and save the file under "Lisp Source File" and after "Load Text in Editor" it is working just perfect. I really like the automatic conversion mm4 into cm4. That's great time saver.

 

Continue the good work and thank you very much.

 

Regards,

 

Nicolas.

Link to comment
Share on other sites

You're welcome Nicolas, I'm glad that the program will save you time in your work. If I get a chance in the future I may develop the program further, but I don't plan to add it to my site at this point in time.

 

Lee

Link to comment
Share on other sites

Lee,

Even without moving the UCS origin. your code still gives the same result.

Comapring it to doing it manually Moments of inertia value would give a different result from different UCS origin.

 

That was my predicament before. due to my limited knowledge with solids and inertia. (lets just say physics :) ) i cant find any correlation with the values at post # 2. I would have think it would require mathematical computations to obatin a new value for Inertia after moving UCS origin.

Link to comment
Share on other sites

Even without moving the UCS origin. your code still gives the same result.

Comapring it to doing it manually Moments of inertia value would give a different result from different UCS origin.

 

Since the values of the centroid property and momentofinertia property are expressed relative to the current UCS, these values will change when the UCS is altered. I suspect the correct could also be achieved by transforming these values to WCS, then transforming to the desired coordinate system, but since I don't work in this area too often, I was just following the OP on this one.

Link to comment
Share on other sites

  • 1 month later...

Sorry for resurrecting an old thread, but I have an interest in this subject.

 

Nicolas, I understand what you are looking for. I use a method that will give you most but not all of what you are looking for. It will probably be considered long winded by experienced programmers, but it works for me. I made a toolbutton and apply a macro.

 

The macro is

 

^C^C_pdmode 3;_scale all; 0,0 0.1;_centroid;\_massp;\scale all; 0,0 10;_modulus;\;0,0;;;

 

The following will need to be loaded into the drawing: -

 

The attached "massP" lisp routine

MassP.lsp

 

Centroid.vlx available here http://www.cadstudio.cz/en/download.asp?file=Centroid+%2D+draw+center+of+gravity+%28CG%2FCOG%29+point+of+a+polyline%2C+region+or+3D+solid+%28VLX+Lisp+for+AutoCAD%29

 

And finally

 

Your Modulus.vlx ( Note, as suggested in the Modulus read me file, you need to preset the multiplication factor thus: -

(setq modKoef 0.001)

This will set your read out units to cm^3

 

Make your profile a region run the macro and pick the region each time prompted. (3 times)

 

This gives a lot of what you are asking for, but apart from the section modulus, does not list units.

 

With a bit of luck, some of the experienced programmers here will see this as a challenge and refine this for us. :)

 

Edit: For reference Modulus.vlx can be found here http://www.cadforum.cz/cadforum_en/download.asp?fileID=1016

Edited by SLW210
CODE TAGS PLEASE!!
Link to comment
Share on other sites

  • 2 months later...

Hi Manila Wolf,

 

Thanks you for those helpful tips. I have been using centroid with massP along with Modulus with the new settings in acaddoc.lsp effectively for the past few weeks. I highly recommend those applications especially if one should do multiple MOI and Section Modulus calculations. However, I have noted that centroid does duplicate the region object. How do you cope with this situation? Is Overkill sure enough to apply it to all regions at once? Is there another lisp?

 

 

Regards,

 

Nicolas.

Link to comment
Share on other sites

Hi Nicolas,

 

I did encounter the same problem in that the region is duplicated.

I made a few changes to my method.

First of all, on another thread or two, I received great help by regular Cadtutor user "PBe", to whom I can't thank enough.

 

So, three things I did, I used a different mass props lisp and introduced "dupdel.lsp" to delete the duplicate region. I also added a weight calculating routine (pBe help again) called "Calcwt.lsp". The centroid.vlx is not needed.

 

My macro now reads like this: -

 

^C^C_pdmode 3;TEXTSIZE 0.25 _scale all; 0,0 0.1;'_zoom e;;.9x;re;_MPcm;\_scale all; 0,0 10;'_zoom e;;.9x;TEXTSIZE 2.5 re;^C^C(setq modKoef 0.000001);(setq modSuf " cm3");^C^C_modulus;\;0,0;;;_dupdel;r a ;;re;^C^C(setq modKoef 1);(setq modSuf " mm3");_CalcWT;

 

I feel sure that all this could be made into a simplified lisp, but sadly I do not have the lisp knowledge to do this. I still have to manually pick the same region object 3 times after first running the macro. Also no error trapping of course.

Similar to you, I place all the lisp routines in my acaddoc.lsp.

 

Picking through the macro: -

 

1).

The first lisp called up is "MPcm.lsp" this pastes in the massprops text on the scaled down object and adds the cm based units to the text. It also places and displays the centroid. (I scale down the region object first, because I always draw in mm units).

 

2).

The second lisp called up is "Modulus.vlx" which I see you are familiar with. I notice that when run for the first time it can take a few seconds to load.

 

3).

The third lisp called up is "dupdel.lsp". This is freely available and the Authors name is in the lisp, so I think OK for me to post it here. This deletes duplicate objects and my macro sets it to delete duplicate regions only.

 

4).

The fourth lisp called up is "Calcwt.lsp". This gives me the option to select the material type and then lists the weight at a point in the drawing that I select. I updated this lisp to list common materials that I actually use most often.

 

A bit complicated, but it does give me the desired end result.

 

To summarise, I think the answer to your question is "dupdel.lsp" set to regions only, but the additional lisp's I have listed may also be of use to you.

MPcm.lsp

CalcWt.LSP

dupdel.lsp

Link to comment
Share on other sites

My macro as it is, gets a bit messy when there are multiple objects in the drawing, so I refined the zooming.

Now I have to select the same region 4 times in lieu of 3, but it works better on screen.

 

^C^C(alert "NOTE: - Select the same REGION each time you are prompted (4 times total)")(setq ss1 (ssget));\;_pdmode 3;TEXTSIZE 0.25 _scale all; 0,0 0.1;'_zoom o !ss1;;'_zoom .9x;re;_MPcm;\_scale all; 0,0 10;'_zoom o !ss1;;'zoom .8x;TEXTSIZE 2.5 re;^C^C(setq modKoef 0.001);(setq modSuf " cm3");^C^C_modulus;\;0,0;;;_dupdel;r a ;;re;^C^C(setq modKoef 1);(setq modSuf " mm3");_CalcWT;

 

I did try and make the initially selected region a remembered object so that it could be called up automatically each time, but it appears that the three lisps in the macro do not allow this method of selection when called from the macro. Hence the pick 4 times. Not 100% perfect, but it works for me.

Edited by Manila Wolf
(setq modKoef 0.001) was (setq modKoef 0.000001)
Link to comment
Share on other sites

Oops! I spotted an error in the macro. I have corrected the macro above by editing.

 

The (setq modKoef 0.000001) was incorrect scaling for the modulus. The correct scaling is (setq modKoef 0.001)

 

:oops:

Link to comment
Share on other sites

You're welcome Nicolas, I'm glad that the program will save you time in your work. If I get a chance in the future I may develop the program further, but I don't plan to add it to my site at this point in time.

 

Lee

 

This is indeed a specialized need but one I'm sure plenty of us have the need for. I once had in my possession a simple LISP program which did a very nice job of this. It drew a nice rectangle around all the data it compiled and gave you wt/ft, section properties, the works and it even asked before hand if you were doing steel or aluminum. I lost that script long ago and the gentleman who wrote it has since passed away. A few weeks ago I started something on this but got busy with other tasks. I am still buried with this new contract assignment but I would like to take this on and contribute it back to the forum. Everyone here has been generous to a fault in helping me, I figure it's the least I can do and I'm sure I will learn a thing or two along the way. Will report back on this soon.

 

And thanks again everyone for making this forum such a great place for keeping one's mind young with fresh thinking.

Link to comment
Share on other sites

This is indeed a specialized need but one I'm sure plenty of us have the need for.

 

I think you are right with this Bill. Massprop is a good feature, I believe that section modulus is most useful and I am trying all I can to automate the generation of the section modulus hand in hand with the massprops, and allow instant import of the text complete with desired units.

 

but I would like to take this on and contribute it back to the forum. Everyone here has been generous to a fault in helping me, I figure it's the least I can do and I'm sure I will learn a thing or two along the way. Will report back on this soon.

 

Hope you can help to keep improving the elements of this topic even if it is sporadic input. Rome wasn't built in a day, but then again I wasn't involved in that particular project. :D

 

And thanks again everyone for making this forum such a great place for keeping one's mind young with fresh thinking.

 

I wholeheartedly second this.

 

 

Nicolas,

 

Regarding Modulus.vlx.

Yesterday I emailed Cadstudio regarding the duplication of the region. I got a reply from them this morning stating: -

 

"Dear sir,

thanks for your input.

 

There is now an updated version of Modulus (V1.3) with fixed

behavior on cancelling the command (temp object deleted, UCS

restored) and with an option to use "P" for previous selection.

 

See

http://www.cadstudio.cz/download

 

I think they updated it as a result of my queries, but very good of them to answer me personally and promptly.

 

I believe this will help you also.

Link to comment
Share on other sites

  • 2 weeks later...

I found this lisp buried deep in my hard drive. It appears to calculate the section modulus. The problem is that I can't get the lisp to run! :(

 

I wonder if anybody can help by explaining why it won't run. I would be grateful.

 

;;; --------------------------------------------------------------------------
;;;   MASSCAL.LSP modified from ASCTEXT.LSP & BONG'S LISP
;;; --------------------------------------------------------------------------;
;;; modified by Eric Wong
;;; modified by Bong - May 1997
;;; This program superseeds MP1 and MP2.LSP. Thanks to Eric Wong. - bong
;;;
;;; add weight November 1998
;;; Save modes
;;;
;;; provide lower and upper Zx/Zy value
;;; 21 Apr 1999

(defun MODES (a) 
 (setq MLST '
       ())
 (repeat (length a) 
   (setq MLST (append MLST (list (list (car a) (getvar (car a))))))
   (setq a (cdr a))
 )
) 
;;;
;;; Restore modes
;;;
(defun MODER () 
 (repeat (length MLST) 
   (setvar (caar MLST) (cadar MLST))
   (setq MLST (cdr MLST))
 )
) 
;;;
;;; Ascii Text error handler
;;;
(defun at_err (st)                    ; If an error (such as CTRL-C) occurs
                                     ; while this command is active...
 (if (/= st "Function cancelled") 
   (princ (strcat "\nError: " st))
 ) 
 (moder)                             ; Restore modified modes
 (if (= (type rtfile) 'FILE) 
   (close rtfile)
 ) 
 (setq rtfile nil)
 (setq *error* olderr)               ; Restore old *error* handler
 (princ)
) 
;;;
;;; Read file line by line and store them
;;;
(defun readtxt1 (rf / rtfile txt txt1 txt2 txt3 txt4 txt5 txt6 txt7 txt8
                txt11 txt12 txt13 txt 14 txt15 txt16 xcen ycen xmin ymin)
 (setq rtfile (open rf "r"))
 (setq txt (read-line rtfile))   ;- space file header
 (setq txt1 (read-line rtfile)       ;- type of entity
       txt2 (read-line rtfile)       ;- space
       txt3 (read-line rtfile)       ;- area
       txt4 (read-line rtfile)       ;- perimeter
       txt5 (read-line rtfile)       ;- Bounding box x
       txt6 (read-line rtfile)       ;- Bounding box y
       txt7 (read-line rtfile)       ;- centroid-X
       txt8 (read-line rtfile)       ;- centroid-Y
       txt9 (read-line rtfile)       ;- MOI x
       txt10 (read-line rtfile)      ;- MOI y
       txt11 (read-line rtfile)      ;- POI x & y
       txt12 (read-line rtfile)      ;- ROG x
       txt13 (read-line rtfile)      ;- ROG y
       txt14 (read-line rtfile)      ;- PM heading
       txt15 (read-line rtfile)      ;- PM I
       txt16 (read-line rtfile)      ;- PM J
 ) ; setq
 (close rtfile)
 (setq rtfile nil)

 (setq xmax (nth 5 (read (strcat "(" txt5 ")")))
       ymax (nth 3 (read (strcat "(" txt6 ")")))
       xmax2 (nth 3 (read (strcat "(" txt5 ")")))
       ymax2 (nth 1 (read (strcat "(" txt6 ")")))
       xmin (nth 3 (read (strcat "(" txt5 ")")))
       ymin (nth 1 (read (strcat "(" txt6 ")")))
       xcen (nth 2 (read (strcat "(" txt7 ")")))
       ycen (nth 1 (read (strcat "(" txt8 ")")))
       xycen (list xcen ycen)
       xstr (polar (list xmin ycen) (dtr 180) (* 5 h))
       xend (polar (list xmax ycen) (dtr 0) (* 4 h))
       ystr (polar (list xcen ymin) (dtr -90) (* 4 h))
       yend (polar (list xcen ymax) (dtr 90) (* 4 h))
;;;; add weight
       wht (* 0.00271 (nth 1 (read (strcat "(" txt3 ")" ))))
 )
)
;;;
;;; Read file line by line and paste them
;;;
(defun readtxt2 (rf / s eof)
 (setq rtfile (open rf "r"))
 (setq eof nil)
 (while (null eof)
       (setq s (read-line rtfile))
       (if s
         (progn
               (command "TEXT" pt1 h ang s)
               (setq pt1 (polar pt1 (dtr -90) (* 1.666 h)))
         )
         (setq eof T)
       );if
 )
 (close rtfile)
 (setq rtfile nil)
)        
;;;
;;; -------------------------- MAIN PROGRAM -------------------------
;;;
(defun masstxt (ep1 / olderr ang eof rf h llea pt pt1 s xycen xstr xend
               ystr yend xmax ymax i j Zx Zy s1 s2 txt9 txt10)
 
 (setq olderr *error* *error* at_err)
 (modes '("BLIPMODE" "CMDECHO" "HIGHLIGHT" "CLAYER"))
 (setq rf (strcat (getvar "dwgname") ".mpr"))
 ;; Prompt for start point
 (while (null pt)
   (setq pt (getpoint "\nStart point : "))
   (if (not pt) (princ " no point picked, try again"))
 )
 (setq pt1 pt)                       ; First insertion point

;;;; modified: 06 May 1997 (walang o-r-a-s)
  ;;; set text style
  (setq oldsty (getvar "textstyle"))
  (if (= (tblsearch "STYLE" "MONOTXT") nil)
      (command "style" "monotxt" "monotxt" "" "" "" "" "" "")
      (setvar "textstyle" "monotxt")
   ); if monostyle
  
 ;; Prompt for a text height
 (setvar "textsize" (* 2.75 (getvar "dimscale")))
;;; turn off by bong
;;;  (setq h (getdist pt (strcat "\nHeight <"
;;;                               (rtos (getvar "TEXTSIZE")) ">: ")))
;;;  (if (not h)
 (setq h (getvar "TEXTSIZE"))
;;;  )
 (setq ang 0)
 (setvar "BLIPMODE" 0)
 (setvar "HIGHLIGHT" 0)
 (setvar "CMDECHO" 0)

;*****************************************************************
 (cond (  (and *debug* (/= 0 *debug*))
          (setq *error* nil)
          (setvar "cmdecho" 1)))
;*****************************************************************
;;; turn off by bong.
 (if (= llea nil)
     (command ".layer" "M" "massprop" "c" "3" "" "")
     (command ".layer" "c" "3" "massprop" "")
 )

 (setvar "clayer" "massprop")
 (readtxt1 rf)
 (if (= (tblsearch "ltype" "center2") nil)
     (command "linetype" "l" "center2" "acad" ""))
 (setvar "cecolor" "9") (setvar "celtype" "center2")
 (command ".line" xstr xend "" ".line" ystr yend "")
 (setvar "cecolor" "BYLAYER") (setvar "celtype" "BYLAYER")
 (command ".text" (polar xend (dtr 135) (* h 2)) (* h 1.5)"" "X")
 (command ".text" (polar yend (dtr -45) (* h 2)) (* h 1.5)"" "Y")
 (command ".copy" ep1 "" xycen "0,0")
 (command "massprop" (entlast) "" "Y" (getvar "dwgname"))
 (command ".erase" (entlast) "" ".redraw")
 (readtxt1 rf)
 (readtxt2 rf)

 (setq i    (nth 4 (read (strcat "(" txt9 ")")))
       j    (nth 1 (read (strcat "(" txt10 ")")))
       Zx   (/ i ymax)
       Zy   (/ j xmax)
       Zx2  (/ i (abs ymax2))
       Zy2  (/ j (abs xmax2))
       s1   (strcat "Modulus of Elasticity:Zx1 = " (rtos Zx 2 0) "   Zx2 = " (rtos Zx2 2 0))
       s2   (strcat "                      Zy1 = " (rtos Zy 2 0) "   Zy2 = " (rtos Zy2 2 0))
 )

 (command ".text" pt1 h ang s1)
 (command ".text" (polar pt1 (dtr -90) (* 1.666 h)) h ang s2)
 (command ".text" (polar pt1 (dtr -90) (* 3.32 h)) h ang (strcat "Estimated Weight (Alum):    " (rtos wht) "kg/m" ))
 (moder)                             ; Restore modified modes
 (setq *error* olderr)               ; Restore old *error* handler
 (princ)
 (setvar "textstyle" oldsty)
) 
;;;
;;; COMMAND declaration
;;;
(defun c:masscal (/ ep1 prela preco) (vmon)
       (setq ep1 nil)
       (while (= ep1 nil)
               (setq ep1 (entsel))
               (if (null ep1) (princ "no object selected\n"))
       )
       (if (/= "REGION" (cdr (assoc 0 (entget (car ep1)))))
           (progn
               (setq prela (cdr (assoc 8 (entget (car ep1))))
                     preco (cdr (assoc 62 (entget (car ep1))))
               )
               (if (= preco nil) (setq preco "BYLAYER"))
               (COMMAND "REGION" ep1 "")
               (COMMAND "CHPROP" (entlast) "" "la" prela "c" preco "")
               (setq ep1 (entlast))
           )
           (progn (princ "\n\tThe Object is REGION\n") (princ))
       )
       (COMMAND "MASSPROP" ep1 "" "Y" (getvar "dwgname"))
       (masstxt ep1)(princ))
       (dos_delete (strcat (getvar "dwgname") ".mpr"))

(defun C:MC ()(C:MASSCAL))
(princ "\n\tc:MASSCAL v1.1 loaded! - Extrussion Weight Added!")
(princ)

Link to comment
Share on other sites

This looks to be from about the time my old friend was working with LISP file for MASSPROP information which was the mid to late 1990's. Actually I think it was more like 1994 when I first ran into a MASSPROP lisp utility. I have only examined this briefly but the first thing I see is that there is a space between txt and 14 in the local variables called out in readtxt1 function. But even with fixing that, my copy of AutoCAD VLISP 2012 does not recognize the command "dos_delete". Haven't read much about this except that it's perhaps a module from another old group of LISP routines which was used way back. Even with commenting this line out the program crashes when it's trying to read the mpr file it created. I will have to spend more time looking at this. It does look very similar to the one I was searching from from my old DOS days as well.

Link to comment
Share on other sites

I have seen this referenced in the last few weeks but didn't run into in more depth until today. The above LISP file calls it and today I was asked to look at some older code authored by a previous employee and it calls DOS_DELETE in it. Of course this machine which is running Windows XP with ACAD 2002 just crashes saying it cannot find the function DOS_DELETE.

 

Can anyone clue me in on this? Is it something that is obsolete now...?

 

Google and yahoo have nothing about how this relates to AutoLISP which is surprising. Lots of DOS stuff and DoS attack stuff, but so far nothing which relates it AutoLISP has been found. Okay, I at least found DOSLib which I guess is no longer shipped with AutoCAD...so what took it's place or is all this code just so much junk now?

 

UPDATE: Ok, cool, I found the URL for the DOSLIB files. Had to get an old version of it as well as I had to find a site in Germany which had the etv1-9.exe file still available for free download. This code was written long ago in a galaxy far, far away. Now they want to dust it off and deploy it in a live setting again. More work for me so I won't complain.

Edited by Bill Tillman
Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.


×
×
  • Create New...