Recent Posts

Pages: [1] 2 3 ... 10
1
AutoLISP (Vanilla / Visual) / Re: LISP Dot Net Wrapper
« Last post by Rustabout on Today at 10:04:37 AM »
Much of the amazing stuff in the "show your stuff" threads tend to get hidden. I only recently browsed those threads. It was funny because I recall almost being in tears trying to get an AutoLISP code to work (prevailed none the less) only to see the exact code in the "show your stuff"... just a better version.

I kind of wish there was a way to get more attention/credit to all the nifty code snippets provided here... for free none the less.
2
BricsCAD Users / For any of you BricsCAD aficionados: BricsCAD Platinum is on sale.
« Last post by Rustabout on September 26, 2020, 03:01:53 PM »
Bricsys doesn't have sales all that often.

I was kind of hoping to see more sales (in general, not just with Bricsys), as there might be no time better to try and gain market share. The drawback to having a sale is that you kind of burn people who've just bought their licenses (but you could offer-up something in return like a cheap upgrade).

If I were looking for the functionality of Platinum I would probably buy it right now. I really only need the functionality of the Classic version however. Hence why I check their site now and then for sales.
3
CAD General / Re: Batch operations on multiple files
« Last post by framednlv on September 26, 2020, 02:02:05 PM »
This seems to work:
Code: [Select]
if /I [%~x1]==[.DWG] (echo "[%count%/%argc%]: Processing... %~f1" ) else (echo "[%count%/%argc%] skipping %~f1" )
if /I [%~x1]==[.DWG] (call "C:\Program Files\Autodesk\AutoCAD 2021\accoreconsole.exe" /i "%~f1" /s %script% /l en-US >"C:\temp\cleanup.log")

There is one problem I found.  If any of the file names have the '&' character it doesn't process any files after that one.

 
4
.NET / multiple plot to pdf
« Last post by daboho on September 26, 2020, 07:31:06 AM »
 i has try change code from this link https://www.keanw.com/2007/10/plotting-a-wind.html
i want plot multiple pdf by select block reference as border
this is my code
Code: [Select]
using Autodesk.AutoCAD.Runtime;
using Autodesk.AutoCAD.ApplicationServices;
using Autodesk.AutoCAD.DatabaseServices;
using Autodesk.AutoCAD.EditorInput;
using Autodesk.AutoCAD.PlottingServices;
using Autodesk.AutoCAD.Geometry;
using System.Runtime.InteropServices;
using System;
using System.Collections.Generic;

namespace PlottingApplication
{
    public class SimplePlottingCommands
    {
        [DllImport("accore.dll", CallingConvention = CallingConvention.Cdecl, EntryPoint = "acedTrans")]
        static extern int acedTrans(double[] point, IntPtr fromRb, IntPtr toRb, int disp, double[] result);
        [CommandMethod("winplot")]
        static public void WindowPlot()
        {
            Document doc = Application.DocumentManager.MdiActiveDocument;
            Editor ed = doc.Editor;
            Database db = doc.Database;
            //PromptPointOptions ppo = new PromptPointOptions("\nSelect first corner of plot area: ");
            //ppo.AllowNone = false;
            //PromptPointResult ppr = ed.GetPoint(ppo);
            //if (ppr.Status != PromptStatus.OK) return;

            //PromptCornerOptions pco =new PromptCornerOptions("\nSelect second corner of plot area: ",first);
            //ppr = ed.GetCorner(pco);
            //if (ppr.Status != PromptStatus.OK) return;
            int n = 1;
            var pso = new PromptSelectionOptions();
            pso.MessageForAdding = "\nsilahkan select All :";
            var psr = ed.GetSelection(pso);
            if (psr.Status != PromptStatus.OK) return;
            var dic = new Dictionary<Point3d, Point3d>();
            using (var tr = db.TransactionManager.StartTransaction())
            {
                short bgPlot = (short)Application.GetSystemVariable("BACKGROUNDPLOT");
                //set the BACKGROUNDPLOT = 0 temporarily.
                Application.SetSystemVariable("BACKGROUNDPLOT", 0);
                foreach (SelectedObject ss in psr.Value)
                {
                    var br = ss.ObjectId.GetObject(OpenMode.ForRead) as BlockReference;
                    if (br.Bounds.HasValue)
                    {
                        var extents = br.Bounds;
                        var ext1 = extents.Value.MinPoint;
                        var ext2 = extents.Value.MaxPoint;
                        dic.Add(ext1, ext2);
                    }

                }
                if (dic.Count == 0) return;
                // Transform from UCS to DCS
                Point3d first; Point3d second;
                foreach (var item in dic)
                {
                    first = item.Key;
                    second = item.Value;
                    ResultBuffer rbFrom = new ResultBuffer(new TypedValue(5003, 1)), rbTo = new ResultBuffer(new TypedValue(5003, 2));
                    double[] firres = new double[] { 0, 0, 0 };
                    double[] secres = new double[] { 0, 0, 0 };
                    // Transform the first point...
                    acedTrans(first.ToArray(), rbFrom.UnmanagedObject, rbTo.UnmanagedObject, 0, firres);
                    // ... and the second
                    acedTrans(second.ToArray(), rbFrom.UnmanagedObject, rbTo.UnmanagedObject, 0, secres);
                    // We can safely drop the Z-coord at this stage
                    Extents2d window = new Extents2d(firres[0], firres[1], secres[0], secres[1]);

                    // We'll be plotting the current layout
                    BlockTableRecord btr = (BlockTableRecord)tr.GetObject(db.CurrentSpaceId, OpenMode.ForRead);
                    Layout lo = (Layout)tr.GetObject(btr.LayoutId, OpenMode.ForRead);
                    // We need a PlotInfo object
                    // linked to the layout
                    PlotInfo pi = new PlotInfo();
                    pi.Layout = btr.LayoutId;
                    // We need a PlotSettings object
                    // based on the layout settings
                    // which we then customize
                    PlotSettings ps = new PlotSettings(lo.ModelType);
                    ps.CopyFrom(lo);
                    // The PlotSettingsValidator helps
                    // create a valid PlotSettings object
                    PlotSettingsValidator psv = PlotSettingsValidator.Current;
                    // We'll plot the extents, centered and
                    // scaled to fit
                    psv.SetPlotWindowArea(ps, window); psv.SetPlotType(ps, Autodesk.AutoCAD.DatabaseServices.PlotType.Window);
                    psv.SetUseStandardScale(ps, true);
                    psv.SetStdScaleType(ps, StdScaleType.ScaleToFit);
                    psv.SetPlotCentered(ps, true);
                    // We'll use the standard DWF PC3, as
                    // for today we're just plotting to file
                    psv.SetPlotConfigurationName(ps, "DWG To PDF.pc3", "ISO_full_bleed_A3_(420.00_x_297.00_MM)");
                  //  psv.SetPlotConfigurationName(ps,"DWF6 ePlot.pc3", "ANSI_A_(8.50_x_11.00_Inches)");
                    // We need to link the PlotInfo to the
                    // PlotSettings and then validate it
                    pi.OverrideSettings = ps;
                    PlotInfoValidator piv = new PlotInfoValidator();
                    piv.MediaMatchingPolicy = MatchingPolicy.MatchEnabled;
                    piv.Validate(pi);
                    // A PlotEngine does the actual plotting
                    // (can also create one for Preview)
                    if (PlotFactory.ProcessPlotState == ProcessPlotState.NotPlotting)
                    {
                        PlotEngine pe = PlotFactory.CreatePublishEngine();
                        using (pe)
                        {
                            // and allow thej user to cancel
                            PlotProgressDialog ppd = new PlotProgressDialog(false, 1, true);
                            using (ppd)
                            {
                                ppd.set_PlotMsgString(PlotMessageIndex.DialogTitle, "Custom Plot Progress");
                                ppd.set_PlotMsgString(PlotMessageIndex.CancelJobButtonMessage, "Cancel Job");
                                ppd.set_PlotMsgString(PlotMessageIndex.CancelSheetButtonMessage, "Cancel Sheet");
                                ppd.set_PlotMsgString(PlotMessageIndex.SheetSetProgressCaption, "Sheet Set Progress");
                                ppd.set_PlotMsgString(PlotMessageIndex.SheetProgressCaption, "Sheet Progress");
                                ppd.LowerPlotProgressRange = 0;
                                ppd.UpperPlotProgressRange = 100;
                                ppd.PlotProgressPos = 0;
                                // Let's start the plot, at last
                                ppd.OnBeginPlot();
                                ppd.IsVisible = true;
                                pe.BeginPlot(ppd, null);
                                // We'll be plotting a single document
                                pe.BeginDocument(pi, doc.Name, null, 1, true, "c:\\test-output" + n.ToString());
                                // Which contains a single sheet
                                ppd.OnBeginSheet();
                                ppd.LowerSheetProgressRange = 0;
                                ppd.UpperSheetProgressRange = 100;
                                ppd.SheetProgressPos = 0;
                                PlotPageInfo ppi = new PlotPageInfo();
                                pe.BeginPage(ppi, pi, true, null);
                                [color=red][b]pe.BeginGenerateGraphics(null);[/b][/color] // [color=red]problem in this part [/color]
                                pe.EndGenerateGraphics(null);
                                // Finish the sheet
                                pe.EndPage(null);
                                ppd.SheetProgressPos = 100;
                                ppd.OnEndSheet();
                                // Finish the document
                                pe.EndDocument(null);
                                // And finish the plot
                                ppd.PlotProgressPos = 100;
                                ppd.OnEndPlot();
                                pe.EndPlot(null);
                                n++;
                            }
                        }
                    }
                    else
                    {
                        ed.WriteMessage("\nAnother plot is in progress.");
                    }
                }
                Application.SetSystemVariable("BACKGROUNDPLOT", bgPlot);
                tr.Commit();
            }
        }












    }

}
5
CAD General / Re: Unexpected vector ->
« Last post by MickD on September 25, 2020, 07:38:39 PM »
No sweat MP, just a small vent :)
Stay well!
6
AutoLISP (Vanilla / Visual) / Re: Sheet Index
« Last post by steve.carson on September 25, 2020, 12:09:32 PM »
Oh, yeah, forgot to mention there is always an error displayed at the command line when running the sstable function. I was never able to track it down, but it runs and completes and creates the table.



Steve
7
AutoLISP (Vanilla / Visual) / Re: Sheet Index
« Last post by steve.carson on September 25, 2020, 12:05:20 PM »
Using the great code by MP for the DST->XML functions, by Lee Mac for the Table and DCL functions, and J. Szewczak for the XML functions, I put together the attached sheetset functions, some more useful than others. I'm sure anything written by me could be improved. I think this was the second time I played with DCL, so there was a lot of guess-and-check going on.

I think the most useful function in here is the "sstable" function that lets you create a regular autocad table from multiple dst files. This is handy for when you have separate dst's for each discipline in a project. I tried to mimic the built in method to create a sheet list table from the SSM, where you can specify the column headings for whatever property you want in the table. It stores an xrecord in the drawing, and uses it as defaults for the next time you run it. It's not very fast, but much faster than built in methods. Our projects are pretty big (Ports and Harbors, Marine structures).

There is also a function to index a sheet property ("indexss"), which is handy for the X in "sheet X of XX".

Hope for can find it useful!


Big thanks to MP, Lee Mac, and J. Szewczak!


Steve
8
CAD General / Re: Batch operations on multiple files
« Last post by John Kaul (Se7en) on September 25, 2020, 11:14:03 AM »
It would probably be better to let the program crash for those that try to launch this on a file other than a DWG but I'll play along (-i.e. only drag and drop only DWGs).

Two minor changes:
1. Added a filter on the argument counter.
2. Added a simple if then statement in the recursive function.

Code - Bash: [Select]
  1. @echo off
  2. :: process files given as argument to this batch script.
  3. ::
  4. :: Last Updated: 09.25.20 10:08:55 AM
  5. ::
  6. :: BY: John Kaul
  7.  
  8. set script="%~dp0\BatchDrawings_accoreconsole.scr"
  9. set script=%script:\\=\%
  10. :: - Create an argument counter for prompting.
  11. set argc=0
  12. set count=1
  13. :: - Find out how many arguments we have.
  14. for %%x in ("%*.dwg") do set /A argc+=1
  15.  
  16. :processArgs
  17.         if [%1]==[] goto endmark
  18.         if NOT [%~x1]==[.dwg] goto endmark
  19.         title "%~f1"
  20.         call "C:\Program Files\Autodesk\AutoCAD 2021\accoreconsole.exe" /i "%~f1" /s %script% /l en-US >"C:\temp\cleanup.log"
  21.         echo Processing [%count%/%argc%]: %~f1
  22.         set /A count +=1
  23.         if errorlevel 1 goto errormark
  24.         SHIFT
  25.         goto processArgs
  26. :errormark
  27.         echo.
  28.         echo.
  29.         echo ERROR processing %~f1
  30.         pause
  31.         echo.
  32. :endmark
  33. rem
  34. rem     finished
  35. rem
9
CAD General / Re: Batch operations on multiple files
« Last post by framednlv on September 25, 2020, 09:45:41 AM »
Thanks, that works great.
One other thing, can you help with filtering .dwg files only?

Thanks,
Chris
10
CAD General / Re: Batch operations on multiple files
« Last post by John Kaul (Se7en) on September 25, 2020, 08:57:55 AM »
The following should give you what you want. -i.e. "Processing [21/100]: c:\temp\mydrawing.dwg"

Code - Bash: [Select]
  1. @echo off
  2. :: process files given as argument to this batch script.
  3. ::
  4. :: Last Updated: 09.25.20 7:51:30 AM
  5. ::
  6. :: BY: John Kaul
  7.  
  8. set script="%~dp0\BatchDrawings_accoreconsole.scr"
  9. set script=%script:\\=\%
  10. :: - Create an argument counter for prompting.
  11. set argc=0
  12. set count=1
  13. :: - Find out how many arguments we have.
  14. for %%x in (%*) do set /A argc+=1
  15.  
  16. :processArgs
  17.         if [%1]==[] goto endmark
  18.         title "%~f1"
  19.         call "C:\Program Files\Autodesk\AutoCAD 2021\accoreconsole.exe" /i "%~f1" /s %script% /l en-US >"C:\temp\cleanup.log"
  20.         echo Processing [%count%/%argc%]: %~f1
  21.         set /A count +=1
  22.         if errorlevel 1 goto errormark
  23.         SHIFT
  24.         goto processArgs
  25. :errormark
  26.         echo.
  27.         echo.
  28.         echo ERROR processing %~f1
  29.         pause
  30.         echo.
  31. :endmark
  32. rem
  33. rem     finished
  34. rem
  35.  
Pages: [1] 2 3 ... 10