AutoCAD Visual LISP / AutoLISP :: Set Plot Scale By Annotation Scale?
Aug 9, 2012
I am working on automating page setups in model space and am looking for a way to set the plot scale equal to the annotation scale for scaled drawings with
Setting the plot scale with !A causes the lisp to fail. However, when running each prompt through the command line individually, !A works fine. what is missing?
take a look at the test.dwg it contains a block named 'box' (which is a rectangle) and some attributes. the annotation scale is 1:1 and i zoomed in to focus on one attribute.
change the annotation scale to 1:2 and you will see the attribute grows by 2 - that's ok! now load attmod.lsp and run attmod command and you will see the attribute grows again by 2
even the command only (entmod) the attributes without making any change.(to restore it use battman sync)Is there a workaround to this bug?
I would like to find a lisp that changes the scale of something that has an annotative scale and deletes all other scales in the object scale list. Often i have many different scales of existing dimensions or objects. i waste a lot of time opening the annotation object scale dialogue box, selecting add, finding my scale and deleting the old scale.
I work in autocad 2010 and I draw in scale 1:1 . What an annotation scale is, moreover I have never used annotative objects in my drawings.
Nonetheless, when I try to plot a drawing, while I am in the model view, I choose the scale in mm/units, I select the plot area and when I press preview or plot, I get the message THE ANNOTATION SCALE IS NOT EQUAL TO THE PLOT SCALE. DO YOU WANT TO CONTINUE?
I press yes, I print it and the outcome is always a bit smaller than it should be.
When i am in the layout mode and I try to plot, I dont get this message. But I dont know how scaling works in this case. For example I want to plot in a A4 paper, scale 1:100. So I type 1000mm/100units, as I did in the model mode, but the result is wrong.
I am adapting a routine by Alan J Thompson found here for placing an outline of a paperspace viewport in modelspace.
I have added some lines for making a suitable No plot layer with appropriate linetype, and wanted to make the lwpolyline have a thickness dependent upon the viewport scale.
My paperspace viewport scales are set for printing via Zoom - 1/50XP for example to get a 1:50 scale plot (or 0.02XP)
Having selected the relevant viewport, I wanted to be able to determine the vp scale, but am unsure how to extract this information from the viewport entity itself.
A2008. Is there a setvar, setenv, registry entry etc. that can be used to change the scale of Multileaders with annotative off to have the same effect that DIMSCALE has on Q leaders? I want to have a single scale-independent Multileader style and modify it on the fly along with DIMSCALE and LTSCALE. I'd use Qleader but UCS's do odd things to text position and orientation.
I am attempting to create an AutoLISP that removes all un-used drawing scales from a file, then adds the standard scales used in civil engineering. This is what I tried using:
Now, I am only a beginner to writing LISP, but I know that my problem is that it is reading the inch marks after the one in the scale name as a enter, but I don't know how to get around this. Also, I don't know how to get it to skip scales that are still in the drawing.
Any Lisp Routine to scale text objects a certain value and have the program actually scale each text object as you pick them.
The change text height using the Properties function does not work for what I need because the objects I need to scale are Mtext objects with Background Mask, and when you use the Properties function to change their text height it messes up the background mask so that you have to select each text entity and stretch the mask area smaller or larger, but if you use the scale function it scales the background mask as well so the background mask coverage is still the same.
I had been trying to insert a title block (block) in to a drawing as part of changing the title block But in some drawings the block gets scaled off. Is there any system variable or any solution to maintain the drawing without getting scaled while inserting block.
I had used -dwg units and this appears to single drawings only. Any other way to do this to all the files in a folder.
I have a problem that I cannot seem to solve. I have a drawings with a whole bunch of layout tabs that have a few viewports in each tab. One of these viewports on each layout tab is on the layer VIEWPORT. I did this so it would be easy to filter out the other viewports in the drawings. I am using the code below to change all of the viewports with the layer VIEWPORT to the Custom Scale 0.020833. This works for all of the layout tabs except the first tab. It will not for some odd reason work on the fist tab.
I have the below code (from a user here on the forum) which works great for aligning text, mtext and blocks to 2 points. For annotative entities, it respects the rotation angle for mtext and text.
ie I have an mtext object at 1"=20' scale and at 1"=40' scale. I run the command when the current annotative scale is 1"=40'. The object at 40' scale has changed, but the 20' scale is unchanged. This is working as I would like it to.
But for annotative blocks, it gets weirded out. In the above example, the block at 40' will rotate, but so will the attributes at 20' scale. But linework and hatching at 20' scale will be unchanged. it looks really weird. how to get it to play nice with blocks. Ideally, I'd like the block to be at different rotation angles in different annotative scales.
(defun C:R2P (/ ss ang edata); = Rotate objects to align with 2 Points (setq ss (ssget '((0 . "*TEXT,INSERT"))) ang (angle (getpoint " First alignment point: ") (getpoint " Second alignment point: ")) ) (repeat (sslength ss) (setq edata (entget (ssname ss 0))) (entmod (subst (cons 50 ang) (assoc 50 edata) edata)) (ssdel (ssname ss 0) ss) ))
The crux of the matter is that the CANNOSCALE value needs to match an existing named scale. This lisp is part of a bigger lisp and I need to pass a variable into it. Here's what I have:
I've looked around and only find nearly what I looking for. For 1"=20' I have a value of 0.004167 Paper Units = 1 Drawing Units, but what is the formula to calculate 1/30"=1'-0"?
I'd like to run one command that allows the user to draw a polygon viewport then sets that VP to 1/8"=1'-0".
It can be nearly accomplished with a macro, but falls just short because the polygon vp requires an unknown number of clicks, so there is no way to know how many pauses for user input in the macro.
I couldn’t figure out how these three types of scales are correlated with one another. For example, my drawing unit in AutoCAD is meter. And thus if I need to print my drawing with a scale of 1:200 then I set the annotation scale to be 1:2viewport scale to be 1:2plot scale 100:1000
if I need to print my drawing with a scale of 1:20 then I set the annotation scale to be 5:1viewport scale to be 5:1plot scale 100:1000
I couldn’t derive the rule that controls these three types of scales. This is also quite confusing when working with C3D! Sounds not the same logic is applied.
How to change the Scale Uniformly property in dynamic blocks accross hundreds of drawings using either/or scripts, lisp, vba or anything else that might do the job.
I just need to open the drawing and select the block (one block per drawing) then edit the scale uniformly property within the block, save then close the drawing and move onto the next drawing.
am in the process of setting up a standard file for all designers to use our local office. This file will have most of the styles created for profiles, alignments, surfaces, profile views, etc... as mostly specified by the customer and industry standards.
I am having trouble maintaining the correct annotation scale in the viewport in paperspace and when plotting.
The attached word document has 3 figures. Fig 1 shows the correct viewport scale and correct annotation scale. Fig 2 shows how the annotation scale abruptly changes during the plotting process. This abrupt annotation scale change sometimes happens during the regen process or when I switch from layout to model space and back to layout.The annotation scale goes from 1:1 to 1:40 just as in the viewport. This change in annotation scale is not supposed to happen because I want to preserve a certain plotting height for my text versus a viewport scale by using various annotation scales.
I have researched the procedures for annotation scale and have not found any info related to this "abrupt change in annotation scale".
Curiously , this abrupt change in annotation scale does not happen if the text does not belong to any styles within Civil 3D. Stand alone text stays at the correct annotation scale and is not affected in the same way.
I have a block that i would like to scale based on the plot scale when plotting.
We set up our drawings full size and occasionally we want to plot them at half size. We do this by setting the plot scale to 1:2 (custom) in the plotting dialog. We have a few blocks that we want to print at the same size on paper, essentially become twice as big.
Is there is a way to fix the size or just set a few scale states and have them automatically adjust based on the plot scale (not drawing/annotative scale)?
Where else do they keep this setting? I only have found it in Active Layout in extended dada
(entget (vlax-vla-object->ename(vla-get-activelayout (vla-get-activedocument(vlax-get-acad-object)))) '("*")) The last pice of extended data is: ("PLOTTRANSPARENCY" (1071 . 0)) When i change it to 1 (setq layout(vla-get-activelayout (vla-get-activedocument(vlax-get-acad-object)))) (vla-getXdata layout "PLOTTRANSPARENCY" 'type 'data) (vlax-safearray-fill data '("PLOTTRANSPARENCY" 1)) (vla-setXdata layout type data)
it stays there (extended data), but the setting in Plot dialog box doesn't change!!! And it still prints no transparency.
It takes to save the drawing and reopen it again to see the change.
The command -PLOT does not have this setting as well, so my options back to VBA or Lisp, but HOW?
I am aware of the plot stamp available in the Plot Dialog box, however, we are looking at ways to imbed this info in the dwg. I currently have the WD_TB with an attribute for FULLFILENAME, an attribute for PLOT DATE, and an attribute for PLOT TIME12. So I get the information on the dwg. I would like to be able to run all these attributes as a string. I have tried FULLFILENAME|PLOT DATE|PLOT TIME12 with spaces, commas, ( ), " ", etc. and I do not know the proper syntax to get this to work. I have also tried (getenv "FULLFILENAME") or the getvar, in the title descriptions box.
I need to plot in a file some windows from a LISP, like (command "-plot"...
The windows are defined in a list of points like (((0 0 0)(10 10 0))...) defining lower-left and upper-right corners. Each .plt file must be saved with a different name.
Is it possible to open a dwg, change something and then plot a layout with visual lisp. This is my start. Opening is working, but plotting not. I have to switch between drawings before the function is going on. Sometimes it's plotting an empty sheet and otherwise an error: ERROR: Automation Error. Description was not provided.